ホーム
|
アプリケーション | Tips | ダウンロード | プログラム
| コラム

CBアプリ工房


Tips >   

ウィンドウのスクロールバー確認(GetWindowLong) 

更新 : 2010/12/31

 


解説:
ウィンドウにスクロールバーがある時とない時で、ウィンドウ内側のエリアが異なります。
エリアサイズに応じて処理を変えるには、スクロールバーの存在をチェックしなければなりません。
ウィンドウスタイルの情報を得るには、Win32API の GetWindowLong 関数を使います。

今回は、マウス下にあるウィンドウに横スクロールバーがあるかないかを調べてみます。
マウス下のウィンドウハンドルを取得する方法(WindowFromPoint)は Tips を参照してください。

ちょっと寄り道
GetWindowLong 関数は以下のように定義されています。

LONG GetWindowLong(
    HWND hWnd, // ウィンドウのハンドル
    int nIndex // 取得する値のオフセット
);
hWnd には、調べたいウィンドウのハンドルを指定。
nIndex には、取得したい情報を表す定数を指定。

使用例:
アプリケーションを起動して、マウスを任意のウィンドウに移動してみてください。
Label1 の Caption にスクロールバーがあれば "横スクロールバーあり" なければ "なし" と表示されます。

準備として、Label、Timer をひとつずつ適当に配置してください。

OnTimer イベントハンドラで、マウス下にあるウィンドウハンドルを WindowFromPoint で取得します。
ハンドルからウィンドウスタイルの情報を得て、横スクロールバーの存在をチェックします。
結果をメッセージ表示します。

//-------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    Label1->Caption = "";

    POINT pos;
    HWND hWnd;
    GetCursorPos(&pos);
    // マウス下にあるウィンドウハンドルを取得
    hWnd = WindowFromPoint(pos);

    // ウィンドウスタイルの情報を取得
    int style = GetWindowLong(hWnd, GWL_STYLE);
    // 横スクロールバーがあるかどうか
    if ((style & WS_HSCROLL) != 0) 
        Label1->Caption = "横スクロールバーあり";
    else 
        Label1->Caption = "なし";
}
//-------------------------------------------------------------------



[ ホーム | ページトップ | ブック | リンク | サイトマップ ]
Copyright(c) 2003 Shibu All rights reserved.