2010-09-22 14 views
1

Selon MSDN, WM_SIZE doit être envoyé à la fenêtre lorsque la fenêtre est réduite ou restaurée. Mais ma fenêtre d'application, qui est WTL CDialogImpl n'obtient jamais WM_SIZE lors de la réduction ou de la restauration.aucun message WM_SIZE lors de la réduction ou de la restauration

J'utilise spy ++ pour vérifier, je peux obtenir WM_SYSCOMMAND, WM_WINDOWPOSCHANING, WM_ACTIVE, WM_ACTIVEAPP etc, mais pas WM_SIZE.

J'ai vérifié un autre exemple d'application WTL, je suis en mesure d'obtenir des messages WM_SIZE lors de la réduction ou de la restauration.

Ma question est pourquoi ma fenêtre WTL CDialogImpl ne reçoit pas WM_SIZE? En plus de cela, y a-t-il un autre message pour indiquer la restauration ou minimiser la finition? Je veux dire, dans le système, la plupart du temps, il y a une animation pour montrer le processus de minimisation/restauration. J'ai besoin d'un message ou d'un événement pour que l'application sache que l'animation est terminée lors de la restauration.

merci!

William L.

+1

WM_MOVE, pas WM_SIZE. Documentez les drapeaux de style de la fenêtre. –

Répondre

0

Comme indiqué dans le docUne fenêtre reçoit ce message grâce à sa fonction WindowProc de sorte que vous ne l'obtenir par Spy ++.

Quoiqu'il en soit le message WM_SIZE est reçu dans un ATL :: CDialogImpl dialogues dérivés à la création, la minimisation et la restauration.

Pour vérifier avec le WTL AppWizard créer une application minimale de dialogue modale WTL et ajoutez une entrée de carte de message pour WM_SIZE et un correspondant OnSize() membre:

BEGIN_MSG_MAP(CMainDlg) 
     MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) 
     MESSAGE_HANDLER(WM_SIZE, OnSize) 
     //... 
    END_MSG_MAP() 
    LRESULT OnSize(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) 
    { 
     return 0; 
    } 

Définir un point d'arrêt dans OnSize() ça va être touché.

Votre problème (le cas échéant) est ailleurs.