|
2-2-3. ウィンドウスタイルの内容
ここでは、CreateWindow,CreateWindowEx 関数で指定する、ウィンドウのスタイルと拡張スタイルについて詳しく説明します。また、SetWindowLong 関数を使ってウィンドウの作成後にスタイルを設定することもできます。
Windowsは、 汎用のウィンドウスタイルとクラス固有のウィンドウスタイルがあります。汎用のウィンドウスタイルは、WS_ のプリフィックスで始まる定数です。これらは組み合わせて指定することにより、メインウィンドウやダイアログボックス、子ウィンドウなど、さまざまな種類のウィンドウを形成することができます。一方、クラス固有のウィンドウスタイルは、エディットコントロールやリストボックスなどの定義済みのコントロール クラスに属するウィンドウの、外観と動作を定義するものです。コントロールのスタイルは、コントロールをご覧ください。ここでは汎用のスタイルを説明します。
ウィンドウの種類
- オーバーラップウィンドウ(WS_OVERLAPPED,WS_OVERLAPPEDWINDOW)
- WS_OVERLAPPEDスタイルは、タイトルバーと細い境界を持つ、トップレベルウィンドウのことです。また、WS_OVERLAPPEDWINDOWスタイルを指定すると、タイトルバー、サイズ変更境界、コントロールメニュー、最小化ボタン、および最大化ボタンを持つウィンドウになります。
- ポップアップウィンドウ(WS_POPUP,WS_POPUPWINDOW)
- WS_POPUPスタイルを持つばあいは、ポップアップウィンドウで、タイトルバーは省略可能です。省略しない場合、ポップアップウィンドウは、WS_OVERLAPPEDスタイル付きで作成されたオーバーラップウィンドウと同じになります。WS_POPUPWINDOWスタイルを使えば、境界とコントロールメニューを持つポップアップウィンドウを作成できます。WS_POPUPWINDOWは、 コントロール メニューを表示させるために、 必ずWS_CAPTIONと組み合わせて指定してください。
- 子ウィンドウ(WS_CHILD)
- 子ウィンドウは、WS_CHILDスタイルを持ち、必ず親ウィンドウのクライアント領域内に表示されます。通常は、親ウィンドウのクライアント領域をいくつかの領域に分割するために、子ウィンドウを使います。子ウィンドウは、必ず親ウィンドウを持っていなければなりません。親ウィンドウになれるウィンドウは、オーバーラップウィンドウとポップアップウィンドウ、または子ウィンドウです。
子ウィンドウはクライアント領域を持ちますが、それ以外の機能は特に要求しないかぎり持ちません。アプリケーションは子ウィンドウに対して、タイトルバー、コントロールメニュー、最小化ボタン、 最大化ボタン、境界、およびスクロールバーを要求できますが、メニューを持たせることはできません。子ウィンドウのウィンドウクラスの登録時、または子ウィンドウの作成時のいずれかの時点で、メニュー ハンドルを指定しても無視されます。
ウィンドウの境界
Windowsは、 次の境界スタイルを提供します。
| スタイル |
説明 |
| WS_BORDER |
細い線の境界を持つウィンドウを作成します。 |
| WS_DLGFRAME |
二重の境界を持つウィンドウを作成します。通常、このスタイルはダイアログボックスに対して使われます。このスタイルを持つウィンドウにはタイトルバーを付けることはできません。 |
| WS_EX_DLGMODALFRAME |
二重の境界を持つウィンドウを作成します。WS_DLGFRAMEスタイルとは異なり、WS_CAPTIONスタイルを同時に指定してウィンドウにタイトルバーを付けることができます。 |
| WS_THICKFRAME |
サイズ変更境界を持つウィンドウを作成します。 |
WS_OVERLAPPEDスタイルまたはWS_POPUPWINDOWスタイルを持つウィンドウは、デフォルトでWS_BORDERスタイルが付きます。ほかの境界スタイルは、オーバーラップウィンドウに種々の境界スタイルを付けるために、いずれも必ずWS_OVERLAPPEDスタイルまたはWS_POPUPWINDOWスタイルと組み合わせて使います。
WS_POPUPスタイルまたはWS_CHILDスタイルを持つウィンドウに、境界スタイルを1つも指定しない場合は、境界を持たないウィンドウが作成されます。境界を持たない子ウィンドウは、親ウィンドウのクライアント領域を分割するときにその分割線をユーザーに見せないようにする場合に使うことができます。
非クライアント領域の構成要素
ウィンドウの非クライアント領域には、タイトルバー、コントロールメニュー、最小化ボタン、最大化ボタン、サイズ変更境界、水平スクロールバー、および垂直スクロールバーを含めることができます。これらの構成要素を、1つまたは複数持つウィンドウを作成するには、CreateWindow 関数の中で次のスタイルを指定します。
| スタイル |
説明 |
| WS_CAPTION |
タイトルバーを持つウィンドウを作成します(WS_BORDERスタイルが付きます)。 |
| WS_MAXIMIZEBOX |
最大化ボタンを持つウィンドウを作成します。 |
| WS_MINIMIZEBOX |
最小化ボタンを持つウィンドウを作成します。 |
| WS_SYSMENU |
タイトルバーの中にコントロールメニューを持つウィンドウを作成します。必ずWS_CAPTIONスタイルを付けて指定します。 |
| WS_HSCROLL |
水平スクロールバーを持つウィンドウを作成します。 |
| WS_VSCROLL |
垂直スクロールバーを持つウィンドウを作成します。 |
初期状態
次のスタイルは、作成されるウィンドウが使用可能または使用不能、可視(表示)または不可視(非表示)、アイコン表示または最大表示の、どれになるかを決めます。
| スタイル |
説明 |
| WS_DISABLED |
初期状態で使用不能のウィンドウを作成します。使用不能のウィンドウは、ユーザーからの入力を受け取ることができません。 |
| WS_MAXIMIZE |
初期状態で最大表示のウィンドウを作成します。 |
| WS_MINIMIZE |
初期状態でアイコン表示のウィンドウを作成します。 |
| WS_VISIBLE |
初期状態で可視(表示)状態のウィンドウを作成します。 |
親ウィンドウおよび子ウィンドウのスタイル
次のスタイルは、親ウィンドウとその子ウィンドウ、および子ウィンドウとその兄弟ウィンドウとのクリッピングの関係に影響します。
| スタイル |
説明 |
| WS_CLIPCHILDREN |
親ウィンドウの内部を描画するときに、子ウィンドウが占める領域を除外します。親ウィンドウを作成するときは、このスタイルを使います。 |
| WS_CLIPSIBLINGS |
互いに関連する子ウィンドウをクリップします。つまり、ある子ウィンドウが、WM_PAINTメッセージを受け取ると、オーバーラップしているほかのすべての子ウィンドウはその子ウィンドウの領域からクリップされ、子ウィンドウは更新されます。
WS_CLIPSIBLINGSを指定しない場合、子ウィンドウがオーバーラップしていると、ある子ウィンドウのクライアント領域の内部を描画するときに、その子ウィンドウと隣り合うほかの子ウィンドウのクライアント領域の内部を描画することが可能になります。このスタイルは、必ずWS_CHILDスタイルと組み合わせて使います。 |
ダイアログボックスのスタイル
ダイアログボックスには、方向キーと[Tab]キーを処理する組み込みのキーボードインターフェイスが含まれています。ユーザーは、マウスの代わりにこれらのキーを使って、ダイアログボックス内のコントロールを操作できます。次のスタイルは、組み込みキーボードインターフェイスによる方向キーと[Tab]キーの処理方法に影響します。
| スタイル |
説明 |
| WS_GROUP |
あるコントロールグループの中の最初のコントロールを指定します。ユーザーは、方向キーを使ってグループ内のあるコントロールから次のコントロールへと、キーボードフォーカスを変更することができます。最初のコントロールの後にあるWS_GROUPスタイルで定義されたコントロールは、すべて同じグループに属します。グループは、WS_GROUPスタイルを持つ次のコントロールで終わり、同時にそのコントロールから次のグループが始まります。 |
| WS_TABSTOP |
ユーザーが[Tab]キーを押したときに、キーボードフォーカスを受け取ることのできるコントロールを指定します。[Tab]キーを押すことにより、キーボードフォーカスは、WS_TABSTOPスタイルを持つ次のコントロールに移ります。 |
拡張スタイル
次のスタイルは、 CreateWindowEx 関数の dwExStyle パラメータの中で指定することができます。
| スタイル |
説明 |
| WS_EX_ACCEPTFILES |
このスタイルで作成されたウィンドウはドラッグアンドドロップファイルを受け入れることを指定します。ドラッグアンドドロップ操作をした場合は、WM_DROPFILESメッセージが発生します。 |
| WS_EX_DLGMODALFRAME |
二重の境界を持つウィンドウを作成します。WS_DLGFRAMEスタイルとは異なり、WS_CAPTIONスタイルを同時に指定してウィンドウにタイトルバーを付けることができます。 |
| WS_EX_NOPARENTNOTIFY |
このスタイルで作成された子ウィンドウは、それが作成または破棄されるときに、親ウィンドウにWM_PARENTNOTIFYメッセージを送らないことを指定します。 |
| WS_EX_TOPMOST |
このスタイルで作成されたウィンドウは、ほかの最前面でないすべてのウィンドウよりも手前に表示され、非アクティブ化されたときもその状態を保つことを指定します。 |
| WS_EX_TRANSPARENT |
このスタイルで作成されたウィンドウは透過になることを指定します。すなわち、このウィンドウの下にあるウィンドウは、遮られることなく表示されます。このスタイルで作成されたウィンドウは、その下にある兄弟ウィンドウがすべて更新された後にだけ、WM_PAINTメッセージを受け取ります。 |
|