如果单击其所有者窗口,则标准Windows对话框将闪烁.效果类似于激活和停用窗口.
然而,当我在对话框上实现自定义窗口边框时,我无法弄清楚何时应该闪烁窗口.Windows不会为我闪烁对话框.
这是我试过的:
我看到所有消息都发送给所有者和对话框,但无法找到任何仅用于告诉窗口闪烁的消息.
我将Spy ++挂钩到默认的Windows对话框中,但也无法找到"flash"消息.
在WinUser.h中查找我找不到"flash"消息,所以我假设它是指定了lParam和wParam的一个或多个消息的某种组合.
有没有人有这方面的经验,或者也许可以指向一些解释这个的页面?任何想法都值得赞赏,因为我已经在这个问题上工作了好几个月了.
编辑
在回复评论时,以下是我目前使用的代码:
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == 0x0020)
{
if ((short)((long)lParam & 0xffff) == (-2))
{
short hiword = (short)((((long)lParam) >> 16) & 0xffff);
if (hiword == 0x0201 || hiword == 0x0204)
Flash(); // My function which simulates a window flash
}
}
return IntPtr.Zero;
}
Run Code Online (Sandbox Code Playgroud)
没有消息告诉您Windows希望您的窗口闪烁.但是,你可以做的是观察Windows用来开始闪烁窗口的相同触发器.
如果所有者窗口已禁用(WS_DISABLED样式位已设置)并且用户在禁用窗口的任何部分单击鼠标按钮,则窗口将闪烁.
在内部,这是通过DefWindowProc响应WM_SETCURSOR消息来处理的:
HTERROR,和WM_LBUTTONDOWN等)之一,和DefWindowProc将调用FlashWindowEx弹出窗口因此,要确定何时应自行刷新对话框的触发器,您所要做的就是与Windows一样.在所有者窗口的窗口过程中,处理WM_SETCURSOR消息,执行上述三个测试,如果这三个都是真的,那么您可以为对话框触发自己的自定义闪烁.当然,在那种情况下,你不会将消息传回去DefWindowProc处理.
| 归档时间: |
|
| 查看次数: |
1014 次 |
| 最近记录: |