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

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

ウインドウ・スタイルの変更関数

2011年12月08日 00時09分00秒 | ウインドウ関連

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

  1. ウインドウ・スタイルの取得(GetWindowLong)
  2. ウインドウ・スタイルのリセット(lReset)
  3. ウインドウ・スタイルのセット(lSet)
  4. ウインドウ・スタイルの設定(SetWindowLong)
  5. ウインドウ・スタイルの反映(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              // ウインドウ位置のオプション
);

サンプル

// ウインドウ・スタイルの変更
VOID funcModifyStyle( HWND hWnd, UINT uID, LONG lReset, LONG lSet )
{
    LONG lStyle;
    
    if ( uID != 0 ){
        hWnd = GetDlgItem( hWnd, uID );
    }
    lStyle  = GetWindowLong( hWnd, GWL_STYLE );
    lStyle &= ~lReset;
    lStyle |=  lSet;
    lStyle  = SetWindowLong( hWnd, GWL_STYLE, lStyle );
    SetWindowPos( hWnd, NULL, 0, 0, 0, 0, (SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_FRAMECHANGED) );
}

使い方

// WS_THICKFRAME属性の設定
funcModifyStyle( hWnd, 0, 0, WS_THICKFRAME );

// WS_THICKFRAME属性の解除
funcModifyStyle( hWnd, 0, WS_THICKFRAME, 0 );
  • hWnd が対象のウインドウ・ハンドルです。
  • uID がコントロールのIDですが、ウインドウを操作する時には uID=0 にして操作します。
  • 上記の使い方では WS_THICKFRAME 属性を設定したり、解除したりしてます。

関連記事



コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 目的別 Win32API のサンプル集 | トップ | 拡張ウインドウ・スタイルの... »
最新の画像もっと見る

コメントを投稿

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