CreateWindowEx
注:本文档由 Diu 翻译,小甲鱼校对。函数功能:
CreateWindowEx 函数用于创建一个具有扩展风格的重叠式窗口、弹出式窗口或子窗口,除此之外与 CreateWindow 函数相同。关于创建窗口和其他参数的完整描述,请参看 CreateWindow 函数。
API 函数原型:
注释:_In_ 说明该参数是输入的,_opt_ 说明该参数是可选参数。
HWND WINAPI CreateWindowEx(
_In_ DWORD dwExStyle, // 窗口扩展风格
_In_opt_ LPCTSTR lpClassName, // 窗口类名称
_In_opt_ LPCTSTR lpWindowName,// 窗口标题
_In_ DWORD dwStyle, // 窗口风格,或称窗口格式
_In_ int x, // 初始 x 坐标
_In_ int y, // 初始 y 坐标
_In_ int nWidth, // 初始 x 方向尺寸
_In_ int nHeight, // 初始 y 方向尺寸
_In_opt_ HWND hWndParent, // 父窗口句柄
_In_opt_ HMENU hMenu, // 窗口菜单句柄
_In_opt_ HINSTANCE hInstance, // 程序实例句柄
_In_opt_ LPVOID lpParam // 创建参数
);
参数解析:
参数 含义
dwExStyle 指明将要被创建的窗口的扩展窗口风格(详见下方↓)
lpClassName1. 窗口类名称,可以是一个指向 NULL 结束的字符串或一个整型数值
2. 如果是字符串,它指定了窗口的类名。这个类名可以是任何用函数 RegisterClass 注册的类名,或是任何预定义的控制类名
3. 如是一个整型量,它是由此前调用 theGlobalAddAtom 函数产生的全局量。这个小于 0xC000 的 16 位数必须是 lpClassName 参数字的低 16 位,该参数的高位必须是 0
lpWindowName1. 窗口标题,一个指向 NULL 结束的字符串指针
2. 如果窗口风格指定了标题条,由 lpWindowName 指向的窗口标题将显示在标题条上
3. 当使用 Createwindow 函数来创建控制例如按钮,选择框和静态控制时,可使用 lpWindowName 来指定控制文本
dwStyle 指定创建窗口的风格(详见下方↓)
x1. 指定窗口的初始水平位置(x 坐标)
2. 对一个层叠或弹出式窗口,x 参数是屏幕坐标系的窗口的左上角的初始 x 坐标
3. 对于子窗口,x 是子窗口左上角相对父窗口客户区左上角的初始 x 坐标
4. 如果该参数被设为 CW_USEDEFAULT 则系统为窗口选择缺省的左上角坐标并忽略 y 参数,CW_USEDEFAULT 只对层叠窗口有效,如果为弹出式窗口或子窗口设定,则 x 和 y 参数被设为零。
y1. 指定窗口的初始垂直位置(y 坐标)
2. 对一个层叠或弹出式窗口,y 参数是屏幕坐标系的窗口的左上角的初始 y 坐标
3. 对于子窗口,y 是子窗口左上角相对父窗口客户区左上角的初始 y 坐标
4. 对于列表框,y 是列表框客户区左上角相对父窗口客户区左上角的初始 y 坐标
5. 如果层叠窗口是使用 WS_VISIBLE 风格位创建的并且 x 参数被设为 CW_USEDEFAULT,则系统将忽略 y 参数
nWidth1. 以设备单元指明窗口的宽度
2. 对于层叠窗口,nWidth 的值或是屏幕坐标的窗口宽度或是 CW_USEDEFAULT
3. 若 nWidth 是 CW_USEDEFAULT,则系统为窗口选择一个默认的高度和宽度(默认宽度为从初始 x 坐标开始到屏幕的右边界,缺省高度为从初始 y 坐标开始到目标区域的顶部。),CW_USEDEFAULT 只对层叠窗口有效,如果为弹出式窗口和子窗口设定 CW_USEDEFAULT 标志则 nWidth 和 nHeight 被设为零
nHeight1. 以设备单元指明窗口的高度
2. 对于层叠窗口,nHeight 是屏幕坐标的窗口宽度
3. 若 nWidth 被设为 CW_USEDEFAULT,则系统忽略 nHeight 参数,自动为 nWidth 和 nHeight 设置默认参数
hWndParent1. 指向被创建窗口的父窗口或所有者窗口的句柄
2. 若要创建一个子窗口或一个从属窗口,需提供一个有效的窗口句柄
3. 创建一个单纯的消息窗口,可以提供 HWND_MESSAGE 或提供一个己存在的消息窗口的句柄
hMenu1. 指向窗口菜单句柄,或依据窗口风格指明一个子窗口标识
2. 对于层叠或弹出式窗口,hMenu 指定窗口使用的菜单:如果使用了菜单类,则 hMenu 可以为 NULL
3. 对于子窗口,hMenu 指定了该子窗口标识(一个整型量),一个对话框使用这个整型值将事件通知父类。应用程序确定子窗口标识,这个值对于相同父窗口的所有子窗口必须是唯一的
hInstance 与窗口相关联的模块实例的句柄
lpParam1. 指向一个值的指针,该值传递给窗口 WM_CREATE 消息。该值通过在 IParam 参数中的 CREATESTRUCT 结构传递
2. 如果应用程序调用 CreateWindow 创建一个 MDI 客户窗口,则 lpParam 必须指向一个 CLIENTCREATESTRUCT 结构
dwStyle 窗口风格解析
窗口风格 含义
WS_BORDER 创建一个带边框的窗口
WS_CAPTION 创建一个有标题框的窗口(包含了 WS_BODER 风格)
WS_CHILD 创建一个子窗口,这个风格的窗口不能拥有菜单也不能与 WS_POPUP 风格合用
WS_CHILDWINDOW 与 WS_CHILD 相同
WS_CLIPCHILDREN 当在父窗口内绘图时,排除子窗口区域,在创建父窗口时使用这个风格
WS_CLIPSIBLINGS1. 排除子窗口之间的相对区域,也就是,当一个特定的窗口接收到 WM_PAINT 消息时,WS_CLIPSIBLINGS 风格将所有层叠窗口排除在绘图之外,只重绘指定的子窗口
2. 如果未指定该风格,并且子窗口是层叠的,则在重绘子窗口的客户区时,就会重绘邻近的子窗口
WS_DISABLED1. 创建一个初始状态为禁止的子窗口,一个禁止状态的窗口不能接受来自用户的输入信息
2. 在窗口创建之后,可以调用 EnableWindow 函数来启用该窗口
WS_DLGFRAME 创建一个带对话框边框风格的窗口,这种风格的窗口不能带标题条
WS_GROUP1. 指定一组“控制窗口”的第一个“控制窗口”
2. 这个“控制窗口”组由第一个“控制窗口”和随后定义的“控制窗口”组成,自第二个“控制窗口”开始每个“控制窗口”具有 WS_GROUP 风格
3. 每个组的第一个“控制窗口”带有 WS_TABSTOP 风格,从而使用户可以在组间移动
4. 用户随后可以使用光标在组内的控制间改变键盘焦点
WS_HSCROLL 创建一个有水平滚动条的窗口
WS_ICONIC 创建一个初始状态为最小化状态的窗口,与 WS_MINIMIZE 风格相同
WS_MAXIMIZE 创建一个初始状态为最大化状态的窗口
WS_MAXIMIZEBOX 创建一个具有最大化按钮的窗口,该风格不能与 WS_EX_CONTEXTHELP 风格同时出现,同时必须指定 WS_SYSMENU 风格
WS_MINIMIZE 创建一个初始状态为最小化状态的窗口,与 WS_ICONIC 风格相同
WS_MINIMIZEBOX 创建一个具有最小化按钮的窗口,该风格不能与 WS_EX_CONTEXTHELP 风格同时出现,同时必须指定 WS_SYSMENU 风格
WS_OVERLAPPED 产生一个层叠的窗口,一个层叠的窗口有一个标题条和一个边框,与 WS_TILED 风格相同
WS_OVERLAPPEDWINDOW 相当于(WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX),与 WS_TILEDWINDOW 风格相同
WS_POPUP 创建一个弹出式窗口,该风格不能与 WS_CHILD 风格同时使用。
WS_POPUPWINDOW 相当于(WS_POPUP | WS_BORDER | WS_SYSMENU),但 WS_CAPTION 和 WS_POPUPWINDOW 必须同时设定才能使窗口某单可见
WS_SIZEBOX 创建一个可调边框的窗口,与 WS_THICKFRAME 风格相同
WS_SYSMENU 创建一个在标题条上带有窗口菜单的窗口,必须同时设定 WS_CAPTION 风格
WS_TABSTOP1. 创建一个“控制窗口”,在用户按下 Tab 键时可以获得键盘焦点。
2. 按下 Tab 键后使键盘焦点转移到下一具有 WS_TABSTOP 风格的“控制窗口”
WS_THICKFRAME 创建一个具有可调边框的窗口,与 WS_SIZEBOX 风格相同
WS_TILED 产生一个层叠的窗口,一个层叠的窗口有一个标题和一个边框,与 WS_OVERLAPPED 风格相同
WS_TILEDWINDOW 相当于(WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX),与 WS_OVERLAPPEDWINDOW 风格相同
WS_VISIBLE 创建一个初始状态为可见的窗口
WS_VSCROLL 创建一个有垂直滚动条的窗口
dwExStyle 窗口风格解析
窗口风格 含义
WS_EX_ACCEPTFILES
(0x00000010L) 指定以该风格创建的窗口接受一个拖拽文件
WS_EX_APPWINDOW
(0x00040000L) 当窗口可见时,将一个顶层窗口放置到任务栏上
WS_EX_CLIENTEDGE
(0x00000200L) 指定窗口有一个带阴影的边界
WS_EX_COMPOSITED
(0x02000000L) 1. 使用双缓冲,从低到上的顺序绘制一个窗口的所有子孙,更多内容,请参见备注部分。如果一个窗口指示了 CS_OWNDC 或 CS_CLASSDC 风格,那么不能使用此风格
2. Windows 2000:不支持此风格
WS_EX_CONTEXTHELP
(0x00000400L) 1. 窗口的标题栏包含一个问号标志。当用户点击了问号标志时,鼠标光标变为一个带有问号的指针。如果用户点击了一个子窗口,则子窗口接收一条 WM_HELP 消息。子窗口应该将这个消息传递给父窗口过程,父窗口再通过 HELP_WM_HELP 命令调用 WinHelp 函数。这个 Help 应用程序显示一个包含子窗口帮助信息的弹出式窗口
2. WS_EX_CONTEXTHELP 不能与 WS_MAXIMIZEBOX 和 WS_MINIMIZEBOX 同时使用。
WS_EX_CONTROLPARENT
(0x00010000L) 窗口本身包含应该参加对话框导航的子窗口,如果它的风格已经被确定,当进行像处理 TAB 建,方向键或键盘助记符等导航操作时,对话框管理器会递归到窗口的子窗口中
WS_EX_DLGMODALFRAME
(0x00000001L) 1. 指定窗口带双边
2. 通过在 dwStyle 参数中指定 WS_CAPTION 风格,这个窗口可以带一个标题栏
WS_EX_LAYERED
(0x00080000L) 1. 指定该窗口是一个分层窗口。如果窗口具有 CS_OWNDC 或 CS_CLASSDC 窗口风格,那么这个风格不能够被使用
2. Windows8:顶层窗口和子窗口都支持 WS_EX_LAYERED 风格。之前的 Window 系统版本只有顶层窗口支持 WS_EX_LAYERED 风格
WS_EX_LAYOUTRTL
(0x00400000L) 如果 shell 语言是 Hebrew,Arabic,或其他支持读顺序对齐的语言,那么窗口的右边缘是水平方向的起点,并且水平值向左递增
WS_EX_LEFT
(0x00000000L) 窗口具有左对齐属性,这是默认值
WS_EX_LEFTSCROLLBAR
(0x00004000L) 如果 shell 语言是 Hebrew,Arabic,或其他支持读顺序对齐的语言,那么垂直滚动条(如果存在)则在客户区的左边。对于其他语言,该风格被忽略
WS_EX_LTRREADING
(0x00000000L) 窗口文本以自左向右的阅读顺序属性来显示,这是默认值
WS_EX_MDICHILD
(0x00000040L) 指定窗口是一个 MDI 子窗口
WS_EX_NOACTIVATE
(0x08000000L)1. 如果一个顶层窗口以这种风格创建,那么当用户点击这个窗口时,这个窗口将不会成为前台窗口
2. 当用户最小化或者关闭前台窗口时,系统也不会将该窗口设为前台窗口
WS_EX_NOINHERITLAYOUT
(0x00100000L) 窗口不会传递自己的窗口布局给子窗口
WS_EX_NOPARENTNOTIFY
(0x00000004L) 以这个风格创建的子窗口在被创建和销毁时不向父窗口发送 WM_PARENTNOTFY 消息
WS_EX_NOREDIRECTIONBITMAP
(0x00200000L) 1. 指定这个窗口不会渲染到一个重定向的平面
2. 这个属性是为那些没有可视化内容或者使用设备而不是平面来使他们可视化的窗口而设置的
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) 1. 表明这个窗口具有通用的“右对齐”属性。这取决于窗口类。这个风格仅对外壳语言是如Hebrew,Arabic,或其他支持读顺序对齐的语言有效;否则,这个风格将会被忽略
2. 对静态控件或编辑控件使用 WS_EX_RIGHT 风格与分别使用 SS_RIGHT 或 ES_RIGHT风格效果一样。对按钮控件使用这个风格与使用 BS_RIGHT 和 BS_RIGHTBUTTON 风格效果一样
WS_EX_RIGHTSCROLLBAR
(0x00000000L) 垂直滚动条(如果存在)在客户区的右边。这是默认值。
WS_EX_RTLREADING
(0x00002000L) 如果 shell 语言是 Hebrew,Arabic,或其他支持读顺序对齐的语言,那么窗口文本是以自右向左的阅读顺序属性来显示的。若是其他语言,在该风格被忽略
WS_EX_STATICEDGE
(0x00020000L) 为不支持用户输入的项创建一个 3 维边界风格
WS_EX_TOOLWINDOW
(0x00000080L) 1. 指定该窗口将被当作一个浮动工具栏来使用。工具窗口的标题栏比一般窗口的标题栏短,并且窗口标题以小字体绘制
2. 当用户按下 ALT+TAB 键时,工具窗口不在任务栏或者对话框里显示
3. 如果工具窗口有一个系统菜单,它的图标将不会显示在标题栏里,但是,你可以通过点击鼠标右键或 ALT+SPACE 来显示菜单
WS_EX_TOPMOST
(0x00000008L) 1. 指明以该风格创建的窗口应放置在所有非最高层窗口的上面并且停留在其之上,即使窗口未被激活
2. 使用 SetWindowPos 函数来添加和移除这个风格。
WS_EX_TRANSPARENT
(0x00000020L) 1. 表明只有当位于该窗口之下的同胞窗口(通过同一线程被创建)被绘制时,该窗口才会被绘制。因为在该窗口之下的同胞窗口已经被绘制,所以该窗口显示透明
2. 为了摆除这些限制来达到透明,可以使用 SetWindowRgn 函数
WS_EX_WINDOWEDGE
(0x00000100L) 指定窗口具有边缘凸起的边框
返回值:
1. 如果函数成功,返回值为新窗口的句柄;
2. 如果函数失败,返回值为 NULL。
需求:
Minimum supported client Windows 2000 专业版 [仅桌面应用程序]
Minimum supported server Windows 2000 服务器版 [仅桌面应用程序]
Header Wingdi.h (包含于 Windows.h)
Library User32.lib
DLL User32.dll
Unicode and ANSI names CreateWindowExW(Unicode) 和 CreateWindowExA (ANSI)
【API档案】版权归鱼C工作室(www.fishc.com)所有,转载请注明来源。
页:
[1]