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 中,窗口样式(Window Style)和窗口扩展样式(Extended Window Style) 是用来定义窗口的外观和行为的常量值。它们可以在创建窗口时通过调用 Create() 或 CreateWindow() 函数的参数来设置。
- 窗口样式(Window Style):
- 窗口样式是定义窗口基本外观和行为的常量值,例如是否显示标题栏、边框、系统菜单、最小化和最大化按钮等。常用的窗口样式包括:
- WS_OVERLAPPEDWINDOW:创建一个具有标题栏、边框、系统菜单、最小化和最大化按钮的顶层窗口。
- WS_POPUPWINDOW:创建一个具有标题栏、边框、系统菜单、最小化和最大化按钮的弹出式窗口。
- WS_CHILD:创建一个子窗口,不具有标题栏和边框。
- WS_VISIBLE:创建一个可见的窗口,将在创建时显示。
- 窗口扩展样式(Extended Window Style):
- 窗口扩展样式是定义窗口更高级的外观和行为的常量值,例如是否启用透明度、是否支持分层绘制等。常用的窗口扩展样式包括:
- 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,则表示创建的窗口为顶层窗口,没有父窗口。
-
第二个参数 MainFrameWnd::kClassName:表示要创建的窗口类的名称。在这里,MainFrameWnd::kClassName 可能是 LPCTSTR 类型的常量,指定了要创建的窗口类的名称。这通常是在窗口类定义中设置的类名称。
-
第三个参数 UI_WNDSTYLE_FRAME:表示窗口的样式。UI_WNDSTYLE_FRAME 是一个预定义的宏,用于指定创建一个具有标题栏和边框的窗口。这样创建的窗口将是一个具有窗口装饰的顶层窗口。
-
第四个参数 0:表示额外的窗口样式和窗口扩展样式。在这里没有使用额外的样式,因此传入了 0。
总结:
Create() 函数用于创建一个窗口,通过传入不同的参数,可以控制窗口的父子关系、窗口类名称、窗口样式等。
在示例中,使用 UI_WNDSTYLE_FRAME 创建一个具有标题栏和边框的顶层窗口。如果想要去掉标题栏,可以通过设置样式来实现,如前面的回答中所示。