1

MSDNによると、ウィンドウが最小化または復元されたときに、WM_SIZEをウィンドウに送信する必要があります。しかし、WTL CDialogImplである私のアプリケーションウィンドウは、最小化または復元時にWM_SIZEを取得しません。

spy ++を使用してチェックします。WM_SYSCOMMAND、WM_WINDOWPOSCHANING、WM_ACTIVE、WM_ACTIVEAPPなどを取得できますが、WM_SIZEは取得できません。

他のいくつかのWTLサンプルアプリケーションを確認しました。最小化または復元すると、WM_SIZEメッセージを取得できます。

私の質問は、WTL CDialogImplウィンドウがWM_SIZEを受け取らないのはなぜですか?これに加えて、復元または終了を最小限に抑えることを示す他のメッセージはありますか?つまり、システムでは、ほとんどの場合、最小化/復元プロセスを示すアニメーションがあります。復元時にアニメーションが完了したことをアプリに知らせるメッセージまたはイベントが必要です。

ありがとう!

ウィリアムL.

4

1 に答える 1

0

ドキュメント に記載されているように、ウィンドウはWindowProc関数を介してこのメ​​ッセージを受信するため、Spy++を介してメッセージを取得することはありません。

とにかく、WM_SIZEメッセージは、作成、最小化、および復元時にATL::CDialogImplから派生したダイアログで受信されます。

WTL AppWizardで確認するには、最小限のWTLモーダルダイアログアプリケーションを作成し、WM_SIZEおよび対応するOnSize()メンバーのメッセージマップエントリを追加します。

    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;
    }

ヒットするOnSize()にブレークポイントを設定します。

あなたの問題(もしあれば)は他の場所にあります。

于 2010-11-20T16:56:46.530 に答える