プログラミングのメモ帳(C/C++/HSP)

日々のプログラミングで気づいた点や小技集を紹介します。(Windows 10/XP/Vista、VC2017、HSP)

ウインドウ・スタイルの動的変更

2007年09月25日 08時16分08秒 | ウインドウ関連

ウインドウ・スタイルを動的に変更するには次の手順で行います。(戻る)

  1. ウインドウ・スタイルの取得(GetWindowLong)
  2. スタイル・データのビットを動的に変更(AND,OR)
  3. ウインドウ・スタイルの設定(SetWindowLong)
  4. ウインドウ・スタイルの反映(SetWindowPos)

SetWindowLong 関数でウインドウ・スタイルを設定しただけでは反映しません。
反映させるには必ず SetWindowPos 関数を実行して下さい。

プロトタイプ宣言

LONG GetWindowLong(
    HWND    hWnd,               // ウインドウのハンドル
    int     nIndex              // 取得するデータ値のインデックス
);

LONG SetWindowLong(
    HWND    hWnd,               // ウインドウのハンドル
    int     nIndex,             // 設定するデータ値のインデックス
    LONG    dwNewLong           // 新しい値
);

BOOL SetWindowPos(
    HWND    hWnd,               // ウインドウのハンドル
    HWND    hWndInsertAfter,    // 配置順序のハンドル
    int     X,                  // 横方向の位置
    int     Y,                  // 縦方向の位置
    int     cx,                 // 幅
    int     cy,                 // 高さ
    UINT    uFlags              // ウインドウ位置のオプション
);

WS_THICKFRAME属性の設定

LONG lStyle;

lStyle  = GetWindowLong( hWnd, GWL_STYLE );
lStyle |= WS_THICKFRAME;
lStyle  = SetWindowLong( hWnd, GWL_STYLE, lStyle );
SetWindowPos( hWnd, NULL, 0, 0, 0, 0, (SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_FRAMECHANGED) );

WS_THICKFRAME属性の解除

LONG lStyle;

lStyle  = GetWindowLong( hWnd, GWL_STYLE );
lStyle &= ~WS_THICKFRAME;
lStyle  = SetWindowLong( hWnd, GWL_STYLE, lStyle );
SetWindowPos( hWnd, NULL, 0, 0, 0, 0, (SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_FRAMECHANGED) );
  • hWnd が対象のウインドウ・ハンドルです。
  • 上記のサンプルでは WS_THICKFRAME 属性を設定したり、解除したりしてます。
  • 拡張ウインドウ・スタイルでは GWL_STYLE の代わりに GWL_EXSTYLE を指定します。

関連記事



コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« ウインドウの最前面表示の設... | トップ | 画面中央にウインドウを移動 »
最新の画像もっと見る

コメントを投稿

ウインドウ関連」カテゴリの最新記事