API CreateWindowEx各参数详解与WNDCLASSEXW中style的参数含义

目录

一、windows下编程常用的一个函数CreateWindowEx有时候查询帮助比较费劲,今天就整理这个函数的碰到的问题进行用法记录:

1.1、CreateWindowEx各个参数说明:

dwExStyle:窗口的扩展样式,可以使用一些特殊的效果,如WS_EX_CLIENTEDGE、WS_EX_STATICEDGE等。

2.lpClassName:窗口类名,这个参数必须和RegisterClassEx函数注册时使用的类名相同。

4.dwStyle:窗口样式,常用的样式如下:

二、RegisterClassEx去注册窗口时候WNDCLASSEXW结构体中style成员的各个参数的意义:

2.1、其中窗口类型style变量常用的参数如下:


一、windows下编程常用的一个函数CreateWindowEx有时候查询帮助比较费劲,今天就整理这个函数的碰到的问题进行用法记录:

HWND CreateWindowEx(
    DWORD dwExStyle,        // 扩展窗口样式
    LPCTSTR lpClassName,    // 窗口类名
    LPCTSTR lpWindowName,   // 窗口标题
    DWORD dwStyle,          // 窗口样式
    int x,                  // 窗口左上角的x坐标
    int y,                  // 窗口左上角的y坐标
    int nWidth,             // 窗口宽度
    int nHeight,            // 窗口高度
    HWND hWndParent,        // 父窗口句柄
    HMENU hMenu,            // 菜单句柄或子窗口ID
    HINSTANCE hInstance,    // 应用程序实例句柄
    LPVOID lpParam          // 创建窗口时传递的参数
);

1.1、CreateWindowEx各个参数说明:

  1. dwExStyle:窗口的扩展样式,可以使用一些特殊的效果,如WS_EX_CLIENTEDGE、WS_EX_STATICEDGE等。

  • WS_EX_ACCEPTFILES

    0x00000010L

    窗口接受拖放文件。

    WS_EX_APPWINDOW

    0x00040000L

    当窗口可见时,将顶级窗口强制到任务栏上。

    WS_EX_CLIENTEDGE

    0x00000200L

    窗口有一个边框,带有沉没边缘。

    WS_EX_COMPOSITED

    0x020000000L

    使用双缓冲按从下到上绘制顺序绘制窗口的所有后代。 从下到上绘制顺序允许后代窗口具有半透明 (alpha) 和透明度 (颜色键) 效果,但前提是后代窗口还设置了WS_EX_TRANSPARENT位。 双缓冲允许不闪烁地绘制窗口及其后代。 如果窗口的 类样式 为 CS_OWNDC 或 CS_CLASSDC,则不能使用此样式。
    Windows 2000:不支持此样式。

    WS_EX_CONTEXTHELP

    0x00000400L

    窗口的标题栏包含问号。 当用户单击问号时,光标将更改为带有指针的问号。 如果用户单击子窗口,子窗口将收到 WM_HELP 消息。 子窗口应将消息传递给父窗口过程,该过程应使用 HELP_WM_HELP 命令调用 WinHelp 函数。 帮助应用程序会显示一个弹出窗口,该窗口通常包含子窗口的帮助。
    WS_EX_CONTEXTHELP 不能与 WS_MAXIMIZEBOX 或 WS_MINIMIZEBOX 样式一起使用。

    WS_EX_CONTROLPARENT

    0x00010000L

    窗口本身包含应参与对话框导航的子窗口。 如果指定了此样式,则执行导航操作(例如处理 TAB 键、箭头键或键盘助记键)时,对话框管理器将递归到此窗口的子级。

    WS_EX_DLGMODALFRAME

    0x00000001L

    窗口具有双边框;可以选择使用标题栏创建窗口,方法是在 dwStyle 参数中指定WS_CAPTION样式。

    WS_EX_LAYERED

    0x00080000

    窗口是分层 窗口。 如果窗口的 类样式 为 CS_OWNDC 或 CS_CLASSDC,则不能使用此样式。
    Windows 8:顶级窗口和子窗口支持WS_EX_LAYERED样式。 以前的Windows版本仅支持顶级窗口WS_EX_LAYERED

    WS_EX_LAYOUTRTL

    0x00400000L

    如果 shell 语言是希伯来语、阿拉伯语或支持阅读顺序对齐的另一种语言,则窗口的水平原点位于右边缘。 将水平值增大到左侧。

    WS_EX_LEFT

    0x00000000L

    该窗口具有泛型左对齐属性。 这是默认值。

    WS_EX_LEFTSCROLLBAR

    0x00004000L

    如果 shell 语言是希伯来语、阿拉伯语或支持阅读顺序对齐的另一种语言,则垂直滚动条 (如果存在) 位于工作区左侧。 对于其他语言,将忽略该样式。

    WS_EX_LTRREADING

    0x00000000L

    窗口文本使用从左到右的阅读顺序属性显示。 这是默认值。

    WS_EX_MDICHILD

    0x00000040L

    窗口是 MDI 子窗口。

    WS_EX_NOACTIVATE

    0x080000000L

    当用户单击该样式时,使用此样式创建的顶级窗口不会成为前台窗口。 当用户最小化或关闭前台窗口时,系统不会将此窗口引入前台。
    不应通过编程访问或通过辅助技术(如讲述人)通过键盘导航激活窗口。
    若要激活窗口,请使用 SetActiveWindow 或 SetForegroundWindow 函数。
    默认情况下,该窗口不会显示在任务栏上。 若要强制窗口显示在任务栏上,请使用 WS_EX_APPWINDOW 样式。

    WS_EX_NOINHERITLAYOUT

    0x00100000L

    该窗口不将其窗口布局传递给其子窗口。

    WS_EX_NOPARENTNOTIFY

    0x00000004L

    使用此样式创建的子窗口不会在创建或销毁时将 WM_PARENTNOTIFY 消息发送到其父窗口。

    WS_EX_NOREDIRECTIONBITMAP

    0x00200000L

    窗口不会呈现到重定向图面。 这是对于没有可见内容的窗口,或者使用表面以外的机制来提供视觉对象。

    WS_EX_OVERLAPPEDWINDOW

    (WS_EX_WINDOWEDGE |WS_EX_CLIENTEDGE)

    窗口是重叠的窗口。

    WS_EX_PALETTEWINDOW

    (WS_EX_WINDOWEDGE |WS_EX_TOOLWINDOW |WS_EX_TOPMOST)

    窗口是调色板窗口,它是一个无模式对话框,用于显示命令数组。

    WS_EX_RIGHT

    0x00001000L

    该窗口具有泛型“右对齐”属性。 这依赖于窗口类。 仅当 shell 语言为希伯来语、阿拉伯语或支持阅读顺序对齐的另一种语言时,此样式才有效;否则,将忽略样式。
    对静态控件或编辑控件使用 WS_EX_RIGHT 样式的效果与分别使用 SS_RIGHT 或 ES_RIGHT 样式的效果相同。 将此样式与按钮控件结合使用的效果与使用 BS_RIGHT 和 BS_RIGHTBUTTON 样式的效果相同。

    WS_EX_RIGHTSCROLLBAR

    0x00000000L

    如果存在) 位于工作区右侧,则垂直滚动条 (。 这是默认值。

    WS_EX_RTLREADING

    0x00002000L

    如果 shell 语言是希伯来语、阿拉伯语或支持阅读顺序对齐的另一种语言,则使用从右到左的阅读顺序属性显示窗口文本。 对于其他语言,将忽略该样式。

    WS_EX_STATICEDGE

    0x00020000L

    该窗口具有一个三维边框样式,用于不接受用户输入的项目。

    WS_EX_TOOLWINDOW

    0x00000080L

    该窗口旨在用作浮动工具栏。 工具窗口具有短于普通标题栏的标题栏和使用较小的字体绘制的窗口标题。 工具窗口不会显示在任务栏中,也不会显示在用户按下 Alt+TAB 时出现的对话框中。 如果工具窗口有系统菜单,则其图标不会显示在标题栏上。 但是,可以通过右键单击或键入 Alt+SPACE 来显示系统菜单。

    WS_EX_TOPMOST

    0x00000008L

    该窗口应放置在所有非最顶层窗口上方,并且应保持其上方,即使窗口已停用也是如此。 若要添加或删除此样式,请使用 SetWindowPos 函数。

    WS_EX_TRANSPARENT

    0x00000020L

    在绘制同一线程) 创建的窗口下方的同级 (之前,不应绘制窗口。 窗口显示为透明,因为已绘制基础同级窗口的位。
    若要在不使用这些限制的情况下实现透明度,请使用 SetWindowRgn 函数。

    WS_EX_WINDOWEDGE

    0x00000100L

    窗口具有带有凸起边缘的边框。

    2.lpClassName:窗口类名,这个参数必须和RegisterClassEx函数注册时使用的类名相同。

下面是常用的类名,使用时需包含:“CommCtrl.h”头文件

ANIMATE_CLASS

创建动画控件。 这些控件以无提示方式显示音频视频交错 (AVI) 剪辑。

DATETIMEPICK_CLASS

创建日期和时间选取器控件。 这些控件提供一个简单的界面,用于与用户交换日期和时间信息。

HOTKEY_CLASS

创建热键控件。 通过这些控件,用户可以轻松定义热键。

LINK_CLASS

创建 syslink 控件。 这些控件与链接一起使用。

MONTHCAL_CLASS

创建月历控件。 这些控件为用户从熟悉的界面中选择日期提供了一种简单方法。

NATIVEFNTCTL_CLASS

创建本机字体控件。 这些控件与本机字体一起使用。

PROGRESS_CLASS

创建进度栏。 这些控件指示长时间操作的进度。

REBARCLASSNAME

创建 rebar 控件。 这些控件充当子窗口的容器。

STANDARD_CLASSES

创建内部 User32 控件,例如按钮、编辑和滚动条。

STATUSCLASSNAME

创建状态窗口。 这些控件在水平窗口中显示状态信息。

TOOLBARCLASSNAME

创建工具栏。 这些控件包含执行菜单命令的按钮。

TOOLTIPS_CLASS

创建工具提示控件。 这些控件显示一个小弹出窗口,其中包含描述应用程序中工具用途的文本行。

TRACKBAR_CLASS

创建跟踪条。 这些控件允许用户通过移动滑块从一系列值中进行选择。

UPDOWN_CLASS

创建向上控件。 这些控件将箭头配对与编辑控件组合在一起。 单击箭头递增或递减编辑控件中的值。

WC_BUTTON

创建按钮控件。 这些控件使用户能够启动操作。

WC_COMBOBOX

创建组合框控件。 这些控件包含一个下拉列表,可从中选择单个项。

WC_COMBOBOXEX

创建 ComboBoxEx 控件。 这些控件提供组合框控件的扩展,该控件提供对项图像的本机支持。

WC_EDIT

创建编辑控件。 这些控件包含可编辑的文本。

WC_HEADER

创建标头控件。 这些控件显示信息列顶部的标题,让用户通过单击标题对信息进行排序。

WC_LISTBOX

创建 listbox 控件。 这些控件包含项列表。

WC_IPADDRESS

创建 IP 地址控件。 这些控件类似于编辑控件,但它们允许你以 Internet 协议 (IP) 格式输入数字地址。

WC_LINK

创建 SysLink 控件。 这些控件包含超文本链接。

WC_LISTVIEW

创建列表视图控件。 这些控件显示项目集合,每个项由图标和标签组成,并提供多种排列项的方法。

WC_NATIVEFONTCTL

创建本机字体控件。 这些是后台工作的不可见控件,使对话框的预定义控件能够显示当前系统语言。

WC_PAGESCROLLER

创建寻呼控件。 这些控件用于包含和滚动另一个窗口。

WC_SCROLLBAR

创建滚动条控件。 这些控件使用户能够滚动窗口的内容。

WC_STATIC

创建静态控件。 这些控件包含不可编辑的文本。

WC_TABCONTROL

创建选项卡控件。 这些控件为窗口或对话框的同一区域定义多个页面。 每个页面由一组信息或应用程序在用户选择相应选项卡时显示的一组控件组成。

WC_TREEVIEW

创建树视图控件。 这些控件显示项的分层列表。 每个项都包含一个标签和一个可选的位图。

3.lpWindowName:窗口标题,通常是窗口的名称,可以是一个字符串或者是一个资源ID。

4.dwStyle:窗口样式,常用的样式如下:

常量名称常量值说明
WS_BORDER0x00800000L窗口具有细线边框
WS_CAPTION0x00C00000L窗口具有标题栏 (包括 WS_BORDER 样式) 。
WS_CHILD0x40000000L窗口是子窗口。 具有此样式的窗口不能有菜单栏。 此样式不能与 WS_POPUP样式一 起使用。
WS_CHILDWINDOW0x40000000L与 WS_CHILD 样式相同。
WS_CLIPCHILDREN0x02000000L在父窗口中绘制时,排除子窗口占用的区域。 创建父窗口时会使用此样式。
WS_CLIPSIBLINGS0x04000000L将子窗口相对于彼此剪裁;也就是说,当特定子窗口收到 WM_PAINT 消息时, WS_CLIPSIBLINGS 样式会将所有其他重叠子窗口剪辑到要更新的子窗口区域。 如果未指定 WS_CLIPSIBLINGS 并且子窗口重叠,则当在子窗口的工作区内绘制时,可以在相邻子窗口的工作区内绘制。
WS_DISABLED0x08000000L窗口最初处于禁用状态。 禁用的窗口无法从用户接收输入。 若要在创建窗口后进行更改,请使用 EnableWindow 函数。
WS_DLGFRAME0x00400000L窗口具有通常与对话框一起使用的样式边框。 具有此样式的窗口不能有标题栏。
WS_GROUP0x00020000L窗口是一组控件的第一个控件。 该组包含此第一个控件及其之后定义的所有控件,最多包含 WS_GROUP 样式的下一个控件。 每个组中的第一个控件通常具有 WS_TABSTOP 样式,以便用户可以从组移动到组。 用户随后可以使用方向键将组中的一个控件中的键盘焦点更改为组中的下一个控件。
可以打开和关闭此样式以更改对话框导航。 若要在创建窗口后更改此样式,请使用 SetWindowLong 函数。
WS_HSCROLL0x00100000L窗口具有水平滚动条。
WS_ICONIC0x20000000L窗口最初最小化。 与 WS_MINIMIZE 样式相同。
WS_MAXIMIZE0x01000000L窗口最初最大化。
WS_MAXIMIZEBOX0x00010000L窗口具有最大化按钮。 不能与 WS_EX_CONTEXTHELP 样式组合。 还必须指定 WS_SYSMENU 样式。
WS_MINIMIZE0x20000000L窗口最初最小化。 与 WS_ICONIC 样式相同。
WS_MINIMIZEBOX0x00020000L窗口具有最小化按钮。 不能与 WS_EX_CONTEXTHELP 样式组合。 还必须指定 WS_SYSMENU 样式。
WS_OVERLAPPED0x00000000L窗口是重叠的窗口。 重叠的窗口具有标题栏和边框。 与 WS_TILED 样式相同。
WS_OVERLAPPEDWINDOW(WS_OVERLAPPED |WS_CAPTION |WS_SYSMENU |WS_THICKFRAME |WS_MINIMIZEBOX |WS_MAXIMIZEBOX)窗口是重叠的窗口。 与 WS_TILEDWINDOW 样式相同。
WS_POPUP0x80000000L窗口是弹出窗口。 此样式不能与 WS_CHILD样式一 起使用。
WS_POPUPWINDOW(WS_POPUP |WS_BORDER |WS_SYSMENU)窗口是弹出窗口。 必须组合 WS_CAPTION 和 WS_POPUPWINDOW 样式以使窗口菜单可见。
WS_SIZEBOX0x00040000L窗口具有大小调整边框。 与 WS_THICKFRAME 样式相同。
WS_SYSMENU0x00080000L窗口的标题栏上有一个窗口菜单。 还必须指定 WS_CAPTION 样式。
WS_TABSTOP0x00010000L窗口是一个控件,当用户按下 TAB 键时,可以接收键盘焦点。 按 Tab 键会将键盘焦点更改为 具有WS_TABSTOP 样式的下一个控件。
可以打开和关闭此样式以更改对话框导航。 若要在创建窗口后更改此样式,请使用 SetWindowLong 函数。 若要使用户创建的窗口和无模式对话框使用制表位,请更改消息循环以调用 IsDialogMessage 函数。
WS_THICKFRAME0x00040000L窗口具有大小调整边框。 与 WS_SIZEBOX 样式相同。
WS_TILED0x00000000L窗口是重叠的窗口。 重叠窗口具有标题栏和边框。 与 WS_OVERLAPPED 样式相同。
WS_TILEDWINDOW(WS_OVERLAPPED |WS_CAPTION |WS_SYSMENU |WS_THICKFRAME |WS_MINIMIZEBOX |WS_MAXIMIZEBOX)窗口是重叠的窗口。 与 WS_OVERLAPPEDWINDOW 样式相同。
WS_VISIBLE0x10000000L窗口最初可见。
可以使用 ShowWindow 或 SetWindowPos 函数打开和关闭此样式。
WS_VSCROLL0x00200000L该窗口具有垂直滚动条。

5.x:窗口左上角的x坐标,可以是一个绝对坐标或者是一个相对于父窗口客户区的坐标。

6.y:窗口左上角的y坐标,可以是一个绝对坐标或者是一个相对于父窗口客户区的坐标。

7.nWidth:窗口的宽度,单位为像素。

8.nHeight:窗口的高度,单位为像素。

9.hWndParent:父窗口句柄,如果创建的是子窗口,则需要指定父窗口句柄。

10.hMenu:菜单句柄或者子窗口ID,如果创建的是菜单窗口,则需要指定菜单句柄;如果创建的是子窗口,则需要指定子窗口ID。

11.hInstance:应用程序实例句柄,即WinMain函数的第一个参数。lpParam:创建窗口时要传递的参数,可以是任何值,将被传递给窗口过程函数。                   

二、RegisterClassEx去注册窗口时候WNDCLASSEXW结构体中style成员的各个参数的意义:

typedef struct tagWNDCLASSEXW {
    UINT        cbSize;
    UINT        style;          // 窗口类样式
    WNDPROC     lpfnWndProc;    // 窗口过程函数
    int         cbClsExtra;     // 类扩展字节数
    int         cbWndExtra;     // 窗口扩展字节数
    HINSTANCE   hInstance;      // 应用程序实例句柄
    HICON       hIcon;          // 窗口图标句柄
    HCURSOR     hCursor;        // 窗口光标句柄
    HBRUSH      hbrBackground;  // 窗口背景画刷句柄
    LPCWSTR     lpszMenuName;   // 菜单名字符串
    LPCWSTR     lpszClassName;  // 窗口类名字符串
    HICON       hIconSm;        // 小图标句柄
} WNDCLASSEXW, *PWNDCLASSEXW, *LPWNDCLASSEXW;

  • 2.1、其中窗口类型style变量常用的参数如下:

  1. CS_VREDRAW:当窗口的水平大小发生变化时,窗口客户区需要重新绘制。
  2. CS_HREDRAW:当窗口的垂直大小发生变化时,窗口客户区需要重新绘制。
  3. CS_DBLCLKS:当用户双击窗口时,窗口将接收WM_LBUTTONDBLCLK消息。
  4. CS_OWNDC:为窗口类创建一个私有的设备上下文,使得窗口可以单独处理设备上下文。
  5. CS_CLASSDC:为窗口类创建一个共享的设备上下文,使得多个窗口可以共享同一个设备上下文。
  6. CS_PARENTDC:为窗口类创建一个与父窗口共享设备上下文的设备上下文。
  7. CS_NOCLOSE:禁止关闭窗口。
  8. CS_SAVEBITS:当窗口被隐藏或移动时,保存窗口客户区的内容。
  9. CS_BYTEALIGNCLIENT:窗口客户区的坐标和尺寸将被调整为字节边界。
  10. CS_BYTEALIGNWINDOW:窗口的坐标和尺寸将被调整为字节边界。
  11. CS_GLOBALCLASS:将窗口类注册为全局类,该类可以被任何进程使用。 请注意,以上参数只是WNDCLASSEXW结构体的style成员中的一部分,该成员的值可以使用按位或运算符组合多个参数。其他的参数请参考MSDN文档。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坊垚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值