2016-09-27 5 views
4

Ich habe ein Top-Level-Fenster, das mit WS_POPUP/WS_EX_APPWINDOW erstellt wurde, so dass es Nicht-Standard-Frame verwendet und seine Beschriftung in der Taskleiste angezeigt wird. Noch habe ich benutzerdefinierte WM_NCHITTEST Handler, wenn das wichtig ist.Gibt es WM_QUERYHIDE/CLOSE oder eine ähnliche Nachricht?

Wenn das Fenster "auf Taskleiste minimiert" ist (vom Bildschirm entfernt) und der Benutzer auf sein Symbol/Beschriftung in der Taskleiste klickt, wird das Fenster WM_QUERYOPEN Nachricht und wird von DefWindowProc geöffnet.

Aber wenn das Fenster geöffnet wird und Benutzer auf sein Symbol/Beschriftung in der Taskleiste klickt, wird das Fenster nur deaktiviert - ich muss es zusammenbrechen.

Gibt es Meldungen, die von der Shell an das Fenster gesendet werden, wenn sich die Maus in der Taskleiste befindet?

Ich versuche, Standard-Windows-Shell-Verhalten zu reproduzieren - zuerst klicken Sie auf das Fenster der Taskleiste Fenster zeigt das Fenster und zweiten Klick - versteckt es. Der erste Teil (Enthüllung) funktioniert standardmäßig, aber nicht der zweite (Verstecken).

UPDATE: Hier sind Nachrichten, die mein Fenster bekommt, wenn es auf dem Bildschirm und Benutzer klickt auf die Beschriftung in der Taskleiste ist:

<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 

Fenster Stile: WS_POPUP | WS_VISIBLE | WS_SYSMENU

Fenster ex-Stile: WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_APPWINDOW

Wenn das wichtig ist, sieht das Fenster so aus:

enter image description here

Das ist nur ein Test.

+0

Ich würde annehmen, dass [WM_SIZE] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms632646.aspx) zu spät gesendet wird (dh wenn das Fenster bereits minimiert wurde) , aber möglicherweise [WM_WINDOWPOSCHANGING] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms632653.aspx) könnte hilfreich sein, mit dem undokumentierten 'SWP_STATECHANGED' Flag. – IInspectable

+0

Wenn das Fenster auf dem Bildschirm angezeigt wird und Sie auf sein Symbol in der Taskleiste klicken, ändert sich seine Position nicht. Und tatsächlich sehe ich keine WM_POSWINDOWCHANGING Nachrichten darauf. Nur WM_ACTIVATE, da der Fokus vom Fenster zur Taskleiste geht. –

+0

Nicht sehr wahrscheinlich, ohne ein Systemmenü, aber erhält Ihr Fenster eine [WM_SYSCOMMAND] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms646360.aspx) Nachricht? – IInspectable

Antwort

2

Sie können versuchen, WS_MINIMIZEBOX zum Fenster Stil wie folgt hinzuzufügen: WS_POPUP | WS_MINIMIZEBOX.

Verwandte Themen