6

タスクバーの通知領域を最小化できるようにするオプションを備えたプログラムがあります。これが機能するためには、ユーザーがアプリケーションを最小化したことを検出する信頼できる方法が必要です。

C++アプリケーションでWindowsAPIを使用してこれを行うにはどうすればよいですか?

4

5 に答える 5

6

ユーザーがウィンドウを最小化すると(タイトルバーのボックスを使用するか、システムメニューから[最小化]オプションを選択して)、アプリケーションに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;
}
于 2011-02-11T06:50:33.583 に答える
0

WM_SIZEをお探しだと思います。これを取得したら、wParamをチェックして詳細を取得します。これがMSDNページです。

WM_SIZE

于 2011-02-11T06:30:12.097 に答える
0

GetClientRectから返された領域サイズを確認できます。ゼロの場合、最小化され、機能しますが、すべての場合に機能するとは限りません。

于 2013-07-27T08:34:01.857 に答える
0

それがIsIconicが決定することになっていることですが、それは私にとって一貫して機能しません。(ああ、これを決定する一貫した方法のために...)

于 2017-08-15T18:13:17.123 に答える
0

完全を期すために、GetWindowPlacementもあります。ウィンドウの状態はWINDOWPLACEMENTshowCmd構造体のメンバーで明らかにされ、ウィンドウが最小化されている場合、値は2、つまりSW_SHOWMINIMIZEDになります。

于 2020-07-21T10:24:38.907 に答える