win32窗口机制之CreateWindow

CreateWindow

函数功能:该函数创建一个重叠式窗口、弹出式窗口或子窗口。它指定窗口类,窗口标题,窗口

风格,以及窗口的初始位置及大小(可选的)。该函数也指定该窗口的父窗口或所属窗口(如果存在

的话),及窗口的菜单。若要使用除CreateWindow函数支持的风格外的扩展风格,则使用

CreateWindowEx函数代替CreateWindow函数。

函数原型:HWND CreateWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName,DWORD

dwStyle,int x,int y,int nWidth,int nHeight,HWND hWndParent,HMENU hMenu,HANDLE

hlnstance,LPVOID lpParam);

参数:

lpClassName:指向一个空结束的字符串或整型数atom。如果该参数是一个整型量,它是由此前调

用theGlobalAddAtom函数产生的全局量。这个小于0xC000的16位数必须是lpClassName参数字的低16位

,该参数的高位必须是0。如果lpClassName是一个字符串,它指定了窗口的类名。这个类名可以是任

何用函数RegisterClassEx注册的类名,或是任何预定义的控制类名。请看说明部分的列表。

lpWindowName:指向一个指定窗口名的空结束的字符串指针。

如果窗口风格指定了标题条,由lpWindowName指向的窗口标题将显示在标题条上。当使用

Createwindow函数来创建控制例如按钮,选择框和静态控制时,可使用lpWindowName来指定控制文本

dwStyle:指定创建窗口的风格。该参数可以是下列窗口风格的组合再加上说明部分的控制风格。

风格意义:

WS_BORDER:创建一个单边框的窗口。

WS_CAPTION:创建一个有标题框的窗口(包括WS_BORDER风格)。

WS_CHILD:创建一个子窗口。这个风格不能与WS_POPUP风格合用。

WS_CHILDWINDOW:与WS_CHILD相同。

WS_CLIPCHILDREN:当在父窗口内绘图时,排除子窗口区域。在创建父窗口时使用这个风格。

WS_CLIPSIBLINGS:排除子窗口之间的相对区域,也就是,当一个特定的窗口接收到WM_PAINT消息

时,WS_CLIPSIBLINGS 风格将所有层叠窗口排除在绘图之外,只重绘指定的子窗口。如果未指定

WS_CLIPSIBLINGS风格,并且子窗口是层叠的,则在重绘子窗口的客户区时,就会重绘邻近的子窗口。

WS_DISABLED:创建一个初始状态为禁止的子窗口。一个禁止状态的窗口不能接受来自用户的输人

信息。

WS_DLGFRAME:创建一个带对话框边框风格的窗口。这种风格的窗口不能带标题条。

WS_GROUP:指定一组控制的第一个控制。这个控制组由第一个控制和随后定义的控制组成,自第

二个控制开始每个控制,具有WS_GROUP风格,每个组的第一个控制带有WS_TABSTOP风格,从而使用户

可以在组间移动。用户随后可以使用光标在组内的控制间改变键盘焦点。

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_MAXMIZEBOX风格的层叠窗口,与WS_TILEDWINDOW风格相同。

WS_POPUP:创建一个弹出式窗口。该风格不能与WS_CHLD风格同时使用。

WS_POPUWINDOW:创建一个具有WS_BORDER,WS_POPUP,WS_SYSMENU风格的窗口,WS_CAPTION和

WS_POPUPWINDOW必须同时设定才能使窗口某单可见。

WS_SIZEBOX:创建一个可调边框的窗口,与WS_THICKFRAME风格相同。

WS_SYSMENU:创建一个在标题条上带有窗口菜单的窗口,必须同时设定WS_CAPTION风格。

WS_TABSTOP:创建一个控制,这个控制在用户按下Tab键时可以获得键盘焦点。按下Tab键后使键

盘焦点转移到下一具有WS_TABSTOP风格的控制。

WS_THICKFRAME:创建一个具有可调边框的窗口,与WS_SIZEBOX风格相同。

WS_TILED:产生一个层叠的窗口。一个层叠的窗口有一个标题和一个边框。与WS_OVERLAPPED风格

相同。

WS_TILEDWINDOW:创建一个具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU MS_THICKFRAME.

WS_MINIMIZEBOX,WS_MAXMIZEBOX风格的层叠窗口。与WS_OVERLAPPEDWINDOW风格相同。

WS_VISIBLE:创建一个初始状态为可见的窗口。

WS_VSCROLL:创建一个有垂直滚动条的窗口。

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参数。

