有没有办法让窗口保持非活动状态,即使它包含焦点?我有两种形式(A和B)。在用户与A交互之后,我将焦点转移回B.焦点转移的结果(用户点击A,然后焦点转移回B)是表单A从活动状态闪烁到非活动状态。这看起来很丑陋(尤其是在Vista上,瞬间会有更大的影子)。我如何让A保持非活动状态,以避免这种闪烁现象?即使在激活时仍保持窗口无效外观
回答
最后,我找到了答案!
警告:请勿滥用此答案的技术。这样做会混淆您的用户,并且会损害一般的计算体验。下面描述的技术在某些情况下可能非常有用(例如,实施类似智能感知的行为),但请在您的使用中明智。
WM_NCACTIVATE消息被发送到一个窗口,将其非客户区域(即边界和标题栏)的状态更改为非活动或活动状态。消息的wParam指示状态是否处于非活动状态或活动状态。如果wParam为真(值为1),该窗口将显示为活动状态。如果wParam为假(值为0),该窗口将看起来无效。要强制一个窗口保持不活动状态或活动状态,通过将wParam设置为相应的值(0或1)来覆盖wParam,并且您将全部设置!
private const int WM_NCACTIVATE = 0x0086;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_NCACTIVATE)
{
// Use this to make it always look inactive:
m.WParam = (IntPtr)0;
// Alternately, use this to make it always look active:
m.WParam = (IntPtr)1;
}
base.WndProc(ref m);
}
您正在讨论更改gui模型的默认行为。我不会建议这样做。如果用户在A上做某事,那么回到B不应该A消失?为什么它“闪烁”?焦点改变发生时,它应该是一个单一的开关。
无法从你的描述说是焦点切换,如:
A-> B
B-> A->用户点击 - >乙
B-> A
?
不知道这是否有帮助,但Winforms支持自有表单的概念。例如,即使浮动工具栏位于顶层窗口之外,即使顶层窗口处于活动状态(反之亦然),它们仍保持活动状态。同样的,你希望用户能够与您的形式的互动,而无需停用形式B.
要做到这一点,这听起来像你需要调用b.AddOwnedForm(a)
您展示a
之前。
我尝试了你的建议,但不幸的是,拥有窗口和父窗口之间的焦点切换仍然将窗口的外观从不活动变为活动。 – 2009-05-02 20:17:38
- 1. 激活窗口
- 2. Python窗口激活
- 3. popup没有激活窗口被激活
- 4. 从弹出窗口激活父窗口
- 5. HTML - 无效输入并点击外部时保持活动
- 6. 如何激活窗口
- 7. 可可:激活窗口:shouldPopUpDocumentPathMenu:?
- 8. VBA激活Internet Explorer窗口
- 9. 激活控制台窗口
- 10. wpf窗口未激活
- 11. 弹出窗口被激活
- 12. 即使在语法错误时仍保持简单服务器活动
- 13. 即使nsmangedobject已被删除,仍然保持活动状态
- 14. 使用VBA从Excel激活Word窗口
- 15. 当窗口很小时调整窗口大小,即使窗口宽度较大时也保持不变
- 16. Django - 即使数据无效,ModelForm仍在保存
- 17. Qt:即使在失去焦点时仍将子窗口保留在父窗口之上
- 18. 如何在Java中激活窗口?
- 19. 无序列表下拉子菜单 - 保持激活点击时
- 20. 使用Visual Studio即时窗口像VBA即时窗口
- 21. 如何保持JTable自定义渲染器在窗口大小上的外观?
- 22. 重新激活以前激活的窗口/程序applescript?
- 23. 即使在调整窗口大小时也保持背景图像居中
- 24. 即使在非活动状态下,弹出窗口(非模态)仍然可见
- 25. 即使在活动关闭后,仍然保持Android服务运行
- 26. 即使在设备重启后仍然保持Android调试器存活
- 27. 如何激活保持活动状态,http://www.webpagetest.org表示保持活动状态未激活
- 28. 如何激活外部应用程序的窗口
- 29. 激活窗口/应用程序
- 30. autohotkey激活窗口两次禁用它?
我想模仿VisualStudio的intellisense。 A是建议窗口,B是用户输入文本的位置。用户点击A(更改选定的建议等)后,我会自动将焦点设置回B,以便用户不必手动设置焦点即可继续输入。焦点转移是这样的:焦点在B上设置,用户在A上点击,在鼠标上时我将焦点设置回B.瞬间获得焦点,导致焦点闪烁(或闪烁),我想停止。 – 2009-05-02 20:11:35