記事ディレクトリ
1. マクロの説明
#define UI_WNDSTYLE_FRAME (WS_VISIBLE | WS_OVERLAPPEDWINDOW)
#define UI_WNDSTYLE_CHILD (WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN)
#define UI_WNDSTYLE_DIALOG (WS_VISIBLE | WS_POPUPWINDOW | WS_CAPTION | WS_DLGFRAME | WS_CLIPSIBLINGS | WS_CLIPCHILDREN)
DuiLibでは、マクロ定義UI_WNDSTYLE_FRAME、UI_WNDSTYLE_CHILD、およびUI_WNDSTYLE_DIALOG はそれぞれウィンドウのスタイルを表し、ウィンドウの作成時にさまざまなタイプのウィンドウ スタイルを設定するために使用されます。
- UI_WNDSTYLE_FRAME:
- このマクロ定義には、トップレベル ウィンドウ (タイトル バーと境界線付き) を作成するために使用される一連のウィンドウ スタイルが含まれています。
- WS_VISIBLE は、ウィンドウが表示されており、作成時に表示されることを意味します。
- WS_OVERLAPPEDWINDOW は、タイトル バー、境界線、システム メニュー、最小化ボタンと最大化ボタンを備えたトップレベル ウィンドウを作成することを意味します。
- UI_WNDSTYLE_CHILD:
- このマクロ定義には、子ウィンドウ (タイトル バーと境界線なし) を作成するために使用される一連のウィンドウ スタイルが含まれています。
- WS_VISIBLE は、ウィンドウが表示されており、作成時に表示されることを意味します。
- WS_CHILD は子ウィンドウを作成することを意味します。
- WS_CLIPSIBLINGS は、子ウィンドウが重なったときに、他の兄弟ウィンドウの領域は描画されないことを意味します。
- WS_CLIPCHILDREN は、子ウィンドウが重なったときに、他の子ウィンドウの領域を描画しないことを意味します。
- UI_WNDSTYLE_DIALOG:
- このマクロ定義には、ダイアログ ウィンドウの作成に使用される一連のウィンドウ スタイルが含まれています。
- WS_VISIBLE は、ウィンドウが表示されており、作成時に表示されることを意味します。
- WS_POPUPWINDOW はポップアップ ウィンドウを作成することを意味します。
- WS_CAPTION は、タイトル バーのあるウィンドウを作成することを意味します。
- WS_DLGFRAME は、ダイアログ ボックス スタイルでウィンドウ フレームを作成することを意味します。
- WS_CLIPSIBLINGS は、子ウィンドウが重なったときに、他の兄弟ウィンドウの領域は描画されないことを意味します。
- WS_CLIPCHILDREN は、子ウィンドウが重なったときに、他の子ウィンドウの領域を描画しないことを意味します。
これらのマクロ定義は、ウィンドウのスタイルを設定する便利な方法を提供し、さまざまなウィンドウ タイプに応じて適切なマクロ定義を選択できます。ウィンドウを作成するとき、これらのマクロをウィンドウ スタイル パラメーターとして Create() 関数に渡して、さまざまなタイプのウィンドウを作成できます。
2. DuiLib ウィンドウ スタイルとウィンドウ拡張スタイル
DuiLibでは、ウィンドウ スタイルと拡張ウィンドウ スタイルは、 ウィンドウの外観と動作を定義するために使用される定数値です。これらは、ウィンドウの作成時に Create() または CreateWindow() 関数パラメータを呼び出すことで設定できます。
- ウィンドウスタイル:
- ウィンドウ スタイルは、タイトル バー、境界線、システム メニュー、最小化ボタンと最大化ボタンを表示するかどうかなど、ウィンドウの基本的な外観と動作を定義する定数値です。一般的に使用されるウィンドウ スタイルは次のとおりです。
- WS_OVERLAPPEDWINDOW: タイトル バー、境界線、システム メニュー、最小化ボタンと最大化ボタンを備えたトップレベル ウィンドウを作成します。
- WS_POPUPWINDOW: タイトル バー、境界線、システム メニュー、最小化ボタンと最大化ボタンを備えたポップアップ ウィンドウを作成します。
- WS_CHILD: タイトル バーと境界線のない子ウィンドウを作成します。
- WS_VISIBLE: 作成時に表示される可視ウィンドウを作成します。
- 拡張ウィンドウ スタイル:
- ウィンドウ拡張スタイルは、透明度を有効にするかどうか、レイヤー描画をサポートするかどうかなど、ウィンドウのより高度な外観と動作を定義する定数値です。一般的に使用されるウィンドウ拡張スタイルには次のものがあります。
- WS_EX_LAYERED: ウィンドウのレイヤー化描画を有効にし、透明度を設定することでウィンドウの半透明効果を実現します。
- WS_EX_TOOLWINDOW: ウィンドウをツール ウィンドウとして識別します。通常は、ツールバーまたはフローティング ウィンドウを表示するために使用されます。
- WS_EX_CLIENTEDGE: ウィンドウのクライアント領域に境界線を追加します。
- WS_EX_APPWINDOW: ウィンドウをアプリケーション ウィンドウとして識別し、タスク バーにアプリケーション アイコンを表示するために使用されます。
DuiLib では、ウィンドウを作成するときに、Create() 関数を呼び出すことでウィンドウ スタイルとウィンドウ拡張スタイルを設定できます。次に例を示します。
// 创建一个顶层窗口(带标题栏和边框)并显示
pFrame->Create(NULL, _T("MyWindow"), UI_WNDSTYLE_FRAME, WS_EX_APPWINDOW);
上記の例では、UI_WNDSTYLE_FRAMEマクロ定義がウィンドウ スタイルとして使用され、WS_EX_APPWINDOW がウィンドウ拡張スタイルとして使用されます。このようにして作成されたウィンドウは、タイトル バーと境界線を備えたトップレベル ウィンドウとなり、タスク バーにアプリケーション アイコンが表示されます。
3. DuiLib では、Create() はウィンドウを作成する関数であり、この関数のパラメータは次のように解析されます。
-
最初のパラメータ nullptr: は、ウィンドウの親ウィンドウを示します。パラメータが nullptr の場合、作成されたウィンドウはトップレベル ウィンドウであり、親ウィンドウが存在しないことを意味します。
-
2 番目のパラメーター MainFrameWnd::kClassName: は、作成されるウィンドウ クラスの名前を示します。ここで、MainFrameWnd::kClassName は、作成されるウィンドウ クラスの名前を指定する、LPCTSTR 型の定数にすることができます。これは通常、ウィンドウ クラス定義で設定されたクラス名です。
-
3 番目のパラメータ UI_WNDSTYLE_FRAME: ウィンドウのスタイルを示します。UI_WNDSTYLE_FRAME は、タイトル バーと境界線のあるウィンドウの作成を指定する事前定義マクロです。このようにして作成されたウィンドウは、ウィンドウ装飾を備えたトップレベル ウィンドウになります。
-
4 番目のパラメータ 0: は、追加のウィンドウ スタイルとウィンドウ拡張スタイルを示します。ここでは追加のスタイルは使用されないため、0 が渡されます。
要約:
ウィンドウの作成にはCreate()関数を使用し、各種パラメータを渡すことでウィンドウの親子関係、ウィンドウクラス名、ウィンドウスタイルなどを制御できます。
この例では、UI_WNDSTYLE_FRAMEを使用して、タイトル バーと境界線のあるトップレベル ウィンドウを作成します。タイトル バーを削除したい場合は、前の回答で示したように、スタイルを設定することでそれを行うことができます。