タスクバーの通知領域を最小化できるようにするオプションを備えたプログラムがあります。これが機能するためには、ユーザーがアプリケーションを最小化したことを検出する信頼できる方法が必要です。
C++アプリケーションでWindowsAPIを使用してこれを行うにはどうすればよいですか?
タスクバーの通知領域を最小化できるようにするオプションを備えたプログラムがあります。これが機能するためには、ユーザーがアプリケーションを最小化したことを検出する信頼できる方法が必要です。
C++アプリケーションでWindowsAPIを使用してこれを行うにはどうすればよいですか?
ユーザーがウィンドウを最小化すると(タイトルバーのボックスを使用するか、システムメニューから[最小化]オプションを選択して)、アプリケーションにWM_SYSCOMMAND
メッセージが表示されます。そのwParam
メッセージのパラメーターにはSC_MINIMIZE
、要求されている特定のタイプのシステムコマンドを示す値が含まれます。この場合、は気にしませんlParam
。
WM_SYSCOMMAND
したがって、に設定されたメッセージをリッスンするメッセージマップを設定する必要がありwParam
ますSC_MINIMIZE
。このようなメッセージを受信したら、コードを実行してアプリケーションをタスクバーの通知領域に最小化し、0(メッセージを処理したことを示す)を返す必要があります。
使用しているGUIフレームワークがわかりません。サンプルコードは、ツールキットごとに大きく異なる可能性があります。ストレートWin32Cアプリケーションで使用できるものは次のとおりです。
switch (message)
{
case WM_SYSCOMMAND:
if ((wParam & 0xFFF0) == SC_MINIMIZE)
{
// shrink the application to the notification area
// ...
return 0;
}
break;
}
WM_SIZEをお探しだと思います。これを取得したら、wParamをチェックして詳細を取得します。これがMSDNページです。
GetClientRectから返された領域サイズを確認できます。ゼロの場合、最小化され、機能しますが、すべての場合に機能するとは限りません。
それがIsIconicが決定することになっていることですが、それは私にとって一貫して機能しません。(ああ、これを決定する一貫した方法のために...)
完全を期すために、GetWindowPlacementもあります。ウィンドウの状態はWINDOWPLACEMENTshowCmd
構造体のメンバーで明らかにされ、ウィンドウが最小化されている場合、値は2、つまりSW_SHOWMINIMIZEDになります。