函数原型:
HWND CreateWindowEx(
DWORD dwExStyle, //窗口的扩展风格(加强版专有)
LPCTSTR lpClassName, //已经注册的窗口类名称
LPCTSTR lpWindowName,//窗口标题栏的名字
DWORD dwStyle, //窗口的基本风格
int x, //窗口左上角水平坐标位置
int y, //窗口左上角垂直坐标位置
int nWidth, //窗口的宽度
int nHeight, //窗口的高度
HWND hWndParent, //窗口的父窗口句柄
WMENU hMenu, //窗口的菜单句柄
HINSTANCE hInstance, //应用程序实例句柄
LPVOID lpParam //窗口创建时附加参数
); //创建成功返回窗口句柄
目录
1. DWORD dwExStyle //窗口的扩展风格(加强版专有)
2. DWORD dwStyle //窗口的基本风格
3. LPCTSTR lpClassName //已经注册的窗口类名称
4. 实例
参数解析:
参数
含义
dwExStyle 指定创建窗口的扩展风格(详见下方↓) lpClassName
1. 窗口类名称,可以是一个指向 NULL 结束的字符串或一个整型数值
2. 如果是字符串,它指定了窗口的类名。这个类名可以是任何用函数 RegisterClass 注册的类名,或是任何预定义的控制类名
3. 如是一个整型量,它是由此前调用 theGlobalAddAtom 函数产生的全局量。这个小于 0xC000 的 16 位数必须是 lpClassName 参数字的低 16 位,该参数的高位必须是 0lpWindowName
1. 窗口标题,一个指向 NULL 结束的字符串指针
2. 如果窗口风格指定了标题条,由 lpWindowName 指向的窗口标题将显示在标题条上
3. 当使用 CreatewindowEx 函数来创建控制例如按钮,选择框和静态控制时,可使用 lpWindowName 来指定控制文本dwStyle
指定创建窗口的风格(详见下方↓)
x
1. 指定窗口的初始水平位置(x 坐标)
2. 对一个层叠或弹出式窗口,x 参数是屏幕坐标系的窗口的左上角的初始 x 坐标
3. 对于子窗口,x 是子窗口左上角相对父窗口客户区左上角的初始 x 坐标
4. 如果该参数被设为 CW_USEDEFAULT 则系统为窗口选择缺省的左上角坐标并忽略 y 参数,CW_USEDEFAULT 只对层叠窗口有效,如果为弹出式窗口或子窗口设定,则 x 和 y 参数被设为零。y
1. 指定窗口的初始垂直位置(y 坐标)
2. 对一个层叠或弹出式窗口,y 参数是屏幕坐标系的窗口的左上角的初始 y 坐标
3. 对于子窗口,y 是子窗口左上角相对父窗口客户区左上角的初始 y 坐标
4. 对于列表框,y 是列表框客户区左上角相对父窗口客户区左上角的初始 y 坐标
5. 如果层叠窗口是使用 WS_VISIBLE 风格位创建的并且 x 参数被设为 CW_USEDEFAULT,则系统将忽略 y 参数nWidth
1. 以设备单元指明窗口的宽度
2. 对于层叠窗口,nWidth 的值或是屏幕坐标的窗口宽度或是 CW_USEDEFAULT
3. 若 nWidth 是 CW_USEDEFAULT,则系统为窗口选择一个默认的高度和宽度(默认宽度为从初始 x 坐标开始到屏幕的右边界,缺省高度为从初始 y 坐标开始到目标区域的顶部。),CW_USEDEFAULT 只对层叠窗口有效,如果为弹出式窗口和子窗口设定 CW_USEDEFAULT 标志则 nWidth 和 nHeight 被设为零nHeight
1. 以设备单元指明窗口的高度
2. 对于层叠窗口,nHeight 是屏幕坐标的窗口宽度
3. 若 nWidth 被设为 CW_USEDEFAULT,则系统忽略 nHeight 参数,自动为 nWidth 和 nHeight 设置默认参数hWndParent
1. 指向被创建窗口的父窗口或所有者窗口的句柄
2. 若要创建一个子窗口或一个从属窗口,需提供一个有效的窗口句柄
3. 创建一个单纯的消息窗口,可以提供 HWND_MESSAGE 或提供一个己存在的消息窗口的句柄hMenu
1. 指向窗口菜单句柄,或依据窗口风格指明一个子窗口标识
2. 对于层叠或弹出式窗口,hMenu 指定窗口使用的菜单:如果使用了菜单类,则 hMenu 可以为 NULL
3. 对于子窗口,hMenu 指定了该子窗口标识(一个整型量),一个对话框使用这个整型值将事件通知父类。应用程序确定子窗口标识,这个值对于相同父窗口的所有子窗口必须是唯一的hInstance
与窗口相关联的模块实例的句柄
lpParam
1. 指向一个值的指针,该值传递给窗口 WM_CREATE 消息。该值通过在 IParam 参数中的 CREATESTRUCT 结构传递
2. 如果应用程序调用 CreateWindow 创建一个 MDI 客户窗口,则 lpParam 必须指向一个 CLIENTCREATESTRUCT 结构
参数说明:
1. DWORD dwExStyle //窗口的扩展风格(加强版专有)
指定扩展的窗口样式。为以下值中的一个或多个(devc++用“|”连接):
WS_EX_ACCEPTFILES | 指定此样式创建一个窗口接受拖放文件。 |
WS_EX_APPWINDOW | 当窗口可见时部队一个顶级窗口到任务栏上。 |
WS_EX_CLIENTEDGE | 指定窗口具有三维外观 — — 就是一个边界与沉没的边缘。 |
WS_EX_CONTEXTHELP | 在窗口的标题栏中包括一个问号。当用户单击问号,光标更改为一个问号指针。如果用户单击一个子窗口,孩子接受WM_HELP消息。 |
WS_EX_CONTROLPARENT | 允许用户使用 TAB 键导航之间的子窗口的窗口。 |
WS_EX_DLGMODALFRAME | 选定一个带有 (可选) 时,可能创建一个标题栏与你在dwStyle参数中指定WS_CAPTION风格标志的双边框的窗口。 |
WS_EX_LAYERED | 创建分层的窗口。请注意这不能用于子窗口。此外,这不能使用如果窗口有 CS_OWNDC 或 CS_CLASSDC 的类样式 |
WS_EX_LAYOUTRTL | 创建一个窗口,其水平的起源是右边缘。增加水平值预先向左。 |
WS_EX_LEFT | 给窗口一般左对齐属性。这是默认值。 |
WS_EX_LEFTSCROLLBAR | 客户区的左侧放置垂直滚动条。 |
WS_EX_LTRREADING | 显示窗口文本使用从左到右阅读顺序属性。这是默认值。 |
WS_EX_MDICHILD | 创建 MDI 子窗口。 |
WS_EX_NOPARENTNOTIFY | 指定用这种方式创建的子窗口将不发送WM_PARENTNOTIFY消息给它的父窗口创建或销毁子窗口时。 |
WS_EX_OVERLAPPEDWINDOW | 结合WS_EX_CLIENTEDGE和WS_EX_WINDOWEDGE的样式 |
WS_EX_PALETTEWINDOW | 结合WS_EX_WINDOWEDGE和WS_EX_TOPMOST的样式。 |
WS_EX_RIGHT | 给一个窗口右对齐的通用属性。这取决于该窗口类。 |
WS_EX_RIGHTSCROLLBAR | 右侧的客户区地方垂直滚动条 (如果存在)。这是默认值。 |
WS_EX_RTLREADING | 显示窗口文本使用右到左的阅读顺序属性。 |
WS_EX_STATICEDG | E创建具有三维边框样式可用于不接受用户输入的项目窗口。 |
WS_EX_TOOLWINDOW | 创建一个工具窗口,它是可用于作为一个浮动的工具栏窗口。一个工具窗口具有短于正常的标题栏,标题栏和使用较小字体绘制的窗口标题。 工具窗口不会出现在任务条形图或当用户按下 ALT + TAB 时出现的窗口中。 |
WS_EX_TOPMOST | 指定此样式创建一个窗口应放置高于所有顶层窗口和窗口被停用时,即使它们上面留。 应用程序可以使用SetWindowPos成员函数来添加或删除该属性。 |
WS_EX_TRANSPARENT | 指定此样式创建一个窗口将是透明的。就是任何窗口,在窗口下方的窗口不被遮盖。用此样式创建一个窗口收到WM_PAINT消息已经更新, 在它下面的所有同级窗口后才。 |
WS_EX_WINDOWEDGE | 指定窗口已具有凸起的边缘的边框。 |
2. DWORD dwStyle //窗口的基本风格
指定窗口样式。其值为以下值中的一个或多个(devc++用“|”连接):
WS_BORDER | 创建一个有边框的窗口。 |
WS_CAPTION | 创建一个具有标题栏 (意味着WS_BORDER样式) 的窗口。不能用的WS_DLGFRAME样式。 |
WS_CHILD | 创建一个子窗口。不能用的WS_POPUP样式。 |
WS_CHILDWINDOW | 与WS_CHILD样式相同。 |
WS_CLIPCHILDREN | 不包括在父窗口内绘制时子窗口所占用的区域。当您创建父窗口时使用。 |
WS_CLIPSIBLINGS | 剪辑子窗口彼此;也就是说,当一个特定的子窗口接收绘制消息, WS_CLIPSIBLINGS风格剪辑子窗口要更新的区域外的所有其他重叠的子窗口。 (如果没有给WS_CLIPSIBLINGS和子窗口重叠内子窗口的客户区, 绘制时,它是可能内相邻的子窗口的客户区的绘制。与WS_CHILD样式只一起使用。 |
WS_DISABLED | 创建一个窗口是最初被禁用。 |
WS_DLGFRAME | 创建一个窗口,但是没有头衔的双边框。 |
WS_GROUP | 指定一组控件,用户可以从一个控件移向下的箭头键的第一个控件。用虚假的WS_GROUP样式后的第一个控件定义的所有控件都属于同一个组。 WS_GROUP样式的下一控件启动下一个组 (就是下一步的开始位置的一组结束)。 |
WS_HSCROLL | 创建一个具有水平滚动条的窗口。 |
WS_ICONIC | 创建一个最初最小化的窗口。WS_MINIMIZE样式相同。 |
WS_MAXIMIZE | 创建一个窗口的最大大小。 |
WS_MAXIMIZEBOX | 创建一个窗口有最大化按钮。 |
WS_MINIMIZE | 创建一个最初最小化的窗口。与仅WS_OVERLAPPED样式一起使用。 |
WS_MINIMIZEBOX | 创建一个具有最小化按钮的窗口。 |
WS_OVERLAPPED | 创建重叠的窗口。重叠的窗口通常具有标题和边框。 |
WS_OVERLAPPEDWINDOW | 与WS_OVERLAPPED、 WS_CAPTION、 WS_SYSMENU、 WS_THICKFRAME、 WS_MINIMIZEBOX和WS_MAXIMIZEBOX样式创建重叠的窗口。 |
WS_POPUP | 创建一个弹出窗口。不能使用具有WS_CHILD样式。 |
WS_POPUPWINDOW | 用WS_BORDER, WS_POPUP和WS_SYSMENU的样式创建一个弹出窗口。WS_CAPTION样式必须结合WS_POPUPWINDOW样式,以使控制菜单上可见。 |
WS_SIZEBOX | 创建一个具有大小调整边框的窗口。WS_THICKFRAME样式相同。 |
WS_SYSMENU | 创建一个窗口,都有一个控制菜单框在其标题栏中。仅用于带有标题栏的窗口。 |
WS_TABSTOP | 指定任意数量的控件,通过它用户可以通过使用 TAB 键移动之一。TAB 键移动用户到指定WS_TABSTOP风格的下一个控件。 |
WS_THICKFRAME | 创建一个窗口,用厚厚的框架,可以用来调整窗口的大小。 |
WS_TILED | 创建重叠的窗口。重叠的窗口有标题栏和边框。WS_OVERLAPPED样式相同。 |
WS_TILEDWINDOW | 用 WS_OVERLAPPED、 WS_CAPTION、 WS_SYSMENU、 WS_THICKFRAME、 WS_MINIMIZEBOX 和 WS_MAXIMIZEBOX 的样式创建重叠的窗口。 与WS_OVERLAPPEDWINDOW 样式相同。 |
WS_VISIBLE | 创建的窗体可见 |
WS_VSCROLL | 创建一个具有垂直滚动条的窗口. |
3. LPCTSTR lpClassName //已经注册的窗口类名称
指定类名。是一个指针,指向以null结尾的串。
可以是任意串,也可以是用RegisterClass或RegisterClassEx注册的类名,也可以是系统类名。(Dev-C++用双引号)
系统类名 | 说明 |
Button | 按钮 |
ComboBox | 组合框 |
Edit | 编辑框 |
ListBox | 列表框 |
MDIClient | MDI客户端窗口 |
ScrollBar | 滚动条 |
Static | 静态控件类 |
ComboLBox | 组合框列表 |
DDEMLEvent | 动态数据交换管理库(DDEML)事件 |
Message | 只有消息的窗口 |
#32768 | 菜单 |
#32769 | 桌面窗口 |
#32770 | 对话框 |
#32771 | 任务切换窗口 |
#32772 | 图标标题 |
使用时需包含:#include <CommCtrl.h> 头文件 | |
类名 | 说明(Dev-C++引用时不用双引号,直接按常量引用) |
ANIMATE_CLASS |
创建动画控件。 这些控件以无提示方式显示音频视频交错 (AVI) 剪辑。 |
DATETIMEPICK_CLASS |
创建日期和时间选取器控件。 这些控件提供一个简单的界面,用于与用户交换日期和时间信息。 |
HOTKEY_CLASS |
创建热键控件。 通过这些控件,用户可以轻松定义热键。 |
LINK_CLASS |
创建 syslink 控件。 这些控件与链接一起使用。 |
MONTHCAL_CLASS |
创建月历控件。 这些控件为用户从熟悉的界面中选择日期提供了一种简单方法。 |
NATIVEFNTCTL_CLASS |
创建本机字体控件。 这些控件与本机字体一起使用。 |
PROGRESS_CLASS |
创建进度栏。 这些控件指示长时间操作的进度。 |
REBARCLASSNAME |
创建 rebar 控件。 这些控件充当子窗口的容器。 |
STANDARD_CLASSES |
创建内部 User32 控件,例如按钮、编辑和滚动条。 |
STATUSCLASSNAME |
创建状态窗口。 这些控件在水平窗口中显示状态信息。 |
TOOLBARCLASSNAME |
创建工具栏。 这些控件包含执行菜单命令的按钮。 |
TOOLTIPS_CLASS |
创建工具提示控件。 这些控件显示一个小弹出窗口,其中包含描述应用程序中工具用途的文本行。 |
TRACKBAR_CLASS |
创建跟踪条。 这些控件允许用户通过移动滑块从一系列值中进行选择。 |
UPDOWN_CLASS |
创建向上控件。 这些控件将箭头配对与编辑控件组合在一起。 单击箭头递增或递减编辑控件中的值。 |
WC_BUTTON |
创建按钮控件。 这些控件使用户能够启动操作。 |
WC_COMBOBOX |
创建组合框控件。 这些控件包含一个下拉列表,可从中选择单个项。 |
WC_COMBOBOXEX |
创建 ComboBoxEx 控件。 这些控件提供组合框控件的扩展,该控件提供对项图像的本机支持。 |
WC_EDIT |
创建编辑控件。 这些控件包含可编辑的文本。 |
WC_HEADER |
创建标头控件。 这些控件显示信息列顶部的标题,让用户通过单击标题对信息进行排序。 |
WC_LISTBOX |
创建 listbox 控件。 这些控件包含项列表。 |
WC_IPADDRESS |
创建 IP 地址控件。 这些控件类似于编辑控件,但它们允许你以 Internet 协议 (IP) 格式输入数字地址。 |
WC_LINK |
创建 SysLink 控件。 这些控件包含超文本链接。 |
WC_LISTVIEW |
创建列表视图控件。 这些控件显示项目集合,每个项由图标和标签组成,并提供多种排列项的方法。 |
WC_NATIVEFONTCTL |
创建本机字体控件。 这些是后台工作的不可见控件,使对话框的预定义控件能够显示当前系统语言。 |
WC_PAGESCROLLER |
创建寻呼控件。 这些控件用于包含和滚动另一个窗口。 |
WC_SCROLLBAR |
创建滚动条控件。 这些控件使用户能够滚动窗口的内容。 |
WC_STATIC |
创建静态控件。 这些控件包含不可编辑的文本。 |
WC_TABCONTROL |
创建选项卡控件。 这些控件为窗口或对话框的同一区域定义多个页面。 每个页面由一组信息或应用程序在用户选择相应选项卡时显示的一组控件组成。 |
WC_TREEVIEW文章来源:https://www.toymoban.com/news/detail-658791.html |
创建树视图控件。 这些控件显示项的分层列表。 每个项都包含一个标签和一个可选的位图。 |
4. 实例
[Dev-C++]创建一个只有关闭按钮,不在任务栏显示,不能改变大小,保持在上的右下角的窗口文章来源地址https://www.toymoban.com/news/detail-658791.html
#include <windows.h>
/* This is where all the input to the window goes to */
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
switch(Message) {
/* Upon destruction, tell the main thread to stop */
case WM_DESTROY: {
PostQuitMessage(0);
break;
}
/* All other messages (a lot of them) are processed using default procedures */
default:
return DefWindowProc(hwnd, Message, wParam, lParam);
}
return 0;
}
/* The 'main' function of Win32 GUI programs: this is where execution starts */
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
WNDCLASSEX wc; /* A properties struct of our window */
HWND hwnd; /* A 'HANDLE', hence the H, or a pointer to our window */
MSG msg; /* A temporary location for all messages */
/* zero out the struct and set the stuff we want to modify */
memset(&wc,0,sizeof(wc));
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = WndProc; /* This is where we will send messages to */
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
/* White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it */
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszClassName = "WindowClass";
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); /* Load a standard icon */
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); /* use the name "A" to use the project icon */
if(!RegisterClassEx(&wc)) {
MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return 0;
}
int no_menu_bar_width = GetSystemMetrics(SM_CXFULLSCREEN);
int no_menu_bar_height = GetSystemMetrics(SM_CYFULLSCREEN);
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE|WS_EX_TOOLWINDOW|WS_EX_TOPMOST,"WindowClass","HBoss",WS_VISIBLE|WS_CAPTION|WS_SYSMENU,
no_menu_bar_width-240, /* x */
no_menu_bar_height-120, /* y */
240, /* width */
120, /* height */
NULL,NULL,hInstance,NULL);
if(hwnd == NULL) {
MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);//
return 0;
}
/*
This is the heart of our program where all input is processed and
sent to WndProc. Note that GetMessage blocks code flow until it receives something, so
this loop will not produce unreasonably high CPU usage
*/
while(GetMessage(&msg, NULL, 0, 0) > 0) { /* If no error is received... */
TranslateMessage(&msg); /* Translate key codes to chars if present */
DispatchMessage(&msg); /* Send it to WndProc */
}
return msg.wParam;
}
到了这里,关于【WinAPI详解】<CreateWindowEx详解>的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!