1

SetWindowLong(hWndParent, GWL_STYLE, 0) でウィンドウの既定のバーを削除して、カスタム描画ボタンでカスタム キャプション バーを作成しています。プログラムでタスクバーをクリックしてウィンドウを最小化することに固執していることを除いて、すべてがうまくいっています。現在 WM_ACTIVATEAPP を試していますが、ウィンドウを適切に最小化できません。

これは、メイン ウィンドウの WM_ACTIVATEAPP のコードです。

case WM_ACTIVATEAPP:
    if(LOWORD(wParam) == FALSE)
        SendMessage(hWndParent,WM_SYSCOMMAND,SC_MINIMIZE,NULL);
    break;

タスクバーを左クリックすると最小化されますが、クリックを離すとウィンドウが元に戻ります. 何か足りないものはありますか? クリックを離した後、最小化したいと思います。

注:カスタムドローボタンで最小化した後、タスクバーをクリックするとウィンドウが元に戻るように見えるため、ウィンドウのアクティブ化コードを入れません。

4

1 に答える 1

1

おそらく WM_NCACTIVATE も扱っていないでしょう。次のように処理してみてください。

case WM_NCACTIVATE:
    break;
case WM_ACTIVATEAPP:
    if (LOWORD(wParam) == FALSE)
        SendMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, NULL);
    break;

編集:

スタイルを 0 に設定してデフォルトのバーを削除したという質問の部分を見逃していたに違いありません。

LONG lStyle = GetWindowLong(hWnd, GWL_STYLE);
lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU);
SetWindowLong(hWnd, GWL_STYLE, lStyle);

これを行うと、ウィンドウを適切に最小化/最大化するために WM_ACTIVATEAPP または WM_NCACTIVATE を処理する必要がなくなります。

于 2013-09-21T06:41:11.087 に答える