1

Cでウィンドウ管理コードを書いています。特定のフラグが設定されている場合、タイトルバーでウィンドウをドラッグしてもサイズを変更できない最大化されたウィンドウが必要です。最大化された状態で最大化されたウィンドウを「ロック」する方法はありますか?

4

2 に答える 2

2

これを試して

case WM_SYSCOMMAND:
    if(IsMaximized(hwnd) && ((wParam & 0xFFF0) == SC_RESTORE || (wParam & 0xFFF0) == SC_MOVE)){
        return 0;
    }

    break;

編集

完全なコード

switch(message){ //handle the messages
    ...
    ...
    case WM_SYSCOMMAND:
        ...
        break;
    ....
    default:   //for messages that we don't deal with
        return DefWindowProc(hwnd, message, wParam, lParam);
}

return DefWindowProc(hwnd, message, wParam, lParam);

これはデフォルトのWindowProcedureです。知られていると思いました。

ヴァルター

于 2014-09-07T09:46:38.140 に答える
2

valter's answer は、ユーザーのアクションを傍受し、その段階でウィンドウの状態の変更をキャンセルする方法を示しています。ただし、これは Win API を介して直接行われた状態の変更を処理しません (例: ShowWindow)。

Windows API は、ウィンドウの状態/位置の変更をより細かく制御する別のオプションを提供します。また、より柔軟です。たとえば、ウィンドウの位置にアプリケーション定義の制約を適用できます。オプションはWM_WINDOWPOSCHANGINGmessage で、handler です。ウィンドウは、目的の状態と位置を調整するために変更できる構造体へのポインターを受け取ります。したがって、最大化された状態を強制することで、より幅広いシナリオを処理できます。

このメッセージの処理中に WINDOWPOS の値を変更すると、ウィンドウの新しいサイズ、位置、または Z オーダーの位置に影響します。アプリケーションは、WINDOWPOS の flags メンバーの適切なビットを設定またはクリアすることにより、ウィンドウへの変更を防ぐことができます。

Raymond Chen のブログでこのメッセージを読むこともできます

ここにも SO に関するいくつかの質問があります。

于 2014-09-07T12:48:22.307 に答える