CreateWindowA 宏 (winuser.h)

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

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

语法

void CreateWindowA(
  [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

类型: LPCTSTR

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

[in, optional] lpWindowName

类型: LPCTSTR

窗口名称。 如果窗口样式指定标题栏,则 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。 如果 nWidth为CW_USEDEFAULT,系统将选择窗口的默认宽度和高度;默认宽度从初始 x 坐标扩展到屏幕右边缘,默认高度从初始 y 坐标扩展到图标区域的顶部。 CW_USEDEFAULT 仅适用于重叠窗口;如果为弹出窗口或子窗口指定 了CW_USEDEFAULT则 nWidthnHeight 设置为零。

[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 参数中使用的相应控件样式。

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

有关可在 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) 对象。 有关详细信息,请参阅 Rich Edit Controls

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

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

有关可在 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)

另请参阅

关于多个文档接口

常见控件窗口类

概念性

CreateWindowEx

DestroyWindow

EnableWindow

其他资源

参考

RegisterClass

RegisterClassEx

ShowWindow

WM_COMMAND

WM_CREATE

WM_GETMINMAXINFO

WM_NCCREATE

WM_PAINT

Windows