2011-02-11 6 views
3

私は、タスクバーの通知領域を最小限にするオプションを持つプログラムを持っています。これを機能させるには、ユーザーがアプリケーションを最小限に抑えたことを検出する信頼できる方法が必要です。アプリケーションが最小化されたときはどうすれば検出できますか?

C++アプリケーションでWindows APIを使用するとどうすればできますか?

+0

WM_Destroyが最小限に抑えられるかどうかを尋ねたいのですが? –

+0

ユーザーが最小化ボタンをクリックしたときに、プログラムが通知領域に最小化されるようにしますか? –

+0

ええ、私がC++で知りたいこと –

答えて

3

ユーザーは(タイトルバー上のボックスを使用して、またはシステムメニューから「最小化」オプションを選択することにより、どちらかの)ウィンドウを最小化した場合、アプリケーションはWM_SYSCOMMAND messageを受け取ることになります。そのメッセージのwParamパラメータには、要求されているシステムコマンドの特定のタイプを示す値SC_MINIMIZEが含まれます。この場合、lParamは気にしません。

したがって、wParamSC_MINIMIZEに設定されたWM_SYSCOMMANDメッセージをリッスンするメッセージマップを設定する必要があります。そのようなメッセージを受け取ったら、アプリケーションを最小限に抑えてタスクバーの通知領域にコードを実行し、0を返して(メッセージを処理したことを示す)

使用しているGUIフレームワークがわかりません。サンプルコードは、さまざまなツールキットによって大きく異なる可能性があります。ここでは、ストレートのWin32 Cアプリケーションで使用する可能性のあるものです:

switch (message) 
{ 
case WM_SYSCOMMAND: 
    if ((wParam & 0xFFF0) == SC_MINIMIZE) 
    { 
     // shrink the application to the notification area 
     // ... 

     return 0; 
    } 
    break; 
} 
+0

使用しているソフトウェアはVisual Studio 2010です。 –

+0

私はそれを得ました –

0

あなたはWM_SIZEを探していると思います。これを取得したら、wParamで詳細を確認してください。ここにMSDNのページがあります。

WM_SIZE

+1

間違っています。アプリケーションが最小化されたときに検出するために 'WM_SIZE'をリッスンする必要はありません。 –

+0

好奇心の乏しさから、それは両方を取得するか、WM_SYSCOMMANDが好ましい方法ですか? – kailoon

+0

ええ、あなたは両方のためにそれを得るでしょう。あなたの答えは幾分不完全ですが。あなたは実際に 'SIZE_MINIMIZED'に等しい' wParam'を探しています。しかし、WM_SIZEを扱う際の主な問題は、デフォルト実装を上書きすることができないことです。メッセージは、ウィンドウが最小化された後*に送信されません。 –

0

あなたはGetClientRectから返された領域のサイズを確認することができます - それは最小化されますゼロの場合は、私のために動作しますが、すべての場合に動作しないことがあります。

0

これは、IsIconicが決定するはずのものですが、一貫して動作しません。 (ああ、これを決める一貫性のある方法です...)

関連する問題