Zac*_*son 2 .net appearance winforms
有没有办法让窗口看起来不活动,即使它包含焦点?我有两种形式(A和B).在用户与A交互之后,我将焦点转移回B.焦点转移的结果(用户点击A,然后将焦点转移回B)是A形式从活动闪烁到不活动.这看起来很丑陋(特别是在Vista上,A瞬间变得更大的阴影).如何让A保持不活动状态,这样就不会发生这种眨眼?
Zac*_*son 11
最后,我找到了答案!
警告: 不要滥用这个答案的技巧.这样做会使您的用户感到困惑,并且通常会对计算体验造成损害.下面描述的技术在某些情况下非常有用(例如,实现类似IntelliSense的行为),但请谨慎使用它.
该WM_NCACTIVATE消息被发送到一个窗口到其非工作区的状态(即边界和标题栏)改变为不活动或活动.消息的wParam指示状态是处于非活动状态还是活动状态.如果wParam为true(值为1),则窗口将显示为活动状态.如果wParam为false(值为0),则窗口将显示为非活动状态.要强制窗口保持非活动状态或活动状态,请通过将其设置为相应的值(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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2759 次 |
| 最近记录: |