CreateWindowW 宏 (winuser.h)
创建重叠窗口、弹出窗口或子窗口。 它指定窗口类、窗口标题、窗口样式和 ((可选)) 窗口的初始位置和大小。 函数还指定窗口的父级或所有者(如果有)以及窗口的菜单。
若要使用扩展窗口样式以及 CreateWindow 支持的样式,请使用 CreateWindowEx 函数。
语法
HWND CreateWindowW(
[in, optional] lpClassName,
[in, optional] lpWindowName,
[in] dwStyle,
[in] x,
[in] y,
[in] nWidth,
[in] nHeight,
[in, optional] hWndParent,
[in, optional] hMenu,
[in, optional] hInstance,
[in, optional] lpParam
);
参数
[in, optional] lpClassName
类型: LPCWSTR
一个以 null 结尾的字符串或先前对 RegisterClassEx 函数的调用创建的类原子。 原子必须位于 lpClassName 的低序字中;高序字必须为零。 如果 lpClassName 是字符串,则指定窗口类名称。 类名可以是使用 RegisterClass 或 RegisterClassEx 注册的任何名称,前提是注册类的模块也是创建窗口的模块。 类名也可以是任何预定义的系统类名称。 有关系统类名称的列表,请参阅“备注”部分。
[in, optional] lpWindowName
类型: LPCWSTR
窗口名称。 如果窗口样式指定标题栏,则 lpWindowName 指向的窗口标题将显示在标题栏中。 使用 CreateWindow 创建控件(如按钮、检查框和静态控件)时,请使用 lpWindowName 指定控件的文本。 创建具有 SS_ICON 样式的静态控件时,请使用 lpWindowName 指定图标名称或标识符。 若要指定标识符,请使用语法“#num”。
[in] dwStyle
类型:DWORD
正在创建的窗口的样式。 此参数可以是 窗口样式值以及“备注”部分中指示的控件样式的组合。
[in] x
类型: int
窗口的初始水平位置。 对于重叠或弹出窗口, x 参数是窗口左上角的初始 x 坐标(以屏幕坐标表示)。 对于子窗口, x 是窗口左上角相对于父窗口工作区左上角的 x 坐标。 如果此参数设置为 CW_USEDEFAULT,系统会选择窗口左上角的默认位置,并忽略 y 参数。 CW_USEDEFAULT 仅适用于重叠窗口;如果为弹出窗口或子窗口指定了它,则 x 和 y 参数将设置为零。
[in] y
类型: int
窗口的初始垂直位置。 对于重叠或弹出窗口, y 参数是窗口左上角的初始 y 坐标(以屏幕坐标表示)。 对于子窗口, y 是子窗口左上角相对于父窗口工作区左上角的初始 y 坐标。 对于列表框, y 是列表框工作区左上角相对于父窗口工作区左上角的初始 y 坐标。
如果使用 WS_VISIBLE 样式位创建重叠窗口,并且 x 参数设置为 CW_USEDEFAULT,则 y 参数将确定窗口的显示方式。 如果 y 参数CW_USEDEFAULT,则窗口管理器在创建窗口后使用SW_SHOW标志调用 ShowWindow。 如果 y 参数是其他某个值,则窗口管理器使用该值作为 nCmdShow 参数调用 ShowWindow。
[in] nWidth
类型: int
窗口的宽度(以设备单位为单位)。 对于重叠窗口, nWidth 是窗口的宽度、屏幕坐标或 CW_USEDEFAULT。 如果 nWidth为CW_USEDEFAULT,系统会为窗口选择默认宽度和高度;默认宽度从初始 x 坐标扩展到屏幕的右边缘,默认高度从初始 y 坐标扩展到图标区域的顶部。 CW_USEDEFAULT 仅适用于重叠窗口;如果为弹出窗口或子窗口指定 了CW_USEDEFAULT , 则 nWidth 和 nHeight 设置为零。
[in] nHeight
类型: int
窗口的高度(以设备单位为单位)。 对于重叠窗口, nHeight 是窗口的高度(以屏幕坐标表示)。 如果 nWidth 设置为 CW_USEDEFAULT,系统会忽略 nHeight。
[in, optional] hWndParent
类型:HWND
所创建的窗口的父窗口或所有者窗口的句柄。 若要创建子窗口或拥有的窗口,请提供有效的窗口句柄。 此参数对于弹出窗口是可选的。
若要创建 仅消息窗口,请向现有仅消息窗口提供 HWND_MESSAGE 或句柄。
[in, optional] hMenu
类型: HMENU
菜单的句柄,或根据窗口样式指定子窗口标识符。 对于重叠或弹出窗口, hMenu 标识要与窗口一起使用的菜单;如果要使用类菜单,它可以为 NULL 。 对于子窗口, hMenu 指定子窗口标识符,即对话框控件用来通知其父级事件的整数值。 应用程序确定子窗口标识符;对于具有相同父窗口的所有子窗口,它必须是唯一的。
[in, optional] hInstance
类型: HINSTANCE
要与窗口关联的模块实例的句柄。
[in, optional] lpParam
类型: LPVOID
指向要通过 CREATESTRUCT 结构传递到窗口的值的指针, (WM_CREATE消息的 lParam 参数指向的 lpCreateParams 成员 ) 。 此消息在返回之前由此函数发送到创建的窗口。
如果应用程序调用 CreateWindow 来创建 MDI 客户端窗口, lpParam 应指向 CLIENTCREATESTRUCT 结构。 如果 MDI 客户端窗口调用 CreateWindow 来创建 MDI 子窗口, lpParam 应指向 MDICREATESTRUCT 结构。 如果不需要其他数据,lpParam 可能为 NULL。
返回
类型:HWND
如果函数成功,则返回值是新窗口的句柄。
如果函数失败,则返回值为 NULL。 要获得更多的错误信息,请调用 GetLastError。
返回值
无
备注
在返回之前, CreateWindow 会将 WM_CREATE 消息发送到窗口过程。 对于重叠窗口、弹出窗口和子窗口, CreateWindow 会将 WM_CREATE、 WM_GETMINMAXINFO和 WM_NCCREATE 消息发送到窗口。 WM_CREATE消息的 lParam 参数包含指向 CREATESTRUCT 结构的指针。 如果指定 了WS_VISIBLE 样式, CreateWindow 将向窗口发送激活和显示窗口所需的所有消息。
如果创建的窗口是子窗口,则其默认位置位于 Z 顺序的底部。 如果创建的窗口是顶级窗口,则其默认位置位于 Z 顺序 (的顶部,但位于所有最顶部窗口下方,除非创建的窗口本身是最顶层) 。
有关控制任务栏是否显示所创建窗口的按钮的信息,请参阅 管理任务栏按钮。
有关删除窗口的信息,请参阅 DestroyWindow 函数。
可以在 lpClassName 参数中指定以下预定义系统类。 请注意可在 dwStyle 参数中使用的相应控件样式。
系统类 | 含义 |
---|---|
BUTTON |
指定一个小矩形子窗口,该窗口表示用户可以单击以将其打开或关闭的按钮。 按钮控件可以单独使用,也可以成组使用,并且可以不带文本进行标记或显示。 当用户单击按钮控件时,按钮控件通常会更改外观。 有关详细信息,请参阅 按钮
有关可在 dwStyle 参数中指定的按钮样式表,请参阅 按钮样式。 |
COMBOBOX | 指定由列表框和类似于编辑控件的选择字段组成的控件。 使用此样式时,应用程序应随时显示列表框或启用下拉列表框。 如果列表框可见,在选择字段中键入字符会突出显示与键入的字符匹配的第一个列表框条目。 相反,选择列表框中的项会在选择字段中显示所选文本。 |
EDIT |
指定用户可从键盘键入文本的矩形子窗口。 用户选择控件,并通过单击或按 Tab 键移动到控件来为控件提供键盘焦点。 当编辑控件显示闪烁的插入点时,用户可以键入文本;使用鼠标移动光标,选择要替换的字符,或定位光标以插入字符;或使用 BACKSPACE 键删除字符。 有关详细信息,请参阅 编辑控件。
有关可在 dwStyle 参数中指定的编辑控件样式表,请参阅 编辑控件样式。 |
LISTBOX |
指定字符串的列表。 每当应用程序必须提供用户可从中选择的名称(如文件名)的列表时,请指定此控件。 用户可以通过单击来选择字符串。 突出显示所选字符串,并将通知消息传递到父窗口。 有关详细信息,请参阅 列表框。
有关可以在 dwStyle 参数中指定的列表框样式表,请参阅 列表框样式。 |
MDICLIENT |
指定 MDI 客户端窗口。 此窗口接收控制 MDI 应用程序的子窗口的消息。 建议的样式位 是WS_CLIPCHILDREN 和 WS_CHILD。 指定 WS_HSCROLL 和 WS_VSCROLL 样式以创建允许用户将 MDI 子窗口滚动到视图中的 MDI 客户端窗口。
有关详细信息,请参阅 多文档接口。 |
RichEdit |
指定 Microsoft Rich Edit 1.0 控件。 此窗口允许用户使用字符和段落格式查看和编辑文本,并且可以将嵌入式组件对象模型 (COM) 对象。 有关详细信息,请参阅 Rich Edit 控件。
有关可在 dwStyle 参数中指定的丰富编辑控件样式的表,请参阅 Rich Edit 控件样式。 |
RICHEDIT_CLASS |
指定 Microsoft Rich Edit 2.0 控件。 此控件允许用户使用字符和段落格式查看和编辑文本,并且可以包含嵌入的 COM 对象。 有关详细信息,请参阅 Rich Edit 控件。
有关可在 dwStyle 参数中指定的丰富编辑控件样式的表,请参阅 Rich Edit 控件样式。 |
SCROLLBAR |
指定一个矩形,该矩形包含一个滚动框,并在两端都有方向箭头。 每当用户单击控件时,滚动条就会向其父窗口发送通知消息。 如有必要,父窗口负责更新滚动框的位置。 有关详细信息,请参阅 滚动条。
有关可在 dwStyle 参数中指定的滚动条控件样式表,请参阅 滚动条控件样式。 |
STATIC |
指定用于标记、框或分隔其他控件的简单文本字段、框或矩形。 静态控件不采用任何输入,也不提供输出。 有关详细信息,请参阅 静态控件。
有关可以在 dwStyle 参数中指定的静态控件样式表,请参阅 静态控件样式。 |
CreateWindow 作为对 CreateWindowEx 函数的调用实现,如下所示。
#define CreateWindowA(lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
CreateWindowExA(0L, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
#define CreateWindowW(lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
CreateWindowExW(0L, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
#ifdef UNICODE
#define CreateWindow CreateWindowW
#else
#define CreateWindow CreateWindowA
#endif
示例
有关示例,请参阅 使用窗口类。
注意
winuser.h 标头将 CreateWindow 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定。
要求
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | winuser.h (包括 Windows.h) |
另请参阅
概念性
其他资源
引用
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