Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 是否有WM_QUERYHIDE/CLOSE或类似信息?_Windows_Shell_Winapi - Fatal编程技术网

Windows 是否有WM_QUERYHIDE/CLOSE或类似信息?

Windows 是否有WM_QUERYHIDE/CLOSE或类似信息?,windows,shell,winapi,Windows,Shell,Winapi,我有一个用WS\u POPUP/WS\u EX\u APPWINDOW创建的顶级窗口,因此它使用非标准框架,其标题显示在任务栏上。 然而,如果这很重要的话,我有一个定制的WM\u NCHITTEST处理程序 当窗口“折叠到任务栏”(从屏幕上删除)并且用户单击任务栏上的图标/标题时,窗口将收到WM_QUERYOPEN消息,并由DefWindowProc打开 但当窗口打开,用户点击任务栏上的图标/标题时,窗口就会被停用——我需要折叠它 当鼠标位于任务栏的标题上时,shell是否向窗口发送任何消息 我

我有一个用
WS\u POPUP
/
WS\u EX\u APPWINDOW
创建的顶级窗口,因此它使用非标准框架,其标题显示在任务栏上。 然而,如果这很重要的话,我有一个定制的
WM\u NCHITTEST
处理程序

当窗口“折叠到任务栏”(从屏幕上删除)并且用户单击任务栏上的图标/标题时,窗口将收到
WM_QUERYOPEN
消息,并由DefWindowProc打开

但当窗口打开,用户点击任务栏上的图标/标题时,窗口就会被停用——我需要折叠它

当鼠标位于任务栏的标题上时,shell是否向窗口发送任何消息

我试图重现标准的Windows外壳行为-第一次单击任务栏的窗口图标显示窗口,第二次单击-隐藏窗口。默认情况下,第一部分(显示)起作用,但第二部分(隐藏)不起作用

更新:以下是当我的窗口出现在屏幕上并且用户在任务栏中单击其标题时收到的消息:

<01287> 00150DAE S WM_NCACTIVATE fActive:False
<01288> 00150DAE R WM_NCACTIVATE fDeactivateOK:True
<01289> 00150DAE S WM_ACTIVATE fActive:WA_INACTIVE fMinimized:False hwndPrevious:(null)
<01290> 00150DAE R WM_ACTIVATE
<01291> 00150DAE S WM_ACTIVATEAPP fActive:False dwThreadID:000041EC
<01292> 00150DAE R WM_ACTIVATEAPP
<01293> 00150DAE S WM_KILLFOCUS hwndGetFocus:(null)
<01294> 00150DAE R WM_KILLFOCUS
<01295> 00150DAE S WM_IME_SETCONTEXT fSet:0 iShow:C000000F
<01296> 00150DAE S WM_IME_NOTIFY dwCommand:IMN_CLOSESTATUSWINDOW dwCommand:00000001 dwData:00000000
<01297> 00150DAE R WM_IME_NOTIFY
<01298> 00150DAE R WM_IME_SETCONTEXT
00150DAE S WM\u NCACTIVE事实:错误
00150DAE R WM\u激活fDeactivateOK:真
00150DAE S WM_激活事实:WA_非活动fMinimized:False hwndPrevious:(null)
00150DAE R WM_激活
00150DAE S WM_ACTIVATEAPP事实:假dwThreadID:000041EC
00150DAE R WM_激活EAPP
00150DAE S WM_KILLFOCUS hwndGetFocus:(空)
00150DAE R WM_KILLFOCUS
00150DAE的WM\U IME\U SETCONTEXT fSet:0 iShow:C000000F
00150DAE的WM\U IME\U NOTIFY dwCommand:IMN\U CLOSESTAUSWindow dwCommand:00000001 dwData:00000000
00150DAE R WM\u IME\u通知
00150DAE R WM\U IME\U SETCONTEXT
窗口样式:
WS_弹出窗口| WS_可见| WS_系统菜单

窗口扩展样式:
WS_ex_LEFT | WS_ex_LTRREADING | WS_ex_APPWINDOW

如果这很重要,则窗口如下所示:


这只是一个测试。

您可以尝试将WS_MINIMIZEBOX添加到窗口样式中,如下所示:WS_POPUP | WS_MINIMIZEBOX。

我假设发送太晚(即当窗口已最小化时),但可能会有所帮助,使用未记录的
SWP_STATECHANGED
标志。当窗口在屏幕上,您单击任务栏中的图标时,其位置不会改变。事实上,我没有在上面看到任何WM_PosWindow更改消息。当焦点从窗口转到任务栏时,只有WM_激活。不太可能,没有系统菜单,但您的窗口是否收到消息?您是否尝试使用Spy++查看哪些消息发送到您的窗口和/或其所有者窗口?请看,您可以尝试将WS_MINIMIZEBOX添加到windows样式中,如下所示:WS_POPUP | WS_MINIMIZEBOX。