CreateWindowA 宏 (winuser.h)

创建重叠、弹出窗口或子窗口。 它指定窗口类、窗口标题、窗口样式和窗口的初始位置和大小(可选)。 该函数还指定窗口的父或所有者(如果有)和窗口的菜单。

若要除了 CreateWindow支持的样式之外,还要使用扩展窗口样式,请使用 CreateWindowEx 函数。

语法

HWND CreateWindowA(
  [in, optional] LPCSTR    lpClassName,
  [in, optional] LPCSTR    lpWindowName,
  [in]           DWORD     dwStyle,
  [in]           int       x,
  [in]           int       y,
  [in]           int       nWidth,
  [in]           int       nHeight,
  [in, optional] HWND      hWndParent,
  [in, optional] HMENU     hMenu,
  [in, optional] HINSTANCE hInstance,
  [in, optional] LPVOID    lpParam
);

参数

[in, optional] lpClassName

类型:LPCSTR

null-terminated 字符串或上一次调用 RegisterClassRegisterClassEx 函数创建的类原子。 原子必须位于 lpClassName的低序单词中;高序单词必须为零。 如果 lpClassName 是字符串,则指定窗口类名。 类名可以是注册到 RegisterClassRegisterClassEx的任何名称,前提是注册该类的模块也是创建窗口的模块。 类名也可以是任何预定义的系统类名。 有关系统类名的列表,请参阅“备注”部分。

[in, optional] lpWindowName

类型:LPCSTR

窗口名称。 如果窗口样式指定标题栏,lpWindowName 指向的窗口标题将显示在标题栏中。 使用 CreateWindow 创建控件(如按钮、复选框和静态控件)时,请使用 lpWindowName 指定控件的文本。 使用 SS_ICON 样式创建静态控件时,请使用 lpWindowName 指定图标名称或标识符。 若要指定标识符,请使用语法“#num”。

[in] dwStyle

类型:DWORD

正在创建的窗口的样式。 此参数可以是 窗口样式值的组合,以及“备注”部分中指示的控件样式。

[in] x

类型:int

窗口的初始水平位置。 对于重叠窗口或弹出窗口,x 参数是窗口左上角的初始 x 坐标,以屏幕坐标表示。 对于子窗口,x 是窗口左上角相对于父窗口工作区左上角的 x 坐标。 如果此参数设置为 CW_USEDEFAULT,系统将选择窗口左上角的默认位置,并忽略 y 参数。 CW_USEDEFAULT 仅适用于重叠窗口;如果为弹出窗口或子窗口指定,则 xy 参数设置为零。

[in] y

类型:int

窗口的初始垂直位置。 对于重叠窗口或弹出窗口,y 参数是窗口左上角的初始 y 坐标,以屏幕坐标表示。 对于子窗口,y 是子窗口左上角相对于父窗口工作区左上角的初始 y 坐标。 对于列表框,y 是列表框工作区左上角相对于父窗口工作区左上角的初始 y 坐标。

如果使用 WS_VISIBLE 样式位设置创建重叠窗口,并将 x 参数设置为 CW_USEDEFAULT,则 y 参数将确定窗口的显示方式。 如果 y 参数 CW_USEDEFAULT,则窗口管理器会在创建窗口后使用 SW_SHOW 标志调用 ShowWindow。 如果 y 参数是一些其他值,则窗口管理器会调用 ShowWindow,该值作为 nCmdShow 参数。

[in] nWidth

类型:int

窗口的宽度(以设备单位为单位)。 对于重叠窗口,nWidth 是窗口的宽度、屏幕坐标或 CW_USEDEFAULT。 如果 nWidthCW_USEDEFAULT,则系统会选择窗口的默认宽度和高度;默认宽度从初始 x 坐标扩展到屏幕右边缘,默认高度从初始 y 坐标扩展到图标区域的顶部。 CW_USEDEFAULT 仅适用于重叠窗口;如果为弹出窗口或子窗口指定了 CW_USEDEFAULTnWidthnHeight 设置为零。

[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 结构(lpCreateParams 成员)指向的值的指针,该值由 WM_CREATE 消息的 lParam 参数指向。 此消息在返回之前由此函数发送到创建的窗口。

如果应用程序调用 CreateWindow 来创建 MDI 客户端窗口,lpParam 应指向 CLIENTCREATESTRUCT 结构。 如果 MDI 客户端窗口调用 CreateWindow 创建 MDI 子窗口,lpParam 应指向 MDICREATESTRUCT 结构。 如果不需要其他数据,lpParam 可能会 NULL

返回值

类型:HWND

如果函数成功,则返回值是新窗口的句柄。

如果函数失败,则返回值 NULL。 若要获取扩展的错误信息,请调用 GetLastError

言论

在返回之前,CreateWindow 向窗口过程发送 WM_CREATE 消息。 对于重叠、弹出窗口和子窗口,CreateWindow 向窗口发送 WM_CREATEWM_GETMINMAXINFOWM_NCCREATE 消息。 WM_CREATE 消息的 lParam 参数包含指向 CREATESTRUCT 结构的指针。 如果指定了 WS_VISIBLE 样式,CreateWindow 发送激活和显示窗口所需的所有消息。

如果创建的窗口是子窗口,则其默认位置位于 Z 顺序的底部。 如果创建的窗口是顶级窗口,则其默认位置位于 Z 顺序的顶部(但除非创建窗口本身是最顶层的窗口)的顶部。

有关控制任务栏是否显示已创建窗口的按钮的信息,请参阅 管理任务栏按钮

有关删除窗口的信息,请参阅 DestroyWindow 函数。

可以在 lpClassName 参数中指定以下预定义的系统类。 请注意可在 dwStyle 参数中使用的相应控件样式。

系统类 意义
按钮 指定一个小矩形子窗口,表示用户可以单击的按钮以打开或关闭它。 按钮控件可以单独使用,也可以在组中使用,并且可以标记或显示无文本。 当用户单击按钮控件时,按钮控件通常会更改外观。 有关详细信息,请参阅 按钮

有关可在 dwStyle 参数中指定的按钮样式表,请参阅 按钮样式

COMBOBOX 指定由列表框和类似于编辑控件的选择字段组成的控件。 使用此样式时,应用程序应随时显示列表框或启用下拉列表框。 如果列表框可见,请在选择字段中键入字符会突出显示与键入的字符匹配的第一个列表框项。 相反,选择列表框中的项将显示选定字段中的选定文本。

有关详细信息,请参阅 组合框。 有关可以在 dwStyle 参数中指定的组合框样式表,请参阅 组合框样式

EDIT 指定一个矩形子窗口,用户可以在其中键入键盘中的文本。 用户选择该控件,并通过按 Tab 键将其移动到该控件,并为其提供键盘焦点。 当编辑控件显示闪烁插入点时,用户可以键入文本;使用鼠标移动光标、选择要替换的字符,或将光标定位为插入字符;或使用 BACKSPACE 键删除字符。 有关详细信息,请参阅 编辑控件

有关可在 dwStyle 参数中指定的编辑控件样式表,请参阅 编辑控件样式

LISTBOX 指定字符串列表。 每当应用程序必须提供名称列表(如文件名)时,即可指定此控件,用户可以从中选择这些名称。 用户可以通过单击字符串来选择字符串。 突出显示所选字符串,并将通知消息传递到父窗口。 有关详细信息,请参阅 列表框

有关可在 dwStyle 参数中指定的列表框样式表,请参阅 列表框样式

MDICLIENT 指定 MDI 客户端窗口。 此窗口接收控制 MDI 应用程序的子窗口的消息。 建议的样式位 WS_CLIPCHILDRENWS_CHILD。 指定 WS_HSCROLLWS_VSCROLL 样式以创建 MDI 客户端窗口,允许用户将 MDI 子窗口滚动到视图中。

有关详细信息,请参阅 多个文档界面

RichEdit 指定 Microsoft Rich Edit 1.0 控件。 此窗口允许用户使用字符和段落格式查看和编辑文本,并且可以包括嵌入的组件对象模型 (COM) 对象。 有关详细信息,请参阅 富编辑控件

有关可在 dwStyle 参数中指定的富编辑控件样式表,请参阅 Rich Edit Control Styles

RICHEDIT_CLASS 指定 Microsoft Rich Edit 2.0 控件。 此控件允许用户使用字符和段落格式查看和编辑文本,并且可以包括嵌入的 COM 对象。 有关详细信息,请参阅 富编辑控件

有关可在 dwStyle 参数中指定的富编辑控件样式表,请参阅 Rich Edit Control Styles

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 [仅限桌面应用]
目标平台 窗户
标头 winuser.h (包括 Windows.h)

另请参阅

关于多个文档界面

常见控制窗口类

概念

CreateWindowEx

DestroyWindow

EnableWindow

其他资源

参考

RegisterClass

RegisterClassEx

ShowWindow

WM_COMMAND

WM_CREATE

WM_GETMINMAXINFO

WM_NCCREATE

WM_PAINT

Windows