pub fn create_window_ex(
ex_style: WINDOW_EX_STYLE,
class_name: &str,
window_name: &str,
style: WINDOW_STYLE,
x: i32,
y: i32,
width: i32,
height: i32,
h_wnd_parent: Option<HWND>,
h_menu: Option<HMENU>,
h_instance: Option<HINSTANCE>,
param: Option<*const c_void>,
) -> HWNDExpand description
创建具有扩展窗口样式的重叠窗口、弹出窗口或子窗口。
create_window_ex 函数将WM_NCCREATE、WM_NCCALCSIZE和WM_CREATE消息发送到正在创建的窗口。
如果创建的窗口是子窗口,则其默认位置位于 Z 顺序的底部。 如果创建的窗口是顶级窗口,则其默认位置位于 Z 顺序 (的顶部,但位于所有最顶层窗口下方,除非创建的窗口本身是最顶层) 。
有关控制任务栏是否显示已创建窗口按钮的信息,请参阅 管理任务栏按钮。
有关删除窗口的信息,请参阅 destroy_window 函数。
可以在 class_name 参数中指定以下预定义控件类。 请注意可在 style 参数中使用的相应控件样式。
类 | 含义
BUTTON | 指定一个小矩形子窗口,该窗口表示用户可以单击以将其打开或关闭的按钮。 按钮控件可以单独使用,也可以成组使用,并且可以不带文本标记或显示。 当用户单击按钮控件时,按钮控件通常会更改外观。 有关详细信息,请参阅 按钮。有关可在 style 参数中指定的按钮样式表,请参阅 按钮样式。
COMBOBOX | 指定由列表框和类似于编辑控件的选择字段组成的控件。 使用此样式时,应用程序应随时显示列表框或启用下拉列表框。 如果列表框可见,在选择字段中键入字符会突出显示与键入的字符匹配的第一个列表框条目。 相反,选择列表框中的项会在选择字段中显示所选文本。 有关详细信息,请参阅 组合框。有关可以在 style 参数中指定的组合框样式表,请参阅 组合框样式。
EDIT | 指定一个矩形子窗口,用户可以从键盘键入文本。 用户选择控件,并通过单击控件或通过按 TAB 键移动到控件来为它提供键盘焦点。 编辑控件显示闪烁的插入点时,用户可以键入文本;使用鼠标移动光标,选择要替换的字符,或定位光标以插入字符:或使用 键删除字符。 有关详细信息,请参阅 编辑控件。有关可在 style 参数中指定的编辑控件样式的表,请参阅 编辑控件样式。
LISTBOX | 指定字符串列表。 每当应用程序必须提供用户可从中选择的名称列表(如文件名)时,请指定此控件。 用户可以通过单击来选择字符串。 突出显示所选字符串,并将通知消息传递到父窗口。 有关详细信息,请参阅 列表框。有关可在 style 参数中指定的列表框样式表,请参阅 列表框样式。
MDICLIENT | 指定 MDI 客户端窗口。 此窗口接收控制 MDI 应用程序的子窗口的消息。 建议的样式位是 WS_CLIPCHILDREN 和 WS_CHILD。 指定 WS_HSCROLL 和 WS_VSCROLL 样式以创建允许用户将 MDI 子窗口滚动到视图中的 MDI 客户端窗口。 有关详细信息,请参阅 多文档接口。
RichEdit | 指定 Microsoft Rich Edit 1.0 控件。 此窗口允许用户使用字符和段落格式查看和编辑文本,并且可以将嵌入式组件对象模型 (COM) 对象。 有关详细信息,请参阅 Rich Edit 控件。有关可以在 style 参数中指定的丰富编辑控件样式的表,请参阅 Rich Edit 控件样式。
RICHEDIT_CLASS | 指定 Microsoft Rich Edit 2.0 控件。 此控件允许用户使用字符和段落格式查看和编辑文本,并且可以包含嵌入的 COM 对象。 有关详细信息,请参阅 Rich Edit 控件。有关可以在 style 参数中指定的丰富编辑控件样式的表,请参阅 Rich Edit 控件样式。
SCROLLBAR | 指定一个矩形,该矩形包含一个滚动框,两端都有方向箭头。 每当用户单击控件时,滚动条就会向其父窗口发送通知消息。 如有必要,父窗口负责更新滚动框的位置。 有关详细信息,请参阅 滚动条。有关可在 style 参数中指定的滚动条控件样式的表,请参阅 滚动条控件样式。
STATIC | 指定用于标记、框或分隔其他控件的简单文本字段、框或矩形。 静态控件不采用任何输入,也不提供任何输出。 有关详细信息,请参阅 静态控件。有关可在 style 参数中指定的静态控件样式表,请参阅 静态控件样式。
ex_style的WS_EX_NOACTIVATE值阻止系统进行前台激活。 若要防止在用户单击窗口时激活队列,必须正确处理 WM_MOUSEACTIVATE 消息。 若要将窗口带到前台或以编程方式激活它,请使用 set_foreground_window 或 set_active_window。 将 FALSE 返回到 WM_NCACTIVATE 可防止窗口丢失队列激活。 但是,在激活时将忽略返回值。
设置 WS_EX_COMPOSITED 后,窗口的所有后代使用双缓冲获取从下到上绘制顺序。 从下到上绘制顺序允许后代窗口具有半透明 (alpha) 和透明度 (颜色键) 效果,但前提是后代窗口还设置了 WS_EX_TRANSPARENT 位。 通过双重缓冲,可以在不闪烁的情况下绘制窗口及其后代。
ex_style 正在创建的窗口的扩展窗口样式。 有关可能值的列表,请参阅 扩展窗口样式。
class_name 指定窗口类名称。 类名可以是使用 register_class 或 register_class_ex 注册的任何名称,前提是注册该类的模块也是创建窗口的模块。 类名也可以是任何预定义 的系统类 名称。
window_name 窗口名称。 如果窗口样式指定标题栏,则 window_name 指向的窗口标题将显示在标题栏中。 使用 create_window 创建控件(如按钮、检查框和静态控件)时,请使用 window_name 指定控件的文本。 使用 SS_ICON 样式创建静态控件时,请使用 window_name 指定图标名称或标识符。 若要指定标识符,请使用语法“#num”。
style 正在创建的窗口的样式。 此参数可以是 窗口样式值以及“备注”部分中指示的控件样式的组合。
x 窗口的初始水平位置。 对于重叠或弹出窗口, x 参数是窗口左上角的初始 x 坐标(以屏幕坐标表示)。 对于子窗口, x 是窗口左上角相对于父窗口工作区左上角的 x 坐标。 如果 x 设置为 CW_USEDEFAULT,则系统会选择窗口左上角的默认位置,并忽略 y 参数。 CW_USEDEFAULT 仅对重叠窗口有效;如果为弹出窗口或子窗口指定,则 x 和 y 参数设置为零。
y 窗口的初始垂直位置。 对于重叠或弹出窗口, y 参数是窗口左上角的初始 y 坐标(以屏幕坐标表示)。 对于子窗口, y 是子窗口左上角相对于父窗口工作区左上角的初始 y 坐标。 对于列表框 ,y 是列表框工作区左上角相对于父窗口工作区左上角的初始 y 坐标。如果使用 WS_VISIBLE 样式位创建重叠窗口,并且 x 参数设置为 CW_USEDEFAULT,则 y 参数确定窗口的显示方式。 如果 y 参数CW_USEDEFAULT,则窗口管理器在创建窗口后使用SW_SHOW标志调用 show_window。 如果 y 参数是其他某个值,则窗口管理器调用 show_window ,该值作为 cmd_show 参数。
width 窗口的宽度(以设备单位为单位)。 对于重叠窗口, width 是窗口的宽度、屏幕坐标或 CW_USEDEFAULT。 如果 width=CW_USEDEFAULT,系统将为窗口选择默认宽度和高度;默认宽度从初始 x 坐标扩展到屏幕的右边缘;默认高度从初始 y 坐标扩展到图标区域的顶部。 CW_USEDEFAULT 仅对重叠窗口有效;如果为弹出窗口或子窗口指定 了CW_USEDEFAULT ,则 width 和 height 参数设置为零。
height 窗口的高度(以设备单位为单位)。 对于重叠窗口, height 是窗口的高度(以屏幕坐标为单位)。 如果 width 参数设置为 CW_USEDEFAULT,则系统将忽略 height。
h_wnd_parent 正在创建的窗口的父窗口或所有者窗口的句柄。 若要创建子窗口或拥有的窗口,请提供有效的窗口句柄。 此参数对于弹出窗口是可选的。若要创建 仅消息窗口,请向现有仅消息窗口提供 HWND_MESSAGE 或句柄。
h_menu 菜单句柄,或指定子窗口标识符,具体取决于窗口样式。 对于重叠或弹出窗口, h_menu 标识要与窗口一起使用的菜单;如果要使用类菜单,则它可以为 NULL 。 对于子窗口, h_menu 指定子窗口标识符,即对话框控件用于通知其父级事件的整数值。 应用程序确定子窗口标识符;对于具有相同父窗口的所有子窗口,它必须是唯一的。
h_instance 要与窗口关联的模块实例的句柄。
param 指向要通过 CREATESTRUCT 结构传递到窗口的值的指针, (WM_CREATE消息的 lParam 参数指向的 lpCreateParams 成员) 。 此消息在返回之前由此函数发送到创建的窗口。如果应用程序调用 create_window 来创建 MDI 客户端窗口, lpParam 应指向 CLIENTCREATESTRUCT 结构。 如果 MDI 客户端窗口调用 create_window 来创建 MDI 子窗口, lpParam 应指向 MDICREATESTRUCT 结构。 如果不需要其他数据,lpParam 可能为 NULL。