Seaside Laboratory

Posts

ウィンドウスタイルの細かい話

Win32 API ベースでウィンドウを作っていると、コードが煩雑すぎてウィンドウスタイルの細かい指定まで気がまわらないが、プログラムを見直す度に気になっていたので、意味が不明確になっていたウィンドウスタイルについて調べてみた。

WS_OVERLAPPED

WS_OVERLAPPEDWINDOW は以下のスタイルをまとめたものになっている。

スタイル 意味
WS_OVERLAPPED オーバーラップウィンドウを作成します。オーバーラップウィンドウにはキャプションと境界線があります。
WS_CAPTION タイトルバーを持つウィンドウ (WS_BORDER を含む) を作成します。
WS_SYSMENU タイトルバーにコントロールメニューボックスを持つウィンドウを作成します。
WS_THICKFRAME ウィンドウのサイズを設定するための太いフレームを持つウィンドウを作成します。
WS_MINIMIZEBOX 最小化ボタンを持つウィンドウを作成します。
WS_MAXIMIZEBOX 最大化ボタンを持つウィンドウを作成します。

ほとんどのスタイルが明確な意味をもっているのに対し、WS_OVERLAPPED は何のスタイル指定なのかよくわからない。

Windows SDK 関連のヘッダーファイルを検索してみると、WinUser.h にウィンドウスタイル定数がまとめて定義されている。

/*
 * Window Styles
 */
#define WS_OVERLAPPED       0x00000000L

値は 0。つまりビットとしての意味はなく、指定してもしなくても影響がない。

WS_VISIBLE

DirectX のサンプルなどで WS_POPUP と同時に使われることが多い。マニュアルには、

WS_VISIBLE
最初に表示されるウィンドウを作成します。

としか書かれていない。

WS_VISIBLE を付けたり外したりする実験をした後にやっとわかったが、ShowWindow を実行しなくとも表示される、というスタイルだった。「最初に表示される」というのはそういう意味だったのか。