gpt4 book ai didi

.net - 即使在激活时也使窗口在外观上保持非事件状态

转载 作者:行者123 更新时间:2023-12-01 00:34:13 25 4
gpt4 key购买 nike

有没有办法让窗口保持非事件状态,即使它包含焦点?我有两种形式(A 和 B)。用户与 A 交互后,我将焦点转移回 B。焦点转移的结果(用户单击 A,然后焦点转移回 B)是表单 A 从事件状态闪烁到非事件状态。这看起来很难看(尤其是在 Vista 上,A 会暂时获得更大的阴影)。我怎样才能让 A 保持不活动状态,这样就不会发生这种闪烁?

最佳答案

终于找到答案了!

警告:请勿滥用此答案的技术。这样做会使您的用户感到困惑,并且通常会损害计算体验。下面描述的技术在某些情况下可能非常有用(例如,实现类似 IntelliSense 的行为),但在使用它时保持审慎。

WM_NCACTIVATE消息被发送到窗口以将其非客户区(即边框和标题栏)的状态更改为非事件或事件。消息的 wParam 指示状态是非事件的还是事件的。如果 wParam 为真(值为 1),则窗口看起来是事件的。如果 wParam 为 false(值为 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);
}

关于.net - 即使在激活时也使窗口在外观上保持非事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/813745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com