nWidth:以设备单元指明窗口的宽度。对于层叠窗口,nWidth或是屏幕坐标的窗口宽度或是

CW_USEDEFAULT。若nWidth是CW_USEDEFAULT,则系统为窗口选择一个缺省的高度和宽度:缺省宽度为

从初始X坐标开始到屏幕的右边界,缺省高度为从初始X坐标开始到目标区域的顶部。CW_USEDEFAULT只

参层叠窗口有效;如果为弹出式窗口和子窗口设定CW_USEDEFAULT标志则nWidth和nHeight被设为零。

nHeight:以设备单元指明窗口的高度。对于层叠窗口,nHeight是屏幕坐标的窗口宽度。若

nWidth被设为CW_USEDEFAULT,则系统忽略nHeight参数。

hWndParent:指向被创建窗口的父窗口或所有者窗口的旬柄。若要创建一个子窗口或一个被属窗

口,需提供一个有效的窗口句柄。这个参数对弹出式窗日是可选的。Windows NT 5.0;创建一个消息

窗口,可以提供HWND_MESSAGE或提供一个己存在的消息窗口的句柄。

hMenu:菜单句柄,或依据窗口风格指明一个子窗口标识。对于层叠或弹出式窗口,hMenu指定窗

口使用的菜单:如果使用了菜单类,则hMenu可以为NULL。对于子窗口,hMenu指定了该子窗口标识(

一个整型量),一个对话框使用这个整型值将事件通知父类。应用程序确定子窗口标识,这个值对于

相同父窗口的所有子窗口必须是唯一的。

hInstance:与窗口相关联的模块事例的句柄。

lpParam:指向一个值的指针,该值传递给窗口 WM_CREATE消息。该值通过在lParam参数中的

CREATESTRUCT结构传递。如果应用程序调用CreateWindow创建一个MDI客户窗口,则lpParam必须指向

一个CLIENTCREATESTRUCT结构。

返回值:如果函数成功,返回值为新窗口的句柄:如果函数失败,返回值为NULL。若想获得更多

错误信息,请调用GetLastError函数。

备注:在返回前,CreateWindow给窗口过程发送一个WM_CREATE消息。对于层叠,弹出式和子窗口

,CreateWindow给窗口发送WM_CREATE,WM_GETMINMAXINFO和WM_NCCREATE消息。消息WM_CREATE的

lParam参数包含一个指向CREATESTRUCT结构的指针。如果指定了WS_VISIBLE风格,CreateWindow向窗

口发送所有需要激活和显示窗口的消息。

获取有关任务条是否为创建的窗口显示一个按钮的控制信息,参看Taskbar按钮的Visbility。

以下预定义的控制类可以在lpClassName参数中指定。注意在dwStyle参数中可以使用的相应的控制风

格。

BUTTON:按钮,是一个小矩形子窗口,用户可以点击来打开或关闭。按钮控制可以单独使用或包

含在组中使用,可以为控制写标签或不写标签。当用户点击按钮控制时按钮的外观有明显的改变。请

参看Button。查看dwStyle参数中指定的按钮风格表请参考Button Style。

COMBOBOX:组合框,由一个列表框和一个类似于编辑控制的选择域组成。在使用这个风格控制时

,应用程序或者使列表框一直显示或者是作成一个下拉列表。如果列表框可见,则在编辑域中输入字

符将使列表框中与字符一致的第一个域高亮。反之,在列表框中选择的项将显示在编辑域中。请参看

Combo Boxes。

查看dwStyle参数中指定的组合框风格表请参考Combo Boxes Style。

EDIT:编辑框,一个小的矩形子窗口,用户可以使用键盘向其中输入文本。用户可以通过点击或

按Tab键来选中编辑框控制并且使控制获得焦点。当编辑框中显示一个闪烁的插入记号时,用户可以输

入文本。使用鼠标移动光标,选择被替换的字符或设置插入字符的位置或使用回退键删除字符。请参

看Edit controls。

查看dwStyle参数中指定的编辑框风格的表格请参考Edit Control Style。

LISTBOX:列表框,字符串的列表。当应用程序必须显示名称的列表,例如文件名列表等,使用户

可以从中选择时就可指定列表框。用户可以通过单击来选择名称。选择时,被选择名高亮,同时传递

给父窗口一个通知消息。请参看LiSt Box Style。查看dwStyle参数中指定的列表风格表请参考List

BOX Control Style。

MDICLIENT:客户设计出MDI客户窗口。窗口接收控制MDI应用程序子窗口的消息。建议使用两种控

制风格位:WS_CLIPCHILDREN和WS_CHILD。指定了WS_HSCROLL和WS_VSCROLL风格的MDI客户窗口允许用

户将MDI子窗口滑动进入视窗。请参看MDI。

RichEdit:设计一个Rich Editl.0版的控制。该控制使用户可以以字符和段落格式测览和编辑文

本,并且可以包含嵌入的COM对象。请参看Rich Edit Controls。查看dwStyle参数中指定的RichEdit

风格表请参考List Box Control Style。

RICHEDIT_CLASS:设计一个Rich Edik2.0版的控制。该控制使用户可以以字符和段落格式测览和

编辑文本,并且可以包含嵌入的COM对象。请参看RichEditControls。查看dwStyle参数中指定的

RichEdit风格表请参考RichEditControIStyle。

SCROLLBAR: 滚动条,设计的一个包含着一个滚动盒和两端有方向箭头的矩形。只要用户点击了

控制,滚动条就给父窗口发送一个通知消息。如有必要,父窗口负责更新滚动条的位置。请参看

ScrollBars。查看dwStyle参数中指定的滚动条风格表请参考Scroll Bars Style。

STATIC:一个简单的静态文本域,文本盒或矩形用于给控制加标签,组合控制或将控制与其他控

制分开。

静态控制不提供输入和也不提供输出。请参看Static Control Styles。查看dwStyle参数中指定

的静态文本风格表请参考Scroll Bars Style。

Windows95:系统可以支持最大16,364个窗口句柄。

备注:如果在链接应用程序时指明是Windows 4.x版本,除非应用程序的窗口有窗口某单,否则窗

口控制没有标题控制。对Windows3.x版本没有这种要求。

Windows CE:CreateWindow是以“宏”方式完成的。它被定义为CreateWindowEX,并且dwExStyle

参数被置为长整数0。不支持菜单条控制,除非被声明为子窗口标志否则hMenu参数必须为NULL。不支

持MDICLIENT窗口类。dwStyle参数可以是对话框(Dialogue Box),窗口(Windows),控制

(Controls)文件中的窗口风格和控制风格的组合。

下列dwStyle标志在窗口中不支持:

WS_CHILDWINDOW;WS_ICONIC;WS_MAXIMIZE;WS_MAXIMIZEBOX;WS_MINIMIZE;WS_MINIMIZEBOX;

WS_OVERLAPPEDWINDOW;WS_POPUPWINDOW;WS_SIZEBOX;WS_THICKFRAME;WS_TILED;

WS_TILEDWINDOW

下列dwStyle标志在控制和对话框中不支持:

不支持的按钮风格和静态控制风格:

BS_LEFTTEXT;BS_MULTILINE;BS_TEXT;BS_USERBUTTON;

不支持的静态控制风格:SS_BLACKFRAME;SS_GRAYFRAME;SS_METAPICT; SS_SIMPLE;

SS_WHITERECT;SS_BLACKRECT;SS_GRAYRECT;SS_RIGHTIMAGE;SS_WHITEFRAME

不支持组合框风格。

CBS_OWNERDRAWFIXED;CBS_OWNWEDRAWVARIABLE;CBS_SIMPLE

不支持列表框控制风格。

LBS_NODATA;LBS_OWNERDRAWFIXED;LBS_OWNERDRAWVARIABLE;LBS_STANDARD

不支持的对话框风格:

DS_ABSALIGN;DS_CENTERMOUSE;DS_CONTEXTHELP;DS_FIXEDSYS;DS_NOFAILCREATE;

DS_NOIDLEMSG;DS_SYSMODAL;

不支持滚动条的风格

SBS_BOTTOMALIGN SBS_RIGHTALIGN;SBS_SlZEBOXBOTT0MRIHTALIGN;SBS_SIZEGRIP

可使用BS_OWNERDRAW风格来代替BS_USERBUTTON风格。

可使用SS_LEFT或SS_LEFTNOWORDWRAP风格来代替静态控制的SS_SIMPLE风格。

不支持MDICLIENT窗口类。

所有窗口都隐含WS_CLIPSIBLINGS和 WS_CLIPCHILDREN风格。

Windows CE1.0版除对话框外不支持被属窗口。如果hwndParent参数不为NULL,则窗口隐含给出

WS_CHILD风格。Windows CE1.0不支持菜单条。

速查: Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;头文件

:winuser.h;库文件:user32.lib; Unicode:在Windows NT上实现为Unicode和ANSI两种版本。

时间: 2024-11-08 23:53:27

win32窗口机制之CreateWindow的相关文章

Win32窗口消息机制 x Android消息机制 x 异步执行

如果你开发过Win32窗口程序,那么当你看到android代码到处都有的mHandler.sendEmptyMessage和 private final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_REPORT_PRIMARY_CLIP_CHANGED: reportPrimaryClipChanged(); }

收藏:Win32消息机制

Dos的过程驱动与Windows的事件驱动 在讲本程序的消息循环之前,我想先谈一下Dos与Windows驱动机制的区别: DOS程序主要使用顺序的,过程驱动的程序设计方法.顺序的,过程驱动的程序有一个明显的开始,明显的过程及一个明显的结束,因此程序能直接控制程序事件或过程的顺序.虽然在顺序的过程驱动的程序中也有很多处理异常的方法,但这样的异常处理也仍然是顺序的,过程驱动的结构. 而Windows的驱动方式是事件驱动,就是不由事件的顺序来控制,而是由事件的发生来控制,所有的事件是无序的,所为一个程

win32窗口程序的过程

复习一下win32窗口程序 设计一个窗口类: 注册窗口类: 创建窗口: 显示及更新窗口. 消息循环,去获取消息: 窗口过程函数的消息响应. 设计窗口类: typedef struct _WNDCLASS { UINT style; //窗口类的类型 WNDPROC lpfnWndProc; //窗口过程函数(回调函数) int cbClsExtra; //为该类设定额外内存空间 int cbWndExtra; //为该窗口设定额外内存空间 HANDLE hInstance; //当前应用程序的实

TCP的滑动窗口机制【转】

原文链接:http://www.cnblogs.com/luoquan/p/4886345.html      TCP这个协议是网络中使用的比较广泛,他是一个面向连接的可靠的传输协议.既然是一个可靠的传输协议就需要对数据进行确认.TCP协议里窗口机制有2种:一种是固定的窗口大小:一种是滑动的窗口.这个窗口大小就是我们一次传输几个数据.对所有数据帧按顺序赋予编号,发送方在发送过程中始终保持着一个发送窗口,只有落在发送窗口内的帧才允许被发送:同时接收方也维持着一个接收窗口,只有落在接收窗口内的帧才允

滑动窗口机制[转]

原文:http://blog.csdn.net/yujun00/article/details/636495 (1).窗口机制    滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口:同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口.发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同.不同的滑动窗口协议窗口大小一般不同.发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧.下面举一个例子

DUILIB虚拟窗口机制

转载请说明原出处,谢谢@@ Duilib虚拟界面由CNotifyPump类控制. CNotifyPump类提供了AddVirtualWnd方法, 按虚拟窗口名称为Key值,绑定CNotifyPump类型的虚拟窗口添加到虚拟窗口m_VirtualWndMap容器中. 看下方红色代码: boolCNotifyPump::AddVirtualWnd(CDuiString strName,CNotifyPump* pObject) { if( m_VirtualWndMap.Find(strName)

WIN32窗口模板

1 // WINATLTest.cpp : 定义应用程序的入口点. 2 // 3 4 #include "stdafx.h" 5 #include "WINATLTest.h" 6 7 #define MAX_LOADSTRING 100 8 9 // 全局变量: 10 HINSTANCE hInst; // 当前实例 11 TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本 12 TCHAR szWindowClass[MAX_LOAD

WIN32窗口子类化----自定义Edit控件的右键菜单

前言 Win32应用程序中,子控件的消息都是分发到其父窗口的消息处理函数中去了,这对于我们需要自定义子控件的某些特性时时十分不方便的,还好,Windows为我们提供了控件子类化的相关接口API.核心的思想是:通过获取子控件的消息处理函数地址,设置子控件的消息处理函数到自己定义的函数里,也就是Get/SetWindowLong API的使用. 测试代码 这里是一个简单的测试程序,在控制台程序中创建一个对话框,然后对话框上有一个EDIT控件(资源编辑器里拖入的,不多说),子类化EDIT控件,右键弹出

win32 窗口缩放时出现闪屏

今天无意发现之前写的一个小工具在缩放窗口的时候,出现闪屏,主要有两个位置: 工具栏出一闪屏 右侧的控制面板出现闪屏 (这个控制面板与多层元件组合而成) 之前真没注意到这个问题,平时都是最大化/恢复窗口,没缩放窗口,所以没发现这样的问题. 网上搜索了一下,找到一些解决方案: [百度文库] VC窗口闪烁问题的解决 - http://wenku.baidu.com/view/3c7e747931b765ce0508146a.html 我遇到的问题属于第2种情况: 原因二:  复杂的界面有多层窗口组成,