2011-08-07 16 views
0

Alt-F4または角の「X」ボタンを使用してアプリケーションを閉じるか、destroywindow(hwnd)を自分で投稿すると、アプリケーションが正しく終了し、すべて正常に機能します。がタスクバー終了イベントから正しく閉じていない

最近、私はWindows7で、タスクバーのアイコンを右クリックしてアプリケーションを終了し、[ウィンドウを閉じる]をクリックするとウィンドウが閉じますが、私のアプリケーションはまだ実行中です。デバッグ時には、私はWM_QUIT/DESTROY/CLOSEイベントのいずれかに入りません。

タスクバーでウィンドウを閉じるときに特別な動作がありますか?どうすればそれを検出できますか?

+0

問題は、あなたのアプリでコード化したものです。問題を示す最小限のコードを表示してください。 –

答えて

1

WM_CLOSEを取得する必要があります。多分あなたはあなたが期待しているものとは異なるウィンドウでそれを得ているでしょうか?それはあなたが複数のトップレベルのウィンドウを持っていない限り起こるはずはありません。

1

のAlt-F4、またはコーナー "X" ボタンを経由して、またはDestroyWindowを(HWND)を掲示することにより、自分自身

あなたは(DestroyWindowをを投稿することはできません)。メインウィンドウのウィンドウプロシージャがこれを似ていることを確認します。

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    switch (message) 
    { 
    case WM_DESTROY: 
     PostQuitMessage(0); 
     break; 
    // Other cases 
    //... 
    default: 
     return DefWindowProc(hWnd, message, wParam, lParam); 
    } 
    return 0; 
} 

PostQuitMessage()関数の呼び出しは、それがWM_QUITメッセージを受信したときに、あなたのメッセージループを抜けるには、値getMessage()がfalseを返すことを保証します。これにより、メインウィンドウはメインウィンドウのように動作し、終了するとプロセスが終了します。そうでない他のトップレベルウィンドウがあるかもしれません。このWM_DESTROYメッセージハンドラを持つべきではありません。 DestroyWindow()は、DefWindowProc()がWM_CLOSEメッセージを処理するときに既に自動的に呼び出されます。