查阅资料在这里总结下Win32下的API函数
一、窗口函数(Window)
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
AdjustWindowRect
函数功能:该函数依据所需客户矩形的大小,计算需要的窗日矩形的大小。计算出的窗口矩形随后可以传递给CreateWindow函数,用于创建一个客户区所需大小的窗口。
函数原型:BOOL AdjustWindowRect(LPRECT lpRect ,DWORD
dwStyle,BOOL bMENU);
参数:
lpRect:指向RECT结构的指针,该结构包含所需客户区域的左上角和右下角的坐标。函数返回时,该结构容纳所需客户区域的窗口的左上角和右下角的坐标。
dwStyle:指定将被计算尺寸的窗口的窗口风格。
bMenu:指示窗口是否有菜单。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。获取错误信息,参看GetLastError。
备注:客户矩形是指完全包含一个客户区域的最小矩形;窗日矩形是指完全包含一个窗口的最小矩形,该窗口包含客户区与非客户区。
当一个菜单条下拉出两行或更多行时,AdjustWindowRect函数不增加额外的空间。
速查:Windows NT:3.1以上版本:Windows:95以上版本:Windows
CE:不支持;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = =
AdjustWindowRectEX
函数功能:该函数依据所需客户矩形大小,计算需要的窗口矩形的大小。计算出的窗口矩形随后可以传送给CreateWindowEx函数,用于创建一个客户区所需大小的窗口。
函数原型:BOOL AdjustWindowRectEX(LPRECT lpRect,DWORD
dwStyte;BOOL bMenu;DWORD dwExStyle);
参数:
lpRect:指向RECT结构的指针,该结构包含所需客户区域的左上角和右下角的坐标。函数返回时,该结构包含容纳所需客户区域的窗口的左上角和右下角的坐标。
dwStyle:指定将被计算尺寸的窗口的窗口风格。
bMenu:指示窗口是否有菜单。
dwExStyle:指定将被计算尺寸的窗口的扩展窗口风格。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
备注:客户矩形是指完全包含一个客户区域的最小矩形;窗口矩形是指完全包含一个窗口的最小矩形,该窗口包含客户区与非客户区。
当一个菜单条下拉出两行或更多行时,AdjustWindowRect函数不增加额外的空间。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
AnimateWindow
函数功能:该函数能在显示与隐藏窗口时能产生特殊的效果。有两种类型的动画效果:滚动动画和滑动动画。
函数原型:BOOL AnimateWindow(HWND hWnd,DWORD dwTime,DWORD
dwFlags);
参数:
hWnd:指定产生动画的窗口的句柄。
dwTime:指明动画持续的时间(以微秒计),完成一个动画的标准时间为200微秒。
dwFags:指定动画类型。这个参数可以是一个或多个下列标志的组合。标志描述:
AW_SLIDE:使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略。
AW_ACTIVE:激活窗口。在使用了AW_HIDE标志后不要使用这个标志。
AW_BLEND:使用淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志。
AW_HIDE:隐藏窗口,缺省则显示窗口。
AW_CENTER:若使用了AW_HIDE标志,则使窗口向内重叠;若未使用AW_HIDE标志,则使窗口向外扩展。
AW_HOR_POSITIVE:自左向右显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。
AW_VER_POSITIVE:自顶向下显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。
AW_VER_NEGATIVE:自下向上显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。在下列情况下函数将失败:
窗口使用了窗口边界;窗口已经可见仍要显示窗口;窗口已经隐藏仍要隐藏窗口。若想获得更多错误信息,请调用GetLastError函数。
备注:可以将AW_HOR_POSITIVE或AW_HOR_NEGTVE与AW_VER_POSITVE或AW_VER_NEGATIVE组合来激活一个窗口。
可能需要在该窗口的窗口过程和它的子窗口的窗口过程中处理WM_PRINT或WM_PRINTCLIENT消息。对话框,控制,及共用控制已处理WM_PRINTCLIENT消息,缺省窗口过程也已处理WM_PRINT消息。
速查:WIDdOWS NT:5.0以上版本:Windows:98以上版本;Windows
CE:不支持;头文件:Winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
ArrangelconicWindows
函数功能:该函数安排指定父窗口的各个最小化(图标化)子窗口。
函数原型:UNIT ArrangelconicWindows(HWND hWnd):
参数:
hWnd:父窗口句柄。
返回值:如果函数成功,返回值为一行图标的高度。如果函数失败,返回值为零。若想获得更多错误信息,请调用
callGetLastError函数。
备注:一个应用程序可以通过使用ArrangelconicWindows安排在一个父窗口卫的它自身的最小化的子窗口。这个函数也可以安排桌面图标。使用GetDesttopWindow函数获得桌面窗口的句柄。
一个应用程序给多文本接口(MDI)客户窗口发送WM_MDIICONARRANGE消息,使客户窗口来安排自身的最小化MDI子窗口。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:不支持;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
BeginDeferWindowPos
函数功能:该函数为一个多窗口位置结构分配内存并且返回该结构的句柄。
函数原型:HDWP BeginDeferWindowPos(int nNumWindows);
参数:
nNumWindows:指示存储位置信息的初始窗口数目。如有必要,DeferWindowPos函数可以增加该结构的大小。
返回值:如果函数成功,返回多窗口位置结构。如果分配内存时内存不足,则返回值为NULL。若想获得更多的错误信息,请调用GetLastError函数。
备注:多窗口位置结构是一个内部结构,应用程序不能直接引用。
DeferWindowPos函数在多窗口位置结构中填充了将被移动的一个或多个窗口的目标位置信息。EndDeferWindowPos接收该结构的句柄,并且依据存储在该结构中的信息重定位这些窗口。
如果在多窗口位置结构中的任意一个窗口中设置了SWP_HIDEWINDOW和SWP_SHOWWINDOW标志,则所有窗口都不能被重定位。
如果系统必须增加在多窗口位置结构中由nNumWindows设置的初始窗口数目,但又没有足够的内存分配,则系统的整个窗口重定位顺序失败(BeginDeferWindowsPos,DeferWindowsPos,EndDeferWindowPos)。应用程序通过指定所需最大数目,可以在执行过程中进行早期的检测和处理。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:不支持:头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = == = = = = = = = = = = = = = = = = = = =
= =
BringWindowToTop
函数功能:该函数将指定的窗口设置到Z序的顶部。如果窗口为顶层窗口,则该窗口被激活;如果窗口为了窗口,则相应的顶级父窗口被激活。
函数原型:B00L BringWindowToTop(HWND,hWnd);、
参数:
hWnd: 设置到Z序的顶部的窗口句柄。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
备注:使用BringWindowToTop函数显示出被其他窗口部分或全部遮盖的窗口。
调用这个函数类似于调用SetWindowPos函数来改变窗口在Z序中的位置,但是BringWindowToTop函数并不能使一个窗口成为顶层窗口。
如果应用程序不在前台中而想设置在前台中,可以调用SetForegroundWindow函数。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0以上版本;头文件:winuser.h;库文件:user32.lid。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
WINAPI CascadeWihdows
函数功能:该函数层叠排列指定父窗口的各指定子窗口。
函数原型:WORD WINAPI CascadeWihdows(HWND hWndParent,UNIT
wHow,CONST RECT*lpRect,UNIT cKids, Const HWND FA*lpKids);
参数:
Parent:父窗口的句柄。如果参数为NVLL,则假定为桌面窗口。
wHow:指定层叠标志。唯一可用的标志为MDITILE_SKIPDISABLED,防止被禁止的MDI子窗口被层叠排列。
lpBect:指向RECT结构的指针,该结构以客户坐标定义矩形区域,并在这个区域中排列窗口、该参数可以为NULL,这种情况下使用父窗口的客户区域。
cKids:指明由lpKids参数指定的数组的成员个数。如果IpKidS参数为NULL,则此参数将被忽略。
lpKids:指向将被排列的子窗口的句柄数组的指针。如果此参数为空,则指定的父窗口(或桌面窗口)的所有子窗口都将被排列。
返回值:如果函数成功,返回值为被排列的窗口数目;如果函数失败,返回值为零。若想获得更多错误信息,请调用
GetLastError函数。
备注:调用CascadeWindows函数使所有最大化窗口恢复到它们原来的大小。
速查: Windows NT:4.0以上版本;Windows:95以上版本;Windows
CE:不支持;头文件:winuser.h;库文件:User32.1
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
ChildWindowFromaPoint
函数功能:该函数确定属于某一父窗口的哪一个子窗口(如果存在的话)包含一个指定的点。
函数原型:HWND ChildWindowFromaPoint(HWND hWndParent.POINT
Point):
Parent:父窗口句柄。
Point:指定一个POINT结构,该结构给定了被检查的点的坐标。
返回值:返回值为包含该点的子窗口的句柄,即使该子窗口是隐藏的或被禁止的。如果该点在父窗口之外,则返回值为NULL。如果该点在父窗口内,但在任一子窗口外,则返回值为父窗口句柄。
备注:系统有一个与某一父窗口有联系的所有子窗口的内部列表。列表中的句柄顺序依据这些子窗口的z序。如果有多于一个的子窗口包含该点,那么系统返回在列表中包含该点的第一个窗口的句柄。
速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows
CE;1.0以上版本;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
ChidWindowFromaPointEx
函数功能:该函数确定属于父窗口的哪一个子窗口(如果存在的话)包含着指定的点。该函数可以忽略不可见的、禁止的和透明的子窗口。
函数原型:HWND ChidWindowFromaPointEx(HWND hwndParent,POINT
pt,UNIT uFlags);
参数:
hWndParent:父窗口句柄。
pt:指定一个POINT结构,该结构定义了被检查的点的坐标。
uFlags:指明忽略的子窗口的类型。该参数可以是下列参数的组合。
CWP_ALL:不忽略任一子窗口。CWP_SKIPINVISIBLE:忽略不可见的子窗口。
CWP_SKIPDISABLE:忽略禁止的子窗口。CWP_SKIPTRABSPARENT:忽略透明子窗口。
返回值:返回值为包含该点并且满足由uFlags定义的规则的第一个子窗口的句柄。如果该点在父窗口内,但在任一满足条件的子窗口外,则返回值为父窗口句柄。如果该点在父窗口之外或函数失败,则返回值为NULL。
备注:系统有一个与某一父窗口有联系的所有子窗口的内部列表。列表中的句柄顺序依据这些子窗口的Z序。如果有多于一个的子窗口包含该点,那么系统返回在列表中包含该点并且满足由uFlags定义的规则的第一个窗口的句柄。
速查:WindowS NT:4.0以上版本;Windows:95以上版本;Windows
CE:不支持;头文件:Winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
CloseWindow
函数功能:该函数最小化指定的窗口,但并不销毁该窗口。
函数原型:BOOL CloseWindow(HWND hWnd);
参数:
hWnd:将要最小化的窗口的句柄。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
备注:窗口尺寸被最小化成一个图标,并移动到屏幕的图标区域。系统显示窗口的图标而不显示窗口,并在图标下显示窗口标题。应用程序必须使用DestroyWindow函数销毁窗口。
速查:WindowS NT:3.1以上版本;Windows:95以上版本;Windows
CE:不支持;头文件:Winuser.h;库文件:user32.lib
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = = = = == = = = = = = = =
= =
CreateWindow
函数功能:该函数创建一个重叠式窗口、弹出式窗口或子窗口。它指定窗口类,窗口标题,窗口风格,以及窗口的初始位置及大小(可选的)。该函数也指定该窗口的父窗口或所属窗口(如果存在的话),及窗口的菜单。若要使用除CreateWindow函数支持的风格外的扩展风格,则使用CreateWindowEx函数代替CreateWindow函数。
函数原型:HWND CreateWindow(LPCTSTRlpClassName,LPCTSTR
lpWindowName,DWORDdwStyle,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_BODER风格)。
WS_CHIlD:创建一个子窗口。这个风格不能与WS_POPVP风格合用。
WS_CHLDWINDOW:与WS_CHILD相同。
WS_CLIPCHILDREN:当在父窗口内绘图时,排除子窗口区域。在创建父窗口时使用这个风格。
WS_CLlPBLINGS;排除子窗口之间的相对区域,也就是,当一个特定的窗口接收到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_EX_CONTEXTHELP风格同时出现,同时必须指定WS_SYSMENU风格。
WS_OVERLAPPED:产生一个层叠的窗口。一个层叠的窗口有一个标题条和一个边框。与WS_TILED风格相同。
WS_OVERtAPPEDWINDOW:创建一个具有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_UCEDEFAULT则系统为窗口选择缺省的左上角坐标并忽略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_USEDFEAULT只参层叠窗口有效;如果为弹出式窗口和子窗口设定CW_USEDEFAULT标志则nWidth和nHeight被设为零。
nHelght:以设备单元指明窗口的高度。对于层叠窗口,nHeight是屏幕坐标的窗口宽度。若nWidth被设为CW_USEDEFAULT,则系统忽略nHeight参数。
hWndParent:指向被创建窗口的父窗口或所有者窗口的旬柄。若要创建一个子窗口或一个被属窗口,需提供一个有效的窗口句柄。这个参数对弹出式窗日是可选的。Windows
NT 5.0;创建一个消息窗口,可以提供HWND_MESSAGE或提供一个己存在的消息窗口的句柄。
hMenu:菜单句柄,或依据窗口风格指明一个子窗口标识。对于层叠或弹出式窗口,hMenu指定窗口使用的菜单:如果使用了菜单类,则hMenu可以为NULL。对于子窗口,hMenu指定了该子窗口标识(一个整型量),一个对话框使用这个整型值将事件通知父类。应用程序确定子窗口标识,这个值对于相同父窗口的所有子窗口必须是唯一的。
hlnstance:与窗口相关联的模块事例的句柄。
lpParam:指向一个值的指针,该值传递给窗口
WM_CREATE消息。该值通过在IParam参数中的CREATESTRUCT结构传递。如果应用程序调用CreateWindow创建一个MDI客户窗口,则lpParam必须指向一个CLIENTCREATESTRUCT结构。
返回值:如果函数成功,返回值为新窗口的句柄:如果函数失败,返回值为NULL。若想获得更多错误信息,请调用GetLastError函数。
备注:在返回前,CreateWindow给窗口过程发送一个WM_CREATE消息。对于层叠,弹出式和子窗口,CreateWindow给窗口发送WM_CREATE,WM_GETMINMAXINFO和WM_NCCREATE消息。消息WM_CREATE的IParam参数包含一个指向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客户窗口。窗口接收控制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_ICONC;WS_MAXMIZE
WS_MAXIMIZEBOX;WS_MINIMIZE WS_MINIMIZEBOX;
WS_OVERLAPPEDWINDOWWS_POPUPWINDOW;WS_SIZEBOXWS_THICKFRAME
WS_TILED WS_TILEDWINDOW
下列dwStyle标志在控制和对话框中不支持:
不支持的按钮风格和静态控制风格:
BS_LEFTTEXT SS_BLACKFRAME;BS_MULTILINE SS_GRAYFRAME
BS_TEXT SS_METAPICT;BS_USERBUTTON SS_SIMPLE
不支持组合框SS_WHITERECT风格。
CBS_OWNERDRAWFIXEDSS_BLACKRECT;CBS_OWNWEDRAWVARIABLE
SS_GRAYRECT; CBS_SIMPLE8R旧HTrIMAGE
不支持列表框控制SS_WHITEFRAME风格。
LBS_NODATA
不支持的对话框风格:
LBS_OWNERDRAWFIXEDDS_ABSALIGN;LBS_OWNERDRAWVARIABLE
DS_CENTERMOUSE; LBS_STANDARD DS_CONTEXTHELP
不支持滚动条的 DS_FIXEDSYS风格
SBS_BOTTOMALIGNDS_NOFAILCREATE;SBS_RIGHTALIGN
DS_NOIDLEMSG;
SBS_SlZEBOXBOTT0MRIHTALIGN DS_SYSMODAL;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两种版本。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
CreateWindowEx
函数功能:该函数创建一个具有扩展风格的重叠式窗口、弹出式窗口或子窗口,其他与
CreateWindow函数相同。关于创建窗口和其他参数的内容,请参看CreateWindowEx。
函数原型:HWND CreateWindowEx(DWORD dwExStle,LPCTSTR
IpClassName,LPCTSTR lpWindowName,DWORD dwStyle,int x,int y,int
nWidth,int nHeight,HWND hWndParent,HMENUhMenu,HANDLE
hlnstance,LPVOIDlpParam);
参数:
dwExStyle:指定窗口的扩展风格。该参数可以是下列值:
WS_EX_ACCEPTFILES:指定以该风格创建的窗口接受一个拖拽文件。
WS_EX_APPWINDOW:当窗口可见时,将一个顶层窗口放置到任务条上。
WS_EX_CLIENTEDGE:指定窗口有一个带阴影的边界。
WS_EX_CONTEXTHELP:在窗口的标题条包含一个问号标志。当用户点击了问号时,鼠标光标变为一个问号的指针、如果点击了一个子窗口,则子窗日接收到WM_HELP消息。子窗口应该将这个消息传递给父窗口过程,父窗口再通过HELP_WM_HELP命令调用WinHelp函数。这个Help应用程序显示一个包含子窗口帮助信息的弹出式窗口。
WS_EX_CONTEXTHELP不能与WS_MAXIMIZEBOX和WS_MINIMIZEBOX同时使用。
WS_EX_CONTROLPARENT:允许用户使用Tab键在窗口的子窗口间搜索。
WS_EX_DLGMODALFRAME:创建一个带双边的窗口;该窗口可以在dwStyle中指定WS_CAPTION风格来创建一个标题栏。
WS_EX_LEFT:窗口具有左对齐属性,这是缺省设置的。
WS_EX_LEFTSCROLLBAR:如果外壳语言是如Hebrew,Arabic,或其他支持reading
order
alignment的语言,则标题条(如果存在)则在客户区的左部分。若是其他语言,在该风格被忽略并且不作为错误处理。
WS_EX_LTRREADING:窗口文本以LEFT到RIGHT(自左向右)属性的顺序显示。这是缺省设置的。
WS_EX_MDICHILD:创建一个MD子窗口。
WS_EX_NOPATARENTNOTIFY:指明以这个风格创建的窗口在被创建和销毁时不向父窗口发送WM_PARENTNOTFY消息。
WS_EX_OVERLAPPED:WS_EX_CLIENTEDGE和WS_EX_WINDOWEDGE的组合。
WS_EX_PALETTEWINDOW:WS_EX_WINDOWEDGE,
WS_EX_TOOLWINDOW和WS_WX_TOPMOST风格的组合WS_EX_RIGHT:窗口具有普通的右对齐属性,这依赖于窗口类。只有在外壳语言是如Hebrew,Arabic或其他支持读顺序对齐(reading
order alignment)的语言时该风格才有效,否则,忽略该标志并且不作为错误处理。
WS_EX_RIGHTSCROLLBAR:垂直滚动条在窗口的右边界。这是缺省设置的。
WS_EX_RTLREADING:如果外壳语言是如Hebrew,Arabic,或其他支持读顺序对齐(reading
order
alignment)的语言,则窗口文本是一自左向右)RIGHT到LEFT顺序的读出顺序。若是其他语言,在该风格被忽略并且不作为错误处理。
WS_EX_STATICEDGE:为不接受用户输入的项创建一个3一维边界风格
WS_EX_TOOLWIDOW:创建工具窗口,即窗口是一个游动的工具条。工具窗口的标题条比一般窗口的标题条短,并且窗口标题以小字体显示。工具窗口不在任务栏里显示,当用户按下alt+Tab键时工具窗口不在对话框里显示。如果工具窗口有一个系统菜单,它的图标也不会显示在标题栏里,但是,可以通过点击鼠标右键或Alt+Space来显示菜单。
WS_EX_TOPMOST:指明以该风格创建的窗口应放置在所有非最高层窗口的上面并且停留在其L,即使窗口未被激活。使用函数SetWindowPos来设置和移去这个风格。
WS_EX_TRANSPARENT:指定以这个风格创建的窗口在窗口下的同属窗口已重画时,该窗口才可以重画。
由于其下的同属富日已被重画,该窗口是透明的。
IpClassName:指向一个空结束的字符串或整型数atom。如果该参数是一个整型量,它是由此前调用theGlobaIAddAtom函数产生的全局量。这个小于OxCOOO的16位数必须是IpClassName参数字的低16位,该参数的高位必须是O。
如果lpClassName是一个字符串,它指定了窗口的类名。这个类名可以是任何用函数RegisterClassEx注册的类名,或是任何预定义的控制类名。请看说明部分的列表。
lpWindowName:指向一个指定窗口名的空结束的字符串指针。
如果窗口风格指定了标题条,由lpWindowName指向的窗口标题将显示在标题条上。当使用CreateWindow
函数来创建控制例如按钮,选择框和静态控制时,可使用lpWindowName来指定控制文本。
dwStyle:指定创建窗口的风格。该参数可以是下列窗口风格的组合再加上说明部分的控制风格。
x:参见CreateWindow。
y:参见CreateWindow。
nWidth:CreateWindow。
nHeigth:参见CreateWindow。
hWndParent:参见CreateWindow。
hMenu:参见CreateWindow。
hlnstance:参见CreateWindow。
lpParam:参见CreateWindow。
返回值:参见CreateWindow。
备注:参见CreateWindow。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0以上版本;头文件:winuser.h;库文件:USer32.lib;Unicode:在Windows
NT上实现为Unicode和ANSI两种版本。
DeferWindowPos
函数功能:该函数为指定的窗口更新指定的多窗口位置结构,然后函数返回该更新结构的句柄。EndDeferWindowPos函数使用该结构内的信息同时改变一些窗口的位置和大小。该结构由BeginDeferWindowPos函数创建。
函数原型:HWND DeferWindowPos(HDWP hWinPoslnfo,HWND hWnd,HWND
hWndlnsertAffer, int x,int y,int cx, int Cy,UNIT uFags);
参数:
hWinPoslnfo:多窗口定位结构的句柄,该结构包含着一个或多个窗口的尺寸和定位信息,可以由函数BeginDeterWindowPos返回该结构或是由最近一次调用的DeferWindowPos函数返回。
hWnd:窗口的句柄,该窗口的更新信息存储在结构中。
hWndlnsertAfter:被定位窗口的Z序的前一窗口的句柄。这个参数必须为窗口句柄或下列值之一:HWND_BOTTOM:将窗口定位在Z序的底部。如果hWnd参数指定的是一个最顶层窗口,则该窗口将失去顶级位置而被排在所有其他窗口的底部。
HWND_NOTOPMOST:将窗口放置在所有顶层窗口的顶部(即在所有顶层窗口的后面)。如果窗口已经是一个非顶层窗口则此参数不起作用。
HWND_TOP:将窗口放置在Z序的顶部。
HWND_TOPMOST:将窗口放置在所有非顶层窗口的顶部、即使未被激活,窗口仍保持顶级位置。如果在uFlagS参数中指定了SWP_NOZORDER标志则本参数将被忽略。
x:指定窗口左上角的X坐标。
y:指定窗口左上角的y坐标。
cx:以像素定义窗口的新的宽度。
cy:以像素定义窗口的新的宽度。
uelage:指定下列影响窗口的大小和位置的值的组合:
SWP_DRAWFRAME:在窗口周围画一个边框(该边框定义在窗口类的描述中)。
SWP_FRAMECHANGED:给窗口发送一个WM_NCCALCSIZE消息,即使窗口的尺寸不作改变也要发送。如果未指定这个标志,则只有窗口大小
改变时才发送WM_NCCALCSIZE消息。
SWP_HIDEWINDOW:隐藏窗口。
SWP_NOACTIVATE:不激活窗口。如果未指定这个标志,则窗口被激活并且根据hWndlnsertAfter参数的设置移到或是顶部窗口的顶部或是非顶部窗口的顶部。
SWP_NOMOVE;维持当前位置(忽略X和y参数)。
SWP_NOOWNERZORDER:不改变所有者窗口在Z序中的位置。
SWP_NOREDRAM:不作窗口更新。如果设定了这个标志,则不发生任何窗口刷新的动作。包括不对客户区,非客户区(包括标题条和滚动条),以及由于窗口移动露出的部分父窗口进行刷新。当设定了这个标志时,应用程序一定要明确指出将原窗口清除并且重画窗口的任何部分以及父窗口需要重画的部分。
SWP_NOREPOSITION:同 SWP_NOOWNERZORDER标志。
SWP_NOSENDCHANGING:防止窗口接受到WM_WINDOWPOSCHANGING消息。
SWP_NOSIZE;保持当前大小。(即忽略CX,Xy参数)。
SWP_NOZORDER:保持当前Z序(忽略hWndlnsertAfter参数)。
SWP_SHOWWINDOW:显示窗口。
返回值:返回值指明了被更新的多窗口定位结构。函数返回的句柄可能与传递给函数的句柄不同。这个函数返回的新句柄应在下一次调用时传递给DeferWindowPos函数和EndDeferWindowPos函数。如果调用函数时系统资源不足,则函数返回NULL。若想获得更多错误信息,请调用GetLastError函数。
备注:如果调用函数DeferWindowPos失败,应用程序应放弃窗口定位动作,并且不再调用EndDeferWindowPos
函数。如果未指定SWP_NOZORDER,系统将由hWnd参数指定的窗口定位于在hWndlnsertAfer参数指定的窗口之后的位置。如果hWndlnsertAfsr参数为空或为HWND_TOP,则系统将窗口放置在Z序顶端。如果hWndlnsertAfer设为HWND_BOTTOM则系统将窗口放置在Z序的底部。
所有子窗口的坐标都是相对于父窗口客户区的左上角的坐标。
一个窗口可以通过两种方式设为顶部窗口:或是设hWndlnsertAfter为HWND_TOPMOST并确保未设置SWP_NOZORDER标志;或是设置窗口在Z序中的位置使其在所有已存在的顶端窗口的顶部。当一个非顶端窗口被设为顶端窗口时,则属于它的窗口均被置为顶端窗口,而其所有者则不变。
如果SWP_NOACTIVATE或SWP_NOZORDER均未设置(即当应用程序要求在窗口被激活的同时改变其z序时),hwdfnsertPos参数只在下列情况中使用:
在hWndlnsertAfter参数中既未设定HWND_TOPMOST也未设定HWND_NoTTOPMOST标志;
由hWnd指定的窗口不是激活窗口;
应用程序在将窗口设为活动窗口时应将窗口设置到Z序的顶部。应用程序可以不受任何限制地改变被激活窗口在Z序中的位置,或在激活一个窗口之后将该窗口移到顶端窗口或非顶端窗口的顶部。
如果一个顶端窗口被重定位到Z序的底部(HWND_BOTTOM)或任何非顶端窗口后面时将不再是顶端窗口。
一个非顶端窗口可能拥有一个顶端窗口,反之则不成立。从属的任何窗口(例如一个对话框)都设置为顶层窗口以确保所有的从属窗口都在其所有者之上。
速查: Windows NT:3.1以上版本;Windows:95以上版本; WindowsCE:不支持;头文件:
winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = = = = == = = = = = = = =
= =
EnumChildProc
函数功能:是与函数EnumChilWindows一起使用的由应用程序定义的回调函数。它接收子窗口句柄。类型
WNDENUMOROC定义了指向这个回调函数的指针。EnumChildProc是一个应用程序定义的函数名的位置标志符。
函数原型:BOOL CALLBACK EnumChildProc(HWND hWnd,LPARAM IParam);
参数:
hWnd:指向在EnumChildWlndows中定义的父窗口的子窗口句柄。
lparam:指定在EnumchildWindows中给出的应用程序定义值。
返回值:为继续列举,回调函数必须返回TRUE;为停止列举,回调函数必须返回FALSE。
备注:回调函数可以执行任何要求的任务。应用程序必须通过将其地址传送给EnumChildwindows函数来注册这个回调函数。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:不支持:头文件:winuser.h;库文件:用户自定义。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
EnableWindow
函数功能:该函数允许或禁止指定的窗口或控制接受鼠标输入或键盘输入。当输入被禁止时窗口不能接收鼠标单击和按键等类输入;当输入允许时,窗口接受所有的输入。
函数原型:BOOL EnableWindow(HWND hWnd,BOOL bEndble);
参数:
hWnd:允许或禁止的窗口句柄。
bEnable:指定是允许还是禁止窗口。如果这个参数为TRUE,窗口允许;如果参数为FALSE,则窗口被禁止。
返回值:如果窗口此前曾被禁止,则返回值为非零;如果窗口此前未被禁止,则返回值为零。若想获得更多错误信息,请调用
GetLastError函数。
备注:如果窗口的使能状态正在改变,则在EnableWindow函数返回前发送一个WM_ENABLE消息。如果窗口己经被禁止,则它的所有子窗口都被禁止,即使未向它们发送WM_ENABLE消息。
在一个窗口被激活前必须是使能的。例如,如果应用程序正在显示一个无模式对话框并且禁止了它的主窗口,则应用程序在销毁对话框之前一定要使能该主窗口。否则,将有另外一个窗口接受键盘焦点并且被激活。如果一个子窗口被禁止,则在系统确定由哪一个窗口接受鼠标消息时该子窗口将被忽略。
当窗口被创建时缺省为使能状态。要创建一个初始被禁止的窗口,应用程序可以在CreateWindowh
函数和CreateWindowhEx中指定WS_DISABLED风格。在窗口被创建后,应用程序可以使用EnaoleWindow函数来使能和禁止窗口。
应用程序可以使用这个函数来使能或禁止在对话框内的控制。一个被禁止的控制不能接受键盘焦点用户也不能进入该控制。
速查:Windows NT:3.1以上版本;Windows:95以上版本; Windows
CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
EndDeferWindowPos
函数功能:该函数在一个单一的屏幕刷新周期内同时更新一个或多个窗口的位置和大小。
函数原型:BOOL EndDeferWindowPos( HWND hWinPoslnfo);
参数;
hWlnPoslnfo:指向多窗口定位结构的句柄,该结构包含着一个或多个窗口的尺寸和定位信息。这个内部结构由BeginDeferWindowPos函数返回或由最近一次调用DeferWindowPos函数退回。
返回值:如果函数成功,返回值为非零:如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
备注;EndDeferWindowPos函数向内部结构指定的每一个窗口发送WM_WINDOWPOSCHANGING和WM_WINDOWPOSCHANGED消息。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:不支持:头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
EnumChildProc
函数功能:该函数是由应用程序定义的,与函数EnumChildWindows一起使用的回调函数。它接收子窗口句柄。类型WNDENUMPROC定义了一个指向回调函数的指针。EnumChildProc是一个应用程序定义的函数名的位置标志符。
函数原型:BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM
ItParam);
参数:
hwnd:指向在EnumChildWindows中指定的父窗口的子窗口句柄。
Lparam:指定在EnumChildWindows函数给出的应用程序定义值。
返回值:为继续枚举,回调函数必须返回TRUE;为停止枚举,回调函数必须返回FALSE。
备注:回调函数可以执行任何要求的任务。
应用程序必须通过将其地址传送给EnumChildWindows函数来注册这个回user.h;库文件:用户自定义。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
EnumThreadWindows
函数功能:该函数枚举所有与一个线程有关的非子窗口。办法是先将句柄传给每一个窗口,随后传送给应用程序定义的回调函数。EnumThreadWindows函数继续到所有窗口枚举完为止或回调函数返回FALSE为止。要枚举一个特定窗口的所有子窗口;使用EnumChjdwjndows函数。
函数原型:BOOL
EnumThreadWindows{D函数功能:该函数销毁指定的窗口。该函数发送WS_DESTROY,WS_NCDESTROY消息到窗口中以撤消该窗口并且将键盘焦点移开。该函数也销毁窗口菜单,刷新线程消息队列,销毁计时器,删除剪贴板的所有权,并断开剪贴板视窗链接(如果窗口在视窗链接的顶端)。
如果指定的窗口是父窗口或所有者窗口,DestroyWindow在销毁父窗口或所有者窗口时自动销毁相关的子窗口和从属窗口。该函数首先销毁相关联的子窗口和从属窗口,然后销毁父窗口和所有者窗口。
DestroyWindow也销毁由CreateDialog函数创建的无模式对话框。
函数原型: BOOL DestroyWindow(HWND hWnd);
参数:
hWnd;将被销毁窗口的句柄。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
备注:一个线程不能用DestroyWindow函数销毁由其他线程创建的窗口。
如果被销毁窗口是一个不具有
WS_EX_NOPARENTNOTIFY风格的子窗口,则其父窗口将接收到一个WM_PARENTNOTIFY消息。
Windows CE:DestroyWindow函数不发送 WM_NCDESTROY消息。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0以上版本:头文件:Winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
EnumThreadWindows
函数功能:该函数枚举所有与一个线程相关联的非子窗口,办法是先将句柄传送给每一个窗口,随后传送给应用程序定义的回调函数。EnumThreadWindows函数继续直到所有窗口枚举完为止或回调函数返回FALSE为止。要枚举一个特定窗口的所有子窗口,使用EnumChildWindows函数。
函数原型:BOOL EnumThreadWindows(DWORD
dwThreadld,WNDENUMPROClpfn,LPARAMlparam);
参数:
dwThreadld:标识将被列举窗口的线程。
lpfn:指向一个应用程序定义的回调函数指针,请参看EnumThreadWndProc。
lPararm:指定一个传递给回调函数的应用程序定义值。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
速查:Windows NT:3.1以上版本; Windows:95以上版本; Windows
CE:不支持:头文件:winuser.h;库文件:user32.Iib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
EnumWindows
函数功能:该函数枚举所有屏幕上的顶层窗口,办法是先将句柄传给每一个窗口,然后再传送给应用程序定义的回调函数。EnumThreadWindows函数继续到所有顶层窗口枚举完为止或回调函数返回FALSE为止
函数原型:BOOL EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam);
参数:
lpEnumFunc:指向一个应用程序定义的回调数指针,请参看EnumWindowsProc。
lPararm:指定一个传递给回调函数的应用程序定义值。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
备注:EnumWindows函数不列举子窗口。
在循环体中调用这个函数比调用GetWindow函数更可靠。调用GetWindow函数中执行这个任务的应用程序可能会陷入死循环或指向一个已被销毁的窗口的句柄。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
EnumWindowsProc
函数功能:该函数是一个与EnumWindows或EnumDesktopWindows一起使用的应用程序定义的回调函数。它接收顶层窗口句柄。WNDENUMPROC定义一个指向这个回调函数的指针。EnumWindowsProc是应用程序定义函数名的位置标志符。
函数原型:BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM
IParam);
参数:
hwnd:顶层窗口句柄。
lParam:指定在EnumWIndowsh或EnumDesktopWindows中的应用程序定义值。
返回值:为继续列表,回调函数必须返回TRUE;若停止列表,它必须返回FALSE。
备注:应用程序必须通过传递给EnumWindows或EnumDesktopWindows应用程序地址来注册这个回调函数。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0以上版本:头文件:winuser.h;库文件:用户自定义。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
FindWindow
函数功能:该函数获得一个顶层窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数不查找子窗口。在查找时不区分大小写。
函数型:HWND FindWindow(LPCTSTR IpClassName,LPCTSTR
IpWindowName);
参数:
IpClassName
:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobafAddAtom函数产生的全局成员。该成员为16位,必须位于IpClassName的低
16位,高位必须为 0。
IpWindowName:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为空,则为所有窗口全匹配。
返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄;如果函数失败,返回值为NULL。
若想获得更多错误信息,请调用GetLastError函数。
备注:Windows CE:若类名是一个成员,它必须是从 RegisterClass返回的成员。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0以上版本;头文件:Winuser.h;库文件:user32.lib; Unicode:在 Windows
NT上实现为 Unicode和 ANSI两种版本。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = = = = == = = = = = = = =
= =
FindWindowEx
函数功能:该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。
函数原型:HWND FindWindowEx(HWND hwndParent,HWND
hwndChildAfter,LPCTSTR lpszClass,LPCTSTR lpszWindow);
参数;
hwndParent:要查找子窗口的父窗口句柄。
如果hwnjParent为NULL,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口。
Windows NT5.0 and
later:如果hwndParent是HWND_MESSAGE,函数仅查找所有消息窗口。
hwndChildAfter
:子窗口句柄。查找从在Z序中的下一个子窗口开始。子窗口必须为hwndPareRt窗口的直接子窗口而非后代窗口。如果HwndChildAfter为NULL,查找从hwndParent的第一个子窗口开始。如果hwndParent
和 hwndChildAfter同时为NULL,则函数查找所有的顶层窗口及消息窗口。
lpszClass:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobaIAddAtom函数产生的全局成员。该成员为16位,必须位于lpClassName的低16位,高位必须为0。
lpszWindow:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为
NULL,则为所有窗口全匹配。返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄。如果函数失败,返回值为NULL。
若想获得更多错误信息,请调用GetLastError函数。
速查 NT:4.0对以上版本;Windows:95以上版本;Windows
CE:不支持;头文件:winuser.h;库文件:user32.lib;Unicode:
在Windows NT上实现为Unicode和ANSI两种版本。
GetClientRect
函数功能:该函数获取窗口客户区的坐标。客户区坐标指定客户区的左上角和右下角。由于客户区坐标是相对子窗口客户区的左上角而言的,因此左上角坐标为(0,0)
函数原型:BOOL GetClientRect(HWND hWnd,LPRECT lpRect);
参数:
GetLastError 函数。
备注:Windows CE:命令条包含在客户区中。
速查:Windows NT: 3.1以上版本:Windows:95以上版本: Windows
CE:1.0以上版本:头文件:winuser.h;库文件:user32.lib
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
GetDesktopWindow
函数功能:该函数返回桌面窗口的句柄。桌面窗口覆盖整个屏幕。桌面窗口是一个要在其上绘制所有的图标和其他窗口的区域。
函数原型:HWND GetDesktopWindow(VOID)
参数:无。
返回值:函数返回桌面窗口的句柄。
速查:Windows NT:3.1以上版本;Windows:95以上版本:Windows
CE:不支持;头文件:Winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
GetForegroundwindow
函数功能:该函数返回前台窗口(用户当前工作的窗口)。系统分配给产生前台窗口的线程一个稍高一点的优先级。
函数原型:HWND GetForegroundwindow(VOID)
参数:无。
返回值:函数返回前台窗回的句柄。
速查:Windows NT:3.1以上版本;Windows:95以上版本:Windows
CE:1.0以上版本:头文件:Winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
GetLastActivePopup
函数功能:该函数确定指定窗口中的哪一个弹出式窗口是最近活动的窗口。
函数原型:HWND GetLastActivePopup(HWND hWnd);
参数:
hWnd:所有者窗口句柄。
返回值:返回值标识了最近活动的弹出式窗口的句柄。如果满足下列任一条件,则返回值与参数hWnd
相同:由hWnd指定的窗口是最近活动的:由hWnd指定的窗口不拥有任何弹出式窗口;由hWnd指定的窗口不是顶层窗口或它属于其他窗口。
速查:Windows:3.1以上版本;Windows:95以上版本:Windows
CE:不支持;头文件:winuser.h;
库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
GetNextWindow
函数功能:该函数返回z序中的前一个或后一个窗口的句柄。下一窗口在指定窗口的下面,前一窗口则在上面。如果指定的窗口是顶端窗口,该函数返回下一个(或前一个)顶端窗口的句柄。如果指定的窗口是顶层窗口,函数返回下一个(或前一个)顶层窗口的句柄。如果函数是子窗口,则函数搜索下一个或前一个子窗口的句柄。
函数原型:HWND GetNextWindow(HWND hWnd,UNIT wCmd);
参数:
hWnd:一个窗口的句柄。窗口句柄在wCmd参数的基础上获得的相对于这个窗口的句柄。
wCmd:指明窗口返回的是前一窗口的句柄还是后一窗口的句柄。该参数可以是下列两个值之一:
GW HWNONEXT:返回在给定窗口的下面窗口的句柄。
GW_HWNDPREV:返回在给定窗口的上面窗口的句柄。
返回值:如果函数成功,返回值是前一窗口(或后一窗口)的句柄。如果前后窗口不存在,则返回值为NULL。若想获得更多错误信息,请调用GetLastError函数。
备注:在设定了GW_HWNDNEXT或GW_GETPREV标志时,调用该函数与调用GetWindow函数相同。
速查:Windows NT:3.1以上版本;Windows:95以上版本:Windows
CE:不支持:头文件:Winuer.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
GetParent
函数功能:该函数获得一个指定子窗口的父窗口句柄。
函数原型:HWND GetParent(HWND hWnd);
参数:
hWnd:子窗口句柄,函数要获得该子窗口的父窗口句柄。
返回值:如果函数成功,返回值为父窗口句柄。如果窗口无父窗口,则函数返回NULL。若想获得更多错误信息,请调用GetLastError函数。
备注:WindowsCE:Windows CE1.0版本不支持除了对话框之外的所属子窗口。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0以上版本:头文件:Winuser.h:库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
GetTopWindow
函数功能:该函数检查与特定父窗口相联的子窗口z序,并返回在z序顶部的子窗口的句柄。
函数原型:HWND GetTopWindow(HWND hWnd);
参数:
hWnd:被查序的父窗口的句柄。如果该参数为NULL,函数返回Z序顶部的窗口句柄。
返回值;如果函数成功,返回值为在Z序顶部的子窗口句柄。如果指定的窗口无子窗口,返回值为NULL。
若想获得更多错误信息,请调用GetLastError函数。
速查:Windows NT:3.1以上版本;Windows:95以上版本:Windows
CE:不支持;头文件:Winuser.h:库文件;user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = == = = = = = = = = = = = = = = = = = =
= =
GetWindow
函数功能:该函数返回与指定窗口有特定关系(如Z序或所有者)的窗口句柄。
函数原型:HWND GetWindow(HWND hWnd,UNIT nCmd);
参数:
hWnd:窗口句柄。要获得的窗口句柄是依据nCmd参数值相对于这个窗口的句柄。
nCmd:说明指定窗口与要获得句柄的窗口之间的关系。该参数值可以是下列之一:
GW_CHILD:如果指定窗口是父窗口,则获得的是在Z序顶端的子窗口的句柄,否则为NULL。函数仅检查指定父窗口的子窗口,不检查继承窗口。
GW_ENABLEDPOUP:(WindowsNT
5.0)返回的句柄标识了属于指定窗口的处于使能状态弹出式窗口(检索使用第一个由GW_HWNDNEXT
查找到的满足前述条件的窗口);如果无使能窗口,则获得的句柄与指定窗口相同。
GW_HWNDFIRST:返回的句柄标识了在Z序最高端的相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在Z序最高端的最高端窗口;如果指定窗口是顶层窗口,则该句柄标识了在z序最高端的顶层窗口:如果指定窗口是子窗口,则句柄标识了在Z序最高端的同属窗口。
GW_HWNDLAST:返回的句柄标识了在z序最低端的相同类型的窗口。如果指定窗口是最高端窗口,则该柄标识了在z序最低端的最高端窗口:如果指定窗口是顶层窗口,则该句柄标识了在z序最低端的顶层窗口;如果指定窗口是子窗口,则句柄标识了在Z序最低端的同属窗口。
GW_HWNDNEXT:返回的句柄标识了在Z序中指定窗口下的相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在指定窗口下的最高端窗口:如果指定窗口是顶层窗口,则该句柄标识了在指定窗口下的顶层窗口;如果指定窗口是子窗口,则句柄标识了在指定窗口下的同属窗口。
GW
HWNDPREV:返回的句柄标识了在Z序中指定窗口上的相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在指定窗口上的最高端窗口;如果指定窗口是顶层窗口,则该句柄标识了在指定窗口上的顶层窗口;如果指定窗口是子窗口,则句柄标识了在指定窗口上的同属窗口。
GW_OWNER:返回的句柄标识了指定窗口的所有者窗口(如果存在)。
返回值:如果函数成功,返回值为窗口句柄;如果与指定窗口有特定关系的窗口不存在,则返回值为NULL。
若想获得更多错误信息,请调用GetLastError函数。
备注:在循环体中调用函数EnumChildWindow比调用GetWindow函数可靠。调用GetWindow函数实现该任务的应用程序可能会陷入死循环或退回一个已被销毁的窗口句柄。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
GetWindowPlacement
函数功能:该函数返回指定窗口的显示状态以及被恢复的、最大化的和最小化的窗口位置。
函数原型:BOOL GetWindowPlacement(HWND
hWnd,WINDOWPLACEMENT★lpwndpl);
参数:
hWnd: 窗日句柄。
lpwndpl:指向WINDOWPLACEMENT结构的指针,该结构存贮显示状态和位置信息。
在调用GetWindowPlacement函数之前,将WINDOWPLACEMENT结构的长度设为
sizeof(WIDNOWPLACEMENT)。如果lpwndpl->length设置不正确则函数GetWindowPlacement将失败。
返回值;如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetlastError函数。
备注:由该函数获得的WINDOWPLACEMENT结构的flag单元总为0。如果hWnd的窗口被最大化,则showCmd元为SHOWMZAXMIZED,如果窗口被最小化,则showCmd元为SHOWMINIMIZED,除此之外为SHOWNORMN,WINDOWPLACEMENT长度单元必须置为sizeOf(
WINDOWPLACEMENT),如果参数设置不正确,函数返回FALSE。查看设置窗口位置坐标的正确信息,参看WINDOWPLACEMENT。
速查:Windows Nt:3.1以上版本:Windows:95以上版本;Windows
CE:不支持;头文件:Winuser.h;库文件:User32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
GetWindowRect
函数功能:该函数返回指定窗口的边框矩形的尺寸。该尺寸以相对于屏幕坐标左上角的屏幕坐标给出。
函数原型:BOOL GetWindowRect(HWND hWnd,LPRECTlpRect);
参数:
hWnd:窗口句柄。
lpRect:指向一个RECT结构的指针,该结构接收窗口的左上角和右下角的屏幕坐标。
返回值:如果函数成功,返回值为非零:如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows
CE:1.0以上版本;头文件:Winuser.h;库文件:User32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
GetWindowText
函数功能:该函数将指定窗口的标题条文本(如果存在)拷贝到一个缓存区内。如果指定的窗口是一个控制,则拷贝控制的文本。但是,GetWindowTeXt不能接收在其他应用程序中的控制文本。
函数原型:Int GetWindowText(HWND hWnd,LPTSTR lpString,Int
nMaxCount);
参数:
hWnd:带文本的窗口或控制的句柄。
IpString:指向接收文本的缓冲区的指针。
nMaxCount:指定要保存在缓冲区内的字符的最大个数,其中包含NULL字符。如果文本超过界限,它就被截断。
返回值:如果函数成功,返回值是拷贝的字符串的字符个数,不包括中断的空字符;如果窗口无标题栏或文本,或标题栏为空,或窗口或控制的句柄无效,则返回值为零。若想获得更多错误信息,请调用GetLastError函数。
函数不能返回在其他应用程序中的编辑控制的文本。
备注:如果目标窗口属于当前进程,GetWindowText函数给指定的窗口或控制发送WM_GETTEXT消息。如果目标窗口属于其他进程,并且有一个窗口标题,则GetWindowTeXt返回窗口的标题文本,如果窗口无标题,则函数返回空字符串。
速查:Windows NT:3.1以上版本;Windows:95以上版本:Windows
CE:1.0以上版本;头文件:Winuser.h;库文件:user32.lib:Unicode:在Windows
NT上实现为Unicode和ANSI两种版本。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
IsChild
函数功能:该函数测试一个窗口是否是指定父窗口的子窗口或后代窗口。如果该父窗口是在父窗口的链表上则子窗口是指定父窗口的直接后代。父窗口链表从原始层叠窗口或弹出窗口一直连到该子窗口。
函数原型:BOOL IsChild(HWND hWndParant,HWND hWnd);
参数:
hWndparant:父窗口句柄。
hWnd:将被测试的窗口句柄。
返回值:如果窗口是指定窗口的子窗口或后代窗口,则退回值为非零。如果窗口不是指定窗口的子窗口或后代窗口,则退回值为零。
速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows
CE:1.0以上版本;头文件:winuser.h;库文件:user32.Iib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
GetWindowTextLent
函数功能:该函数返回指定窗口的标题文本(如果存在)的字符长度。如果指定窗口是一个控制,函数将返回控制内文本的长度。但是GetWindowTextLength函数不能返回在其他应用程序中的控制的文本长度。
函数原型:nit GetWindowTextLent(HWND hWnd);
参数:
hWnd:窗口或控制的句柄。
返回值:如果函数成功,返回值为文本的字符长度。在一定的条件下,返回值可能比实际的文本长度大。请参看说明。如果窗口无文本,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
备注:如果目标窗口属于当前进程,GetWindowTextLength函数给指定的窗口或控制发送WM_GETTEXT消息。
在一定的条件下,函数GetWindowTextLength的返回值可能比实际的文本长度大。这是由于ANSI和Unlcode的混和使用以及系统允许DBCS字符在文本内存在的原因,但是函数返回值要至少与文本的实际长度相等,因此可以利用这一点指导缓存区的分配。在应用程序既使用ANSI函数又使用Unicode的普通对话框时就会有缓存分配的问题;同样,当应用程序在一个Unicode的窗口过程中使用了ANSI的GetWindowTextLength函数,或在一个ANSI的窗口过程中使用了Unicode的GetWindowTextLength函数的时候也有缓存分配的问题。查看ANSI和Vnicode函数,参考Wind32函数prototypes。
要获得文本的实际长度,使用WM_GETTEXT,
LB_GETTEXT或CB_GETLBTBTEXT消息或GetWindowText函数。
速查:Windows NT:3.1以上版本:Windows:95以上版本:Windows
CE:1.0以上版本;头文件:Winuser.h;库文件:user32.lib;Unicode:在Windows
NT上实现为山Unicode和ANSI两种版本。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
GetWindowThreadProcessld
函数功能:该函数返回创建指定窗口线程的标识和创建窗口的进程的标识符,后一项是可选的。
函数原型;DWORD GetWindowThreadProcessld(HWND hwnd,LPDWORD
lpdwProcessld);
参数:
hWnd:窗口句柄。
lpdwProcessld:接收进程标识的32位值的地址。如果这个参数不为NULL,GetWindwThreadProcessld将进程标识拷贝到这个32位值中,否则不拷贝。
返回值:返回值为创建窗口的线程标识。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0以上版本;头文件:winuser.h;库文件;user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
IsIconic
函数功能:该函数确定给定窗口是否是最小化(图标化)的窗口。
函数原型:BOOL IsIconic(HWND hWnd);
参数:
hWnd:被测试窗口的句柄。
返回值:如果窗口已图标化,返回值为非零;如果窗口未图标化,返回值为零。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:不支持;头文件:winuser.h;
库文件:user32.Iib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
isWindow
函数功能:该函数确定给定的窗口句柄是否识别一个已存在的窗口。
因数原型:BOOL isWindow(HWND hWnd);
参数:
hWnd:被测试窗口的句柄。
返回值:如果窗口句柄标识了一个已存在的窗口,返回值为非零;如果窗口句柄未标识一个已存在窗口,返回值为零。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0以上版本;头文件:winuserhs;库文件:User32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
lswindowUnicode
函数功能:该函数确定指定的窗口是否是一个本地Unicode窗口。
函数原型: BOOL lswindowUnicode(HWND hwndJ;
参数:
hWnd:被测试窗口的句柄。
返回值:如果窗口是一个本地Unicode窗口,返回值为非零;如果窗口不是一个本地Unicode窗口,返回值为零,同时说明窗口是一个ANSI窗口。
备注;一个窗口的字符集是由函数RegosterClass决定的。如果窗口类是以ANSI版的RegisterClass
(
RegjsterClassA)注册的,则窗口字符集是ANSI的;如果窗口类是以Unicode版的Registerclass(
RegisterClassW)注册的,则窗口字符集是Unicode。
系统为窗口消息自动作Unicode和ANSI的双向翻译。例如,如果一个使用Unicode字符集的窗口测到一个ANSI窗口消息,则系统在调用窗口过程之前先将该消息转换为Unicode消息。系统调用lsWindowUnicode函数决定是否翻译消息。
速查:Windows NT:3.1以上版本;Windows: 95以上版本;Windows
CE:不支持;头文件:Winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
IsWindowVisible
函数功能:该函数获得给定窗口的可视状态。;
函数原型:BOOL IsWindowVisible(HWND hWnd);
参数;
hWnd:被测试窗口的句柄。
返回值:如果指定的窗口及其父窗口具有WS_VISIBLE风格,返回值为非零;如果指定的窗口及其父窗口不具有WS_VISIBLE风格,返回值为零。由于返回值表明了窗口是否具有Ws_VISIBLE风格,因此,即使该窗口被其他窗口遮盖,函数返回值也为非零。
备注:窗口的可视状态由WS_VISIBLE位指示。当设置了WS_VISIBLE位,窗口就可显示,而且只要窗口具有WS_VISIBLE风格,任何画在窗口的信息都将被显示。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
IsZoomed
函数功能:该函数确定窗口是否是最大化的窗口。
函数原型:BOOL IsZoomed(HWND hWnd);
参数:
hWnd:被测试窗口的句柄。
返回值:如果窗口己最大化,则返回值为非零;如果窗口未最大化,则返回值为零。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:不支持;头文件:Winuer.h;库文件:User32.Iib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
MoveWindow
函数功能:该函数改变指定窗口的位置和尺寸。对于顶层窗口,位置和尺寸是相对于屏幕的左上角的:对于子窗口,位置和尺寸是相对于父窗口客户区的左上角坐标的。
函数原型:BOOL MoveWindow(HWND hWnd.int x.int y,intnWidth,int
nHeight,BOOL BRePaint);
参数:
hWnd:窗口句柄。
x:指定窗口的新位置的左边界。
Y:指定窗口的新位置的顶部边界。
nWidth:指定窗口的新的宽度。
nHaight:指定窗口的新的高度。
bRepaint:确定窗口是否被刷新。如果该参数为TRUE,窗口接收一个WM_PAINT消息;如果参数为FALSE,不发生任何刷新动作。它适用于客户区,非客户区(包括标题栏和滚动条),及由于移动子窗口而露出的父窗口的区域。如果参数为FALSE,应用程序就必须明确地使窗口无效或重画该窗口和需要刷新的父窗口。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
备注:如果bRepaint为TRUE,系统在窗口移动后立即给窗口过程发送WM_PAINT消息(即由MoveWindow函数调用UPdateWindow函数)。如果bRepaint
为FALSE,系统将WM_PAINT消息放在该窗口的消息队列中。消息循环只有在派遣完消息队列中的其他消息时才派遣WM_PAINT消息。
MoveWindow给窗口发送WM_WfNOWPOSCHANGING,WM_WINDOWPOSCHANGED,WM_MOVE,WM_SIZE和WM_NCCALCSIZE消息,
速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows
CE:1.0以上版本:头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= =
Openlcon
函数功能:该函数将一个最小化窗口恢复到原来的位置和尺寸并且激活该窗口。
函数原型:BOOL Openlcon(HWNDhWnd);
参数:
hWnd:被恢复与激活的窗口的句柄。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
备注:Openlcon向给出的窗口发送WM_QUERYOPEN消息。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:不支持:头文件:winuser.h;库文件:user32.lib。
SetForegroundWindow
函数功能:该函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。系统给创建前台窗口的线程分配的权限稍高于其他线程。
函数原型:BOOL SetForegroundWindow(HWND hWnd)
参数:
hWnd:将被激活并被调入前台的窗口句柄。
返回值:如果窗口设入了前台,返回值为非零;如果窗口未被设入前台,返回值为零。
备注:前台窗口是z序顶部的窗口,是用户的工作窗口。在一个多任务优先抢占环境中,应让用户控制前台窗口。
Windows NT
5.0:当用户在另一个窗口中工作时,应用程序不能强行设置一个窗口到前台。相反,SetForeground函数将会激活窗口并且调用FlashWindowEx函数通知用户。
Windows CE:拥有窗口的线程不具有优先启动权。
速查:Windows NT;3.1以上版本;Windows;95以上版本;Windows
CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = =
SetPalrent
函数功能:该函数改变指定子窗口的父窗口。
函数原型:HWND SetPalrent(HWND hWndChild,HWND hWndNewParent);
参数:
hWndChild:子窗口句柄。
hWndNewParent:新的父窗口句柄。如果该参数是NULL,则桌面窗口就成为新的父窗口。在WindowsNT5.0中,如果参数为HWND_MESSAGE,则子窗口成为消息窗口。
返回值:如果函数成功,返回值为子窗口的原父窗口句柄;如果函数失败,返回值为NULL。若想获得多错误信息,请调用GetLastError函数。
备注:应用程序可以使用SetParent函数来设置弹出式窗口,层叠窗口或子窗口的父窗口。新的窗口与窗口必须属于同一应用程序。
如果参数hWndChild标识的窗口是可见的,系统将执行适当的重画和刷新动作。
由于兼容的原因,对于将改变父窗口的子窗口,SetParent函数并不改变该子窗口的WS_CHILO
WS_POPUP风格。所以,如果hWndNewParent参数为NULL,就应在调用SetParent函数之后清空WS_CHILD位并且设置为WS_POPUP风格。相反的,如果hWndNewParent参数不为NULL并且在此之前窗口是桌面窗口的子窗口,就应在调用SetParent函数之前清空WS_POPUP位井设置WS_CHILD风格。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0以上版本:头文件:Winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = =
SetWindowLong
函数功能:该函数改变指定窗口的属性。函数也将在指定偏移地址的一个32位值存入窗口的额外窗口存。
函数原型:LONG SetWindowLong(HWN hWnd,int nlndex.LONG
dwNewLong);
参数:
hWnd:窗口句柄,及间接声明的该窗口所属的类。
nlndex:给出了要设置的值的零起点的偏移地址。有效值为从0到额外窗口存储空间的字节数一4。例如
如果指定了12位或更多位字节的额外内存,则32位值的索引值应为第3个32位值的索引位8。设置其他值,要指定下列中的一个值:
GWL_EXSTYLE;设置一个新的扩展窗口风格。GWL_STYLE:设置一个新的窗口风格。
GWL_WNDPROC:为窗口过程设置一个新的地址。
GWL_HINSTANCE:设置一个新的应用程序事例句柄。GWL_ID:为窗口设置一个新的标识。
GWL_USERDATA:设置与窗口有关的32位值。每个窗口都有一个对应的32位值供创建该窗口的应用程序使用。
当hWnd参数标识了一个对话框是可使用下列值的:
DWL_DLGPROC:设置对话框过程的新地址。
DWL_MSGRESULT:设置在对话框过程中处理的消息返回值。
DWL_USER:设置新的额外信息,该信息仅为应用程序所有,例如句柄或指针。
dWNewLong:指定替换值。
返回值:如果函数成功,返回值为给定的32位整数的原来的值。如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。
如果给定的32位值的原来的值是0,并且函数成功,则返回值为0。但是这时函数并不清除最后的错误信息,这就很难判断函数成功与否。这时,就应在调用SetWindowLong之前调用calingsetLastEm函数清除最后的错误信息。这样,如果函数失败就会返回0,并且GetLastError也返回一个非零值。
备注:如果由hWnd参数指定的窗口与调用线程不属于同一进程,将导致SetWindowLong函数失败。指定的窗日数据是在缓存中保存的,因此在调用SetWindowLong之后再调用SetWindowPos函数才O
SetWindowLong函数所作的改变生效。
如果使用带GWL_WNDPROC索引值的SetWindowLong函数替换窗口过程,则该窗日过程必须WindowProc回调函数说明部分指定的指导行一致。
如果使用带DWL_MSGRESULT索引值的SetWlndowLong函数来设置由一个对话框处理的消息的和值,应在此后立即返回TRUE。否则,如果又调用了其他函数而使对话框过程接收到一个窗口消息,返回值:如果函数成功,返回值为给定的32位整数的原来的值。如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。
如果给定的32位值的原来的值是0,并且函数成功,则返回值为0。但是这时函数并不清除最后的错误信息,这就很难判断函数成功与否。这时,就应在调用SetWindowLong之前调用calingsetLastEm函数清除最后的错误信息。这样,如果函数失败就会返回0,并且GetLastError也返回一个非零值。
备注:如果由hWnd参数指定的窗口与调用线程不属于同一进程,将导致SetWindowLong函数失败。
指定的窗口数据是在缓存中保存的,因此在调用SetWindowLong之后再调用SetWindowPos函数才O
SetWindowLong函数所作的改变生效。
如果使用带GWL_WNDPROC索引值的SetWindowLong函数替换窗口过程,则该窗日过程必须WindowProc回调函数说明部分指定的指导行一致。
如果使用带DWL_MSGRESULT索引值的SetWlndowLong函数来设置由一个对话框处理的消息的和值,应在此后立即返回TRUE。否则,如果又调用了其他函数而使对话框过程接收到一个窗口消息,套的窗口可能消息可能改写使用DWL_MSGRESULT设定的返回值。
可以使用带GWL_WNDPROC索引值的SetWindowLohg函数创建一个窗口类的子类,该窗口类是用于创建该窗口的类。一个应用程序可以一个系统类为子类,但是不能以一个其他进程产生的窗口类为于类。
SetWindowLong函数通过改变与一个特殊的窗口类相联系的窗口过程来创建窗口子类。从而使系统调用新的窗口过程而不是以前定义的窗口过程。应用程序必须通过调用CallWindowProc函数向前窗口传递未被新窗口处理的消息。允许应用程序创建一个窗口过程链。可以通过对RegisterClassEx函数中使用的WNDCLASSEX结构的chWndExtra单元指定一个非零值来保留额外窗口内存。
不能通过调用带GWL_HWNDPARENT索引值的SetWindowLong的函数来改变子窗口的父窗口。应使用SetParent函数。
WindowsCE:nlndex参数必须是4个字节的倍数;不支持Unaligned access。
不支持下列nlndex参数值:
GWL_HINSTANCE;GWL_HWNDPARENT;GWL_USERDATA
WindowsCE2.0版支持在索引参数中的DWL_DLGPROC值,但是WindowsCE1.0不支持。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0以上版本:库文件:user32.lib;
Unicode;在Windows NT上实现为Unicode和ANSI两种版本。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = =
SetwlndowPlacement
函数功能:该函数设置指定窗口的显示状态和恢复,最大化,最小化位置。
函及原型;BOOL SetwlndowPlacement(HWND hWnd,CONST
WINDOWPLACEMENT★lpwndpl);
参数:
hWnd:窗口句柄。
lpwndpl:指向一个WINDOWPLACEMWNT结构的指针,该结构给出了新的显示状态和窗口位置。
在调用函数SetWindowPlacement之前,将WINDOWPLACEMWNT结构的长度单元置为sizeof(WINDOWPLACEMENT)。如果lpwndpl->length设置不正确,函数SetWindowPlacement将失败。
返回值:如果函数成功,返回值为非零。如果函数失败,返回值为零。若想获得更多错误信息,请调用callGetLastErro函数。
备注:如果在WIDNOWPLACEMENT中指定的信息使窗口完全显示在屏幕之外,系统自动调整坐标以使窗口可见,兼顾屏幕设置和多种监视器配置。
WINDOWPLACEMENT的长度成员信息设置为sizeof(WINDOWPLACEMENT),如果设置不正确,函数将返回FLASE。查看窗口位置坐标的信息,参看WINDOWPLACEMENT。
速查:Windows NT:3.1以上版本;Windows;95以上版本;Windows
CE:不支持;头文件;winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = =
SetWindowPos
函数功能:该函数改变一个子窗口,弹出式窗口式顶层窗口的尺寸,位置和Z序。子窗口,弹出式窗口,及顶层窗口根据它们在屏幕上出现的顺序排序、顶层窗口设置的级别最高,并且被设置为Z序的第一个窗口。
函数原型:BOOL SetWindowPos(HWN hWnd,HWND hWndlnsertAfter,int
X,int Y,int cx,int
cy,UNIT.Flags);
参数:
hWnd:窗口句柄。
hWndlnsertAfter:在z序中的位于被置位的窗口前的窗口句柄。该参数必须为一个窗口句柄,或下列值之一:
HWND_BOTTOM:将窗口置于Z序的底部。如果参数hWnd标识了一个顶层窗口,则窗口失去顶级位置,并且被置在其他窗口的底部。
HWND_DOTTOPMOST:将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。如果窗口己经是非顶层窗口则该标志不起作用。
HWND_TOP:将窗口置于Z序的顶部。
HWND_TOPMOST:将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。
查看该参数的使用方法,请看说明部分。
x:以客户坐标指定窗口新位置的左边界。
Y:以客户坐标指定窗口新位置的顶边界。
cx:以像素指定窗口的新的宽度。
cy:以像素指定窗口的新的高度。
uFlags:窗口尺寸和定位的标志。该参数可以是下列值的组合:
SWP_ASNCWINDOWPOS:如果调用进程不拥有窗口,系统会向拥有窗口的线程发出需求。这就防止调用线程在其他线程处理需求的时候发生死锁。
SWP_DEFERERASE:防止产生WM_SYNCPAINT消息。
SWP_DRAWFRAME:在窗口周围画一个边框(定义在窗口类描述中)。
SWP_FRAMECHANGED:给窗口发送WM_NCCALCSIZE消息,即使窗口尺寸没有改变也会发送该消息。如果未指定这个标志,只有在改变了窗口尺寸时才发送WM_NCCALCSIZE。
SWP_HIDEWINDOW;隐藏窗口。
SWP_NOACTIVATE:不激活窗口。如果未设置标志,则窗口被激活,并被设置到其他最高级窗口或非最高级组的顶部(根据参数hWndlnsertAfter设置)。
SWP_NOCOPYBITS:清除客户区的所有内容。如果未设置该标志,客户区的有效内容被保存并且在窗口尺寸更新和重定位后拷贝回客户区。
SWP_NOMOVE:维持当前位置(忽略X和Y参数)。
SWP_NOOWNERZORDER:不改变z序中的所有者窗口的位置。
SWP_NOREDRAW:不重画改变的内容。如果设置了这个标志,则不发生任何重画动作。适用于客户区和非客户区(包括标题栏和滚动条)和任何由于窗回移动而露出的父窗口的所有部分。如果设置了这个标志,应用程序必须明确地使窗口无效并区重画窗口的任何部分和父窗口需要重画的部分。
SWP_NOREPOSITION;与SWP_NOOWNERZORDER标志相同。
SWP_NOSENDCHANGING:防止窗口接收WM_WINDOWPOSCHANGING消息。
SWP_NOSIZE:维持当前尺寸(忽略cx和Cy参数)。
SWP_NOZORDER:维持当前Z序(忽略hWndlnsertAfter参数)。
SWP_SHOWWINDOW:显示窗口。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误消息,请调用GetLastError函数。
备注:如果设置了SWP_SHOWWINDOW和SWP_HIDEWINDOW标志,则窗口不能被移动和改变大小。如果使用SetWindowLoog改变了窗口的某些数据,则必须调用函数SetWindowPos来作真正的改变。使用下列的组合标志:SWP_NOMOVEISWP_NOSIZEISWP_FRAMECHANGED。
有两种方法将窗口设为最顶层窗口:一种是将参数hWndlnsertAfter设置为HWND_TOPMOST并确保没有设置SWP_NOZORDER标志;另一种是设置窗口在Z序中的位置以使其在其他存在的窗口之上。当一个窗口被置为最顶层窗口时,属于它的所有窗口均为最顶层窗口,而它的所有者的z序并不改变。
如果HWND_TOPMOST和HWND_NOTOPMOST标志均未指定,即应用程序要求窗口在激活的同时改变其在Z序中的位置时,在参数hWndinsertAfter中指定的值只有在下列条件中才使用:
在hWndlnsertAfter参数中没有设定HWND_NOTOPMOST和HWND_TOPMOST标志。
由hWnd参数标识的窗口不是激活窗口。
如果未将一个非激活窗口设定到z序的顶端,应用程序不能激活该窗口。应用程序可以无任何限制地改变被激活窗口在Z序中的位置,或激活一个窗口并将其移到最高级窗口的顶部或非最高级窗口的顶部。
如果一个顶层窗口被重定位到z序的底部(HWND_BOTTOM)或在任何非最高序的窗口之后,该窗口就不再是最顶层窗口。当一个最顶层窗口被置为非最顶级,则它的所有者窗口和所属者窗口均为非最顶层窗口。
一个非最顶端窗口可以拥有一个最顶端窗口,但反之则不可以。任何属于顶层窗口的窗口(例如一个对话框)本身就被置为顶层窗口,以确保所有被属窗口都在它们的所有者之上。
如果应用程序不在前台,但应该位于前台,就应调用SetForegroundWindow函数来设置。
Windows
CE:如果这是一个可见的顶层窗口,并且未指定SWP_NOACTIVATE标志,则这个函数将激活窗口、如果这是当前的激活窗口,并且指定了SWP_NOACTIVATE或SWP_HIDEWINDOW标志,则激活另外一个可见的顶层窗口。
当在这个函数中的nFlags参数里指定了SWP_FRAMECHANGED标志时,WindowsCE重画窗口的整个非客户区,这可能会改变客户区的大小。这也是重新计算客户区的唯一途径,也是通过调用SetwindowLong函数改变窗口风格后通常使用的方法。
SetWindowPos将使WM_WINDOWPOSCHANGED消息向窗口发送,在这个消息中传递的标志与传递给函数的相同。这个函数不传递其他消息。
Windows CE
1.0不支持在hWndlnsertAber参数中的HWND_TOPMOST和HWND_NOTOPMOST常量。
Windows CE1.0不支持在fuFags参数中的SWP_DRAWFRAME和SWP_NOCOPYBITS标志。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0以上版本;头文件:winuser.h库文件:eser32lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = =
SetWindowText
函数功能:该函数改变指定窗口的标题栏的文本内容(如果窗口有标题栏)。如果指定窗口是一个控制,则改变控制的文本内容。然而,SetWindowText函数不改变其他应用程序中的控制的文本内容。
函数原型:BOOL SetWindowText(HWND hwnd,LPCTSTR lpStrjng);
参数:
hWnd:要改变文本内容的窗口或控制的句柄。
lpString:指向一个空结束的字符串的指针,该字符串将作为窗口或控制的新文本。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
备注:如果目标窗口属于当前进程,SetWindowText函数会使WM_SETTEXT消息发送给指定的窗口或控制。然而,如果控制是以WS_CAPTION风格创建的列表框控制,SetWindowText函数将为控制设置文本,而不是为列表项设置文本。
SetWindowText函数不扩展tab字符(ASCII代码0×09),Tab字符以字符‘}’来显示。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0以上版本;头文件;winuser.h;库文件:user32.lib;Unicode:Windows
NT上实现为Unicode和ANSI两种版本。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = =
ShowOwnedPopups
函数功能:该函数显示或隐藏属于指定窗口的所有弹出式窗口。
函数原型:BOOL ShowOwnedPopups(HWND hWnd;BOOL fshow);
参数:
hWnd:拥有弹出式窗口的窗口句柄,这些弹出式窗口将被显示或隐藏。
fShow:指明弹出式窗口是被显示还是隐藏。如果该参数为TRUE,则所有隐藏的弹出式窗口均被显示;如果该参数为FALSE,则所有显示的弹出式窗口均被隐藏。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
备注:ShowOwnedPopups函数仅显示由以前调用ShowOwnedPopups隐藏的窗口。例如,如果弹出式窗口由调用ShowWinodw函数隐藏,则在随后调用ShowOwnedPopups(将fShow参数置为TRUE)并不能使窗口显示出来。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:不支持;头文件:Winuser.h;库文件:user32.Lib
= = = = = = = = = = == = = = = = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = =
ShowWindow
函数功能:该函数设置指定窗口的显示状态。
函数原型:BOOL ShowWindow(HWND hWnd,int nCmdShow);
参数:
hWnd:窗口句柄。
nCmdShow:指定窗口如何显示。如果发送应用程序的程序提供了STARTUPINFO结构,则应用程序第一次调用ShowWindow时该参数被忽略。否则,在第一次调用ShowWindow函数时,该值应为在函数WinMain中nCmdShow参数。在随后的调用中,该参数可以为下列值之一:
SW_FORCEMINIMIZE:在WindowNT5.0中最小化窗口,即使拥有窗口的线程被挂起也会最小化。在从其他线程最小化窗口时才使用这个参数。
SW_MIOE:隐藏窗口并激活其他窗口。
SW_MAXIMIZE:最大化指定的窗口。
SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一个顶层窗口。
SW_RESTORE:激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。
SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口。
SW_SHOWDEFAULT:依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态,STARTUPINFO
结构是由启动应用程序的程序传递给CreateProcess函数的。
SW_SHOWMAXIMIZED:激活窗口并将其最大化。
SW_SHOWMINIMIZED:激活窗口并将其最小化。
SW_SHOWMINNOACTIVATE:窗口最小化,激活窗口仍然维持激活状态。
SW_SHOWNA:以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。
SW_SHOWNOACTIVATE:以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。
SW_SHOWNOMAL:激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志。
返回值:如果窗口以前可见,则返回值为非零。如果窗口以前被隐藏,则返回值为零。
备注:应用程序第一次调用ShowWindow时,应该使用WinMain函数的nCmdshow参数作为它的nCmdShow参数。在随后调用ShowWindow函数时,必须使用列表中的一个给定值,而不是由WinMain函数的nCmdSHow参数指定的值。
正如在nCmdShow参数中声明的,如果调用应用程序的程序使用了在STARTUPINFO结构中指定的信息来显示窗口,则在第一次调用ShowWindow函数时nCmdShow参数就被忽略。在这种情况下,ShowWindow函数使用STARTUPINFO结构中的信息来显示窗口。在随后的调用中,应用程序必须调用ShowWindow
函数(将其中nCmdShow参数设为SW_SHOWDEFAULT)来使用由程序调用该应用程序时提供的启动信息。这个处理在下列情况下发生:
应用程序通过调用带WS_VISIBLE标志的函数来创建它们的主窗口函数;
应用程序通过调用清除了WS_VISIBLE标志的CteateWindow函数来创建主窗口函数,并且随后调用带SW_SHOW标志的ShowWindow函数来显示窗口;
Windows CE:nCmdShow参数不支持下列值:
SW_MAXIMINZE;SW_MINIMIZE;SW_RESTORE;SW_SHOWDEFAULT
SW_SHOWMAXIMIZED;SW_SHOWMINIMIZED;SW_SHOWMININOACTIVATE
速查:Windows NT:3.1以上版本;Windows:95以上版本:Windows
CE:1.0以上版本;头文件:winuw库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = =
ShowWindowAsync
函数功能:该函数设置由不同线程产生的窗口的显示状态。
函数原型:BOOL ShowWindowAsync(HWND hWnd,int nCmdshow);
参数:
hWnd:窗口句柄。
nCmdShow:指定窗口如何显示。查看允许值列表,请查阅ShowWlndow函数的说明部分。
返回值:如果函数原来可见,返回值为非零;如果函数原来被隐藏,返回值为零。
备注:这个函数向给定窗口的消息队列发送show-window事件。应用程序可以使用这个函数避免在等待一个挂起的应用程序完成处理show-window事件时也被挂起。
速查:Windows NT:4.0以上版本;Windows:95以上版本;Windows
CE:不支持;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = =
TileWindows
函数功能:该函数并到显示指定父窗口的各指定子窗口。
函数原型;WORD WINAPI TileWindows(HWND hWndParent,UNIT
wHow,CONST RECT
★IpRect,UNIT cKidS;ConHWND FAR ★lpKidS);参数:
hWndParent: 窗口句柄。如果该参数为NULL,则假定为桌面窗口。
wHow:指定不参加安排的窗口类型,及是水平并到显示还是或垂直并到显示。该参数可以为下列值之一,可以选择与MDITILE_SKIPDISABLED组合以防止停用的的MDI的子窗口被并到显示:
MDITILE_HORIZONAL:水平并到显示窗口。MDITILE_VERTICAL:垂直并到显示窗口。
IpRect:指向RECT结构的指针,该结构以客户坐标定义矩形区域,在这个区域内排列窗口。如果该参数为NULL,则使用父窗口的客户区。
cKids:指出在lpKidS参数中给出的数组的成员个数。如果lpKids为NULL则该参数被忽略。
lpKids:指向被排列的子窗口的句柄数组的指针。如果该参数为NULL,则指定窗口(或桌面窗口)的所有子窗口均被排列。
返回值:如果函数成功,返回值是被安排的窗口数目;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
备注:调用TileWindows函数使所有最大化的窗口恢复到原来的尺寸。
速查:Windows NT:4.o以上版本;Windows:95以上版本;Windows
CE:不支持;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = =
WindowFromPoint
函数功能:该函数获得包含指定点的窗口的句柄。
函数原型:HWND WindowFromPoint(POINT Point);
参数:
Point:指定一个被检测的点的POINT结构。
返回值S:返回值为包含该点的窗口的句柄。如果包含指定点的窗口不存在,返回值为NULL。如果该点在静态文本控制之上,返回值是在该静态文本控制的下面的窗口。
备注:WindowFromPoint函数不获取隐藏或禁止的窗口句柄,即使点在该窗口内。应用程序应该使用ChildWindowFromPoint函数进行无限制查询。
速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows
CE:1.0以上版本:头文件:Winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = =
WinMain
函数功能:该函数被系统调用,作为一个32位应用程序的入口点。
函数原型:int WINAPI WinMain(HINSTANCEE hlnstance,HINSTANCE
hPrelnstance,LPSTR
lpCmdLine,int nCmdShow);
参数;
hinstance:应用程序当前事例的句柄。
hPrelnstance:应用程序的前事例的句柄。对于一个32的位程序,该参数总为NULL。
如果需要检测另外一个事例是否已经存在,则使用CreateMutex函数创建一个独一无二的名字。即使互斥名已经存在,CreateMutex函数也是成功的,但是GetLastError函数将返回
ERROR_ALREADY_EXISTS,这就表明在应用程序中有另外一个事例存在,因为它首先创建了互斥名。
lpCmdLine:指向应用程序命令行的空字符串的指针,不包括函数名。获得整个命令行,参看GetCommandLine。
nCmdShow:指明窗口如何显示。该参数可以是下列值之一:
SW_HIOE:隐藏窗口并且激活另外一个窗口。
SW_MINIMIZE:最小化指定的窗口,并且激活在系统表中的顶层窗口。
SW_RESTORE:激活并显示窗口。如果窗口已经最小化或最大化,系统将以恢复到原来的尺寸和位置显示窗口(与SW_SHOWNORMAL相同)。
SW_SHOW:激活一个窗口并以原来的尺寸和位置显示窗口。
SW_SHOWMAXIMIZED:激活窗口并且将其最大化。
SW_SHOWMINIMIZED:激活窗口并将其目标化。
SW_SHOWMINNOACTIVE:将一个窗口显示为图标。激活窗口维持活动状态。
SW_SHOWNA:以窗口的当前状态显示窗口。激活窗口保持活动状态。
SW_SHOWNOACTIVATE:以窗口的最近一次的尺寸和位置显示窗口。激活窗口维持激活状态。
SW_SHOWNORMAL:激活并显示窗口。如果窗口最大化或最小化,系统将其恢复到原来的尺寸和位置(与SW_RESTORE相同)。
返回值:如果函数成功,当它接收到一个WM_QUIT消息时就中止,函数应该返回在该消息的wParam参数的退出值。如果函数在进入消息循环时退出,应该返回零。
备注:WinMain函数应初始化应用程序,显示主窗口,进入一个消息接收一发送循环,这个循环是应用程序执行的其余部分的顶级控制结构。当接收到一个WM_QUIT消息时,程序就中止。这时,WinMain函数应退出应用程序,并且返回传递给WM_QUIT消息的wParam参数的值。如果由于调用PostQuitMessage函数而接收到WM_QUIT消息,wParam的值是PostQuiMessage函数的nExitCode的值。请参看“创建一个窗口循环”。
ANSI应用程序可以使用WinMain函数的lpCmdLine参数进入命令行字符串(除了程序名之外)。WinMain不能返回Unicode字符串的原因是IpCmdLine使用的是LPSTR数据类型,而不是LPTSTR类型。GetCommandLine函数可以用于进入命令行的Unicode字符串,因为它使用的是LPTSTR类型。
Windows CE:Windows CE不支持下列 nCmdLine参数值:
SW_MINIMIZE;SW_RESTORE;SW_RESTORE;SW_SHOWMAXMIZED
SW_SHOWMINIMIZED;SW_SHOWMINNOACTIVE
速查:Windows NT:3.1以上版本;Windows:95以上版本:Windows
CE:1.0以上版本;头文件:Winbase.h库文件:用户自定义。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = =
AnyPopup
函数功能:该函数指出一个被属窗口,可见窗口,顶级弹出窗口,或层叠窗日是否在屏幕上存在。这个函数搜索整个屏幕,而不仅仅搜索应用程序的客户区。
函数原型:BOOL AnyPopup(VOID)
参数:无。
返回值:如果一个弹出式窗口存在,返回值为非零,即使该窗口被其他窗口完全覆盖。如果弹出式窗口不存在,返回值为零。
备注:函数不检测无所属关系的弹出式窗口,或无WS_VISIBLE设置位的窗口。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:不支持;头文件:winuser.h;库文件:USer32.lib。
= = = = = = = = = = = = = = = = = = = = = == = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = =
GetClasslnfoEx
函数功能:该函数获得有关窗口类的信息,包括与窗口类相关的小图标的句柄的信息。GetClasslnfo函数不检索小图标的句柄。
函数原型:BOOL GetClasslnfoEx(HINSTANCE hlnst,LPCTSTR
lpszClass,LPWNDCLASSEX
lpwcx);
参数:
hlnst:创建类的应用程序的事例的句柄。获得由系统定义的类(如按钮或列表框)的信息,设置该参数为NULL。
IpszClass :指向一个包含类名的空结束的字符串的指针。类名必须为事先己注册的类,或是由此前调用
RegisterClaaEx
函数注册的类。或者还可以是一个整型数,如果参数是一个整型数,它必须是由以前调用GlobaAdd原子函数创建的全局原子。这个16位整型数小于OXCOOO,必须是lpszClassS的低16位,其高位字为
0。
Ipwcx:指向接收类信息的WNDCLASSEX结构的指针。
返回值:如果函数未发现一个匹配的类,并且成功地拷贝了数据,则返回值为0。若想获得更多错误信息,请调用
GetLastError函数。
速查:Windows NT:35以上版本;Windows:95以上版本:Windows
CE:不支持;头文件:winuser.h;库文件:user32.lib;Unicode: 在Windows NT
上实现为Unicode和ANSI两种版本。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
GetClassLong
函数功能:该函数返回与指定窗口相关的WNDCLASSEX结构的指定32位值。
函数原型:DWORD GetClassLong(HWND hWnd,int nlndex);
参数:
hWnd:窗口句柄间接给出的窗口所属的类。
nlndex:指定要恢复的32位值。从额外的类存储空间恢复一个32位的值,指定的一个大于等于0的被恢复值的偏移量。有效值为从0开始到额外类存储空间字节数一4。例如,若指定了12位或多于12位的额外类存储空间,则应设为第三个32位整数的索引位8。要从WNDCLASSEX结构中恢复任何值,需要指定下面值之一:
GCSW原子:获得一个唯一标识窗口类的原子值,该值与RegisterClassEx函数的返回值相同。
GCL_CBWNDEXTRA:获得与类中的每个窗口相关的额外窗口中内存空间的字节大小,进入该存储空间的方法请参看GetWindwoLong。
GCL_HBRBACKGROUND:获得与类有关的背景刷子的句柄。
GCL_HCURSOR:获得与类有关的光标的句柄。
GCL_HICON:获得与类有关的图标的句柄。
GCL_HICONSM:获得与类有关的小图标的句柄。
GCL_HMOUDLE:获得注册该类的模块的句柄。
GCL_MENUNAME:获得菜单名字符串的地址,该字符串标识了与类有关的菜单资源。
GCL_STYLE:获得窗口类的风格位。
GCL_WNDRPOC:获得与类有关的窗口过程的地址。
返回值:如果函数成功,返回值是所需的32位值;如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。
备注:通过使用函数RegisterClassEx将结构WNDCLASSEX中的cbCIsExtra单元指定为一个非O值来保留额外类的存储空间。Windows
CE:nlndex参数是一个字节偏移量,但是必须为 4的倍数。Windows CE不支持unaligned
access。nlndex参数中只可设定为GCL_HICON和GCL_STYLE。如果使用了Windows CE的
lconsurs组件,该组件支持在适当的目标平台上的鼠标,也可以在nlndex中使用GCL_HCURSOR。 注意支持鼠标的
Windows CE版本包含
Iconcurs和 Mcursor而不是 Icon和 Cursor组件。
速查:Wiodows NT:3.1以上版本;Windows:95以上版本:Windows
CE:1.0以上版本:头文件:Winuser.h;库文件:USer32.lib:Unicode:在 Windows
NT上实现为
Unicode和ANSI两种版本。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = GetClassName
函数功能:该函数获得指定窗口所属的类的类名。
函数原型:Int GetClassName(HWND hWnd,LPTSTR IpClassName int
nMaxCount);参数:
hWnd:窗口的句柄及间接给出的窗口所属的类。
IpClassName:指向接收窗口类名字符串的缓冲区的指针。
nMaxCount:指定由参数lpClassName指示的缓冲区的字节数。如果类名字符串大于缓冲区的长度,则多出的部分被截断。
返回值:如果函数成功,返回值为拷贝到指定缓冲区的字符个数:如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。
速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows
CE1.0以上版本;头文件:winuser.h库文件:user32.lib; Unicode:在 Windows
NT上实现为 Unicode和
ANSI两种版本。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = =
GetWindowLong
函数功能:该函数获得有关指定窗口的信息,函数也获得在额外窗口内存中指定偏移位地址的32位度整型值。
函数原型:LONG GetWindowLong(HWND hWnd,int nlndex);
参数:
hWnd:窗口句柄及间接给出的窗口所属的窗口类。
nlndex:指定要获得值的大于等于0的值的偏移量。有效值的范围从0到额外窗口内存空间的字节数一4例如,若指定了12位或多于12位的额外类存储空间,则应设为第三个32位整数的索引位8。要获得任意其他值,指定下列值之一:
GWL_EXSTYLE;获得扩展窗日风格。
GWL_STYLE:获得窗口风格。
GWL_WNDPROC:获得窗口过程的地址,或代表窗口过程的地址的句柄。必须使用GWL_WNDPROC函数调用窗口过程。
GWL_HINSTANCE:获得应用事例的句柄。
GWL_HWNDPAAENT:如果父窗口存在,获得父窗口句柄。
GWL_ID:获得窗口标识。
GWL_USERDATA:获得与窗口有关的32位值。每一个窗口均有一个由创建该窗口的应用程序使用的32位值。
在hWnd参数标识了一个对话框时也可用下列值:
DWL_DLGPROC:获得对话框过程的地址,或一个代表对话框过程的地址的句柄。必须使用函数CallWindowProc来调用对话框过程。
DWL_MSGRESULT:获得在对话框过程中一个消息处理的返回值。
DWL_USER:获得应用程序私有的额外信息,例如一个句柄或指针。
返回值:如果函数成功,返回值是所需的32位值;如果函数失败,返回值是0。若想获得更多错误信息请调用
GetLastError函数。
备注:通过使用函数RegisterClassEx将结构WNDCLASSEX中的cbWndExtra单元指定为一个非0值来保留额外类的存储空间。
Windows CE:nlndex参数指定的字节偏移量必须为 4的倍数。不支持 unaligmned access。
Windows CE:不支持在参数nlndex中设定的GWL_HINSTANCE和GWL_HWNDPARENT。
Windows CE1.0也不支持在 nlndex参数中的 DWL_DLGPROC和 GWL_USERDATA。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0对以上版本;头文件:winuser.h;库文件:user32.lib;在Windows
NT上实现为Unicode和ANSI两种版本。
= = = = = = = = = = = = == = = = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = =
RegisterClassEX
函数功能:该函数为随后在调用Createwindow函数和CreatewindowEx函数中使用的窗口注册一个窗口类。
函数原型:ATON RegisterClassEX(CONST WNDCLASSEX★Ipwcx);
参数:
Ipwcx:指向一个WNDCLASSEX结构的指针。在传递给这个函数之前,必须在结构内填充适当的类的属性返回值:如果函数成功,返回值是唯一识别被注册类的一个原于;如果函数失败,返回值为0。若想获得更多错误信息,请调用callGetLastError函数。
备注:如果使用RegisterClassEx来注册窗口类,应用程序通知系统被注册类的窗回的消息使用ANSI字符集的文本和字符参数;如果使用RegisterClassExW来注册窗口类,应用程序需要系统以Unicode来传递消息的文本参数。IsWindowUnicode函数使应用程序可以查询每一个窗口的字符特征。参看
Win32 API中的ANSI和Unicode函数,请查阅 Functiont prototype(函数原型)。
应用程序注册的所有的窗口类在应用程序中止后都为未注册的类。
Windows 95:所有由DLL注册的类在DLL卸载后均未注册的类。
Windows NT:所有由DLL注册的类在DLL卸载后仍为已注册的类。
Windows
95:如果WNDCLASSEX结构中的cbWndEXtra或cbCIsEXtra单元包含字节数超过40个字节,则RegisterClassEx将失败。
速查:Windows NT:4.0以上版本;Windows:95以上版本;Windows
CE:不支持:头文件:winuser.h;库文件:user32.lib; Unicode:在 Windows NT上实现为
Unicode和 ANSI两种版本。
= = = = = = = = = = = = = == = = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = =
SetClassLong
函数功能:该函数替换在额外类存储空间的指定偏移地址的32位长整型值,或替换指定窗口所属类的WNDCLASSEX结构。
函数原型:DWORD SetClassLong(HWND hWnd,int nlndex,LONG
dwNewLong);
参数:
hWnd:窗口句柄及间接给出的窗口所属的类。
nlndex:指定将被替换的32位值。在额外类存储空间中设置32位值,应指定一个大于或等于0的偏移量。
有效值的范围从0到额外类的存储空间的字节数一4;例如,若指定了12位或多于12位的额外类存储空间,则应设为第三个32位整数的索引位8。要设置WNDCLASSEX结构中的任何值,指定下面值之一:
GCL_CBCLSEXTRA:设置与类相关的尺寸的字节大小。设定该值不改变己分配的额外字节数。
GCL_CBWNDEXTRA:设置与类中的每一个窗口相关的尺寸的字节大小。设定该值不改变已分配额外字节数。查看如何进入该内存,参看SetWindowLOng。
GCL_HERBACKGROUND:替换与类有关的背景刷子的句柄。
GCL_HCURSOR:替换与类有关的光标的句柄。GCL_HICON:替换与类有关的图标的句柄。
GCL_HMODULE:替换注册类的模块的句柄。GCL_STYLE:替换窗口类的风格位。
CGL_MENUNAME :替换菜单名字符串的地址。该字符串标识与类有关的菜单资源。
GCL_WNDPROC :替换与窗口类有关的窗口过程的地址。
dwNewLong:指定替换值。
返回值:如果函数成功,返回值是指定的32位整数的原来的值;如果未事先设定,返回值为0。如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。
备注;如果使用SetClassLong函数和GCL_WNDPROC索引值来替换窗口过程,窗口过程必须与WindowProccallback函数中的描述的guideline一致。
以带GCL_WNDPROC索引值的SetClassLong函数创建的一个窗口类的的子类将会影响所有随后以该类创建的窗口。应用程序可以创建一个系统类的子类,但是不能创建由其他进程创建的类的子类。
通过使用RegisterClassEx函数将WNDCLASSEX结构中的cbWndExtra单元指定为一个非零值来保留额外的的类存储空间。
小心使用SetClassLong函数。例如,可以通过使用SetClassLong来改变类的背景颜色,但是这个改变Windows
CE:nlndex参数是一个字节偏移量但必须是4的倍数。Unaligned不支持。
不支持在nlndex参数中的标准的CGL_★值,只有一个例外,如果目标设各支持鼠标,则可以在nlndex参数中指定CGL_HCURSOR。
注意支持鼠标的WindowsCE版本包含Iconcurs和Mcursor组件而不是lcon和Cursor组件。
速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows
CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT
上实现为Unicode和ANSI两种版本。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = SetWindowLong
函数功能:该函数改变指定窗口的属性.函数也将指定的一个32位值设置在窗口的额外存储空间的指定偏移位置。
函数原型:LONG SetWindowLong(HWND hWnd,int nlndex,LONG
dwNewLong);
参数:
hWnd:窗口句柄及间接给出的窗口所属的类。
nlndex:指定将设定的大于等于0的偏移值。有效值的范围从0到额外类的存储空间的字节数-4:例如若指定了12位或多于12位的额外类存储空间,则应设为第三个32位整数的索引位8。要设置其他任何值,可以指定下面值之一:
GWL_EXISTYLE:设定一个新的扩展风格。GWL_STYLE:设定一个新的窗口风格。
GWL_WNDPROC:为窗口过程设定一个新的地址。GWL_ID:设置一个新的窗口标识符。
GWL_HINSTANCE:设置一个新的应用程序事例句柄。
GWL_USERDATA:设置与窗口有关的32位值。每一个窗口均有一个由创建该窗口的应用程序使用的32位值。
当hWnd参数标识了一个对话框时,也可使用下列值:
DWL_DLGPROC:设置对话框过程的新地址。
DWL_MSGRESULT:设置在对话框过程中处理的消息的返回值。
DWL_USER:设置的应用程序私有的新的额外信息,例如一个句柄或指针。
dwNewLong:指定的替换值。
返回值:如果函数成功,返回值是指定的32位整数的原来的值。如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。
如果指定32位整数的原来的值为0,并且函数成功,则返回值为0,但是函数并不清除最后的错误信息,这就很难判断函数是否成功。这时,就应在调用SetWindowLong之前调用callingSetLastError(0)函数来清除最后的错误信息。这样,如果函数失败就会返回0,并且GetLastError。也返回一个非零值。
备注;如果由hWnd参数指定的窗口与调用线程不属于同一进程,将导致SetWindowLong函数失败。
指定的窗口数据是在缓存中保存的,因此在调用SetWindowLong之后再调用SetWindowPos函数才能使SetWindowLong函数所作的改变生效。
如果使用带GWL_WNDPROC索引值的SetWindowLong函数替换窗口过程,则该窗口过程必须与WindowProccallback函数说明部分指定的指导行一致。
如果使用带DWL_MSGRESULT索引值的SetWindowLong函数来设置由一个对话框过程处理的消息的返回值,应在此后立即返回TRUE。否则,如果又调用了其他函数而使对话框过程接收到一个窗口消息,则嵌套的窗口消息可能改写使用DWL_MSGRESULT设定的返回值。
可以使用带GWL_WNDPROC索引值的SetWindowLong函数创建一个窗口类的子类,该窗口类是用于创建该窗口的关。一个应用程序可以一个系统美为于类,但是不能以一个其他进程产生的窗口类为子类,SetwindowLong函数通过改变与一个特殊的窗口类相联系的窗口过程来创建窗口子类,从而使系统调用新的窗口过程而不是以前定义的窗口过程。应用程序必须通过调用CallWindowProc函数向前窗口传递未被新窗口处理的消息,这样作允许应用程序创建一个窗口过程链。
通过使用函数RegisterClassEx将结构WNDCLASSEX中的cbWndExtra单元指定为一个非0值来保留新外窗口内存。
不能通过调用带GWL_HWNDPARENT索引值的SetWindowLong的函数来改变子窗口的父窗口,应使用SetParent函数。
Windows CE:nlndex参数必须是4个字节的倍数不支持unaligned access。
不支持下列nlndex参数值:。
GWL_HINSTANCE;GWL_HWNDPARENTGWL;GWL_USERDATA
Windows CE
2.0版支持在nlndex参数中的DWL_DLGPROC值,但是WindowsCE1.0不支持。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0以上版本:头文件:winuser.h;库文件:user32.lib;Unicode:在Windows
NT上实现为Unicode和ANSI两种版本。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = =
UnRegisterClass
函数功能:该函数删除一个窗口类,清空该类所需的内存。
函数原型:BOOL UnRegisterClass(LPCTSTR IpClassName; HINSTANCE
hlnstance);
参数:
IpClassName:指向一个空结束字符串的指针,或是一个整型原子。如果IpClassName是一个字符串,则它指定了窗口类的类名。这个类名必须由此前调用RegisterClassEx函数来注册。系统类,如对话框控制,必须被注册。
如果这个参数是一个整型原子,它必须是由此前调用GlobalAdd原子函数创建的全局原子。这个16位整型数小于OxCOOO,必须是lpszClass的低16位,其高位宇必须为0。
hlnstance:创建类的模块的事例句柄。
返回值:如果函数成功,返回值为非零;如果未发现类或由此类创建的窗口仍然存在,则返回值为0。
若想获得更多错误信息,请调用GetLastError函数。
备注:在调用这个函数之前,应用程序必须销毁由指定类创建的所有窗口。
应用程序注册的所有窗口类在应用程序中止后都为未注册的类。
Windows 95:所有由OLL注册的窗口类在DLL卸载后均未注册的类。
windows NT:所有由DLL注册的类在DLL卸载后仍为已注册的类。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib;Unicode:在Windows
NT上实现为Uhicode和ANSI两种版本。
= = = = = = = = = = = = = = = = = = = = = == = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = GetClasslnfoEx
函数功能:该函数获得有关一个窗口类的信息。GetClasslnfo函数已经由GetClasslnfoEx取代,但是如果不需要获得类的小图标信息.仍然可以使用该函数。
函数原型:BOOL GetClasslnfoEx(HINSTANCE hlnstance,LPCTSTR
lpClassName, LPWNDCLASS
lpWndClass);
参数:
hlnstance:创建该类的应用程序的事例句柄。要获得由系统定义的类的信息(例如按钮和列表),将该参数设为NULL。
lpClassName:指向一个包含类名的空结束的字符串的指针。类名必须为事先注册的类,或是由此前调用RegisterClassEx函数注册的类。或者还可以是一个整型数原子,如果参数是一个整型数原子,它必须是由以前调用GlobalAdd原子函数创建的全局原子。这个16位整型数小于OxCOOO,必须是lpszClass的低16位,高位字必须为0。
lpWndClass:指向一个接收类信息的一个WNDCLASS结构的指针。
返回值:如果函数发现了一个匹配的类并且成功地拷贝了字符串,则返回值为非零;如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。
备注:在Windows
CE中,如果lpClassName是一个原子,则它必须是从函数RegisterClass返回的原子。
函数功能:该函数在窗口类的额外存储空间中的指定偏移地址获取指定窗口所属窗口类的16位值。不象GCW_原子和GCW_HICONSM,由16位Windows支持的GCW_value己经过时,必须使用函数GetClassLong来获得窗口的类值。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
GetCassWord
函数原型:WORD GetCassWord(HWND hWnd,int nlndex);
参数:.
hWnd:窗口句柄及间接给出的窗口所属的类。
nlndex:指定要获得的值的大于等于0字节的偏移量。有效值为从0开始到额外类存储空间字节数一2。
例如,若指定了10位或更多的额外类存储空间,则应设为第5个16位整数的索引位8。允许有的另外的有效值:
GCW_原子:恢复一个唯一标识窗口类的原子值,该值与RegiterClassEx函数的返回值相同。
GCW_HICONSM:恢复与窗口相关的小图标的句柄。
返回值:如果函数成功,返回值是所需的16位值;如果函数失败,返回值是零。若想获得更多错误信息,请调用GetLastError函数。
备注:通过使用函数RegisterClassEx,将结构WNDCLASSEX中的cbClsEXtra单元设为一个非0值来保留额外的类存储空间。
= = = = = = = = = = = == = = = = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
RegisterClass
函数功能:该函数注册在随后调用CreateWindow函数和CreateWindowEx函数中使用的窗口类。
RegisterClass函数己经由函数RegisterClassEx函数来代替,但是,如果不需要设置类的小目标则仍然可以使用RegisterClass函数。
函数原型:ATON RegisterClass(CONST WNDCLASS ★lpWndClass);
参数:
lpWndClass:指向一个WNDCLASS结构的指针。在将它传递给函数之前,必须在该结构中填充适当的类属性。
返回值:如果函数成功,返回值是唯一标识已注册的类的一个原子;如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。
备注:如果使用RegisterClassA来注册窗口,应用程序通知系统被注册类的窗口的消息使用ANSI字符集的文本和字符参数;如果使用RegisterClassW来注册窗口,应用程序需要系统以Unicode来传递消息的文本参数。lsWindowUnicode函数使应用程序可以查询每一个窗口的字符特征。参看Win32API中的ANSI和Unicode
函数,请查阅Functiont prototype。
应用程序注册的所有的窗口类在应用程序中止后都为未注册的类。
Windows 95:所有由DLL注册的类在DLL卸载后均未注册的类。
Windows NT:所有由DLL注册的类在DLL卸载后仍为已注册的类。
Windows
95:如果WNDCLASSEX结构中的cbWndExtra或cbClsExtra单元包含字节数超过40个字节,则RegisterClassEx将失败。
Windows
CE:由lpWndClass参数指向的WNDCLAS结构不支持lpszMenuName域,因为WindowsCE不支持缺省菜单。
除非使用了WindowsCE的lconcurs组件(这个组件提供了在适当目标平台上的鼠标支持),否则不能使用由lpWndClass指向的WNDCLASS结构中的hCursor域。
速查:Windows
NT:3.1以上版本;Windows:95以上版本:WindowsCE:1.0以上版本;头文件:Winuser.h;库文件:user32.lib;Unicode:在Windows
NT上实现为Unicodee和ANSI两种版本。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = SetClassWord
函数功能:该函数替换指定窗口所属的窗口类的额外存储空间中的指定偏移地址的16位值。由16位窗口支持的GCW_值己经过时,必须使用SetClassLong函数来设置此前使用SetClassword函数的GCW_值设置的类值。
函数原型:WORD SetClassWord(HWND hWnd,int nlndex,WORD
wNewWord);
参数:
hWnd:窗口的句柄及间接给出的窗口所属的类。
nlndex:指定要获得的值的大于等于0字节的偏移量。有效值为从0开始到额外类存储空间字节数-2。
例如,若指定了10位或更多的额外类存储空间,则应设为第5个16位整数的索引位8。
wNewWord:指定替换值。
返回值:如果函数成功,返回值是指定的16为整数的原来的值。如果该值未被预先设定,返回值为0。如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。
备注:通过使用函数RegisterClassEx将结构WNDCLASSEX中的cbClsExtra单元指定为一个非0值来保留额外类的存储空间。
= = = = = = = = = = = = = = = = = = = = = == = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = =
CallWindowProc
函数功能:该函数CallWindowProc将消息信息传送给指定的窗口过程。
函数原型:LRESULT CallWindowProc(WNDPROC lpPrevWndFunc,HWND
hWnd.UINT Msg,WPARAM
wParam,LPARAMIParam);
参数:
lpPrevWndFunc:指向前一个窗口过程的指针。如果该值是通过调用GetWindowLong函数,并将该函数中的nlndex参数设为GWL_WNDPROC或DWL_DLGPROC而得到的,那么它实际上要么是窗口或者对话框的地址,要么就是代表该地址的句柄。
hWnd:指向接收消息的窗口过程的句柄。
Msg:指定消息类型。
wParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关。
IParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关。
返回值:返回值指定了消息处理结果,它与发送的消息有关。
备注:使用函数CallWindowsProc可进行窗口子分类。通常来说,同一类的所有窗口共享一个窗口过程。子类是一个窗口或者相同类的一套窗口,在其消息被传送到该类的窗口过程之前,这些消息是由另一个窗口过程进行解释和处理的。
SetWindowLoog函数通过改变与特定窗口相关的窗日过程,使系统调用新的窗口过程来创建子类,新的窗口过程替换了以前的窗口过程。应用程序必须通过调用CallWindowsProc来将新窗日过程没有处理的任何消息传送到以前的窗口过程中,这样就允许应用程序创建一系列窗口过程。
如果定义了STRICT,那么lpPrevWndFunc参数具有WNDPROC数据类型。WNDPROC类型说明如下:
LRESULT(CALLBACK· WNDPROC)(HWND, UINT WPARAM,LPARAM)
如果没有定义STRICT,那么lpPrevWndFunc参数具有FARPROC数据类型。FARPROC类型说明如下:int(FAR
WINAPL·FARPROC)()
在C语言中,FARPROC申明表示为一个没有指定参数表的回调函数。然而在
C++中;申明中的空参数表示该函数没有参数。这种微妙的区别有可能引起代码出错。下面是一种解决办法:#ifdef
STRICT;WNDPROC
MyWindowProcedure;#else;FARPROC MyindowProcedure;#endif
IResult=CallWindowProc(MyWindowProcedure,…)
有关该函数的空参数表方面进一步的信息,清参考BjarneStroustrup编写的C++编程语言第2版。
对于Windows NT:函数CallWindowsProc
function进行了Unicode至ANSf转换处理。如果你直接调用该窗口过程,那么无法利用该转换。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib:Unicode:在Windows
NT环境中以Unicode和ANSI版本实现。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
DefWindowProc
函数功能:该函数调用缺省的窗口过程来为应用程序没有处理的任何窗口消息提供缺省的处理。该函数确保每一个消息得到处理。调用DefWindowProc函数时使用窗口过程接收的相同参数。
函数原型:LRESULT DefWindowProc(HWND hWnd,UINT Msg,WPARAM
wParam,LPARAM IParam);
参数:
hWnd:指向接收消息的窗口过程的句柄。
Msg:指定消息类型。
wParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关。
IParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关。
返回值:返回值就是消息处理结果,它与发送的消息有关。
备注:对于Windows CE;如果Msg为WM_SETTEXT那么返回0。
当DefWindowProc处理WM_DESTROY消息时,它不自动调用PostQutMessage。
速查:Windows NT 3.1以上版本;Windows:95以上版本:Windows
CE以上版本;头文件;winuser.h;库文件:user32.lib;Unicode:在Windows
NT环境中以Unicode和ANSI版本实现。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = =
WindowProc
函数功能:该函数是一个应用程序定义的函数。它处理发送给窗口的消息。WNDPROC类型定义了一个指向该回调函数的指针。WindowProc是用于应用程序定义函数的占位符。
函数原型:LRESULT CALLBACK WindowProc(HWND hwhd,uMsg,WPARAM
wParam,LPARAM
IParam);
参数:
hwnd:指向窗口的句柄。
uMsg:指定消息类型。
wParam:指定其余的、消息特定的信息。该参数的内容与UMsg参数值有关。
IParam:指定其余的、消息特定的信息。该参数的内容与uMsg参数值有关。
返回值:返回值就是消息处理结果,它与发送的消息有关。
速查:Windows NT:3.1以上版本;Windows:95以上版本;WindowsCE:1.0
以上版本;头文件:winuser.h;库文件:用户自定义。
窗口属性函数(WindowProperty)
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
EnumProps
函数功能:该函数将窗口属性表中的所有项列举出来,一个一个地传送给指定的回调函数,直到列举到最后一项,或者回调函数返回FALSE为止。
函数原型:int EnumProps(HWND hWnd,PROPENUMPROC lpEnumFunc);
参数:
hWnd:指向要列举属性表内容的窗口。
lpEnumFunc:指向回调函数的指针。有关回调函数方面更多的信息,可参考PropEnumProc函数。
返回值:返回值指定了回调函数返回的最后一个值、如果函数没有发现要列举的属性,那么它返回-1。
备注:应用程序只能删除它增加进去的那些属性。它无法删除其他应用程序加进去的或者系统本身的属性。
速查:Windows NT:3.1以上版本:Windows:95以上版本;Window
CE:不支持;头文件:winuser.h;库文件:user32.lib;Unicode:在Windows
NT环境中以Unicode和ANSI版本实现。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
EnumPropsEx
函数功能:该函数将窗口属性表中的所有项列举出来,依次传送给指定的回调函数,直到列举到最后一项,或者回调函数返回FALSE为止。
函数原型:int EnumPropsEx(HWND hWnd,PROPENUMPROCEX
lpEnumFunc,LPARAM IParam);
参数:
hWnd:指向要列举属性表内容的窗口。
lpEnumFunc:指向回调函数的指针。有关目调函数方面更多的信息,可参考PropEnumProcEx函数。
IParam:包含应用程序定义的、要传送给回调函数的数据。
返回值:返回值指定了回调函数返回的最后一个值。如果函数没有发现要列举的属性,那么它返回-1。
备注:应用程序只能删除它增加进去的那些属性。它无法删除其他应用程序加进去的或者系统本有的属性。
速查: Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:不支持:头文件:Winser.h;库文件:user32.lib:URIC0d6:在Windows
NT环境中以Unicode和ANSI版本实现。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
GetProp
函数功能:该函数从给定窗口的属性列表中检索数据句柄。给定的字符串标识了要检索的句柄。该字符串和句柄必须在前一次调用SetProp函数时已经加到属性表中。
函数原型:HANDLE GetProp(HWND hWnd,LPCTSTR lpString);
参数:
hWnd:指向要搜索属性表的窗口。
LpString:指向以null结尾的字符串指针,或者包含一个标识字符串的原子。如果该参数是一个原子,那么它必须是使用GlobalAddAtom函数创建的。原子是16位的数据值,它必须是放置在lpstring参数的低位率中,而高位字必须为O。
返回值:如果属性表中包含了给定的字符串,那么返回值为相关的数据句柄。否则,返回值为NULL。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:不支持:头文件:winuser.h;库文件:user32。lib;Unicode:在Windows
NT环境中以Unicode和ANSI版本实现。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
PropEnumProcEx
函数功能:该函数是一个应用程序定义的回调函数,它与EnumPropsEx函数一同使用。该函数从窗口属性表中检索属性项。PROPENUMPROCEX类型定义了一个指向该回调函数的指针。PropEnumProcEx是用于应用程序定义的函数名的占位符。
函数原型 BOOL CALLBACK PropEnumProcEx(HWND hwnd,LPTSTR
lpszStrng,HANDLE
hData,DWORD dwData);
参数:
hwnd:指向要列举属性表内容的窗口。
lpszString:指向以null结尾的字符串的指针。该字符串是属性表项的字符串部分。该字符串是在通过调用SetProp函数将属性增加到窗口属性表中时与数据句柄一起指定的。
hData:指向数据的句柄。该句柄是属性表项中的数据部分。
dwData:应用程序定义的数据、该值被指定为在调用EnumPropsEX进行列举初始化时的IParam参数。
返回值:返回TRUE以继续列举属性表。返回FALSE停止列举属性表。
备注:下列限制适用该回调函数:
请回调函数不应该产生对其他任务的控制或做一些有可能产生对其他任务的控制的事情。该回调函数可以调用RemoveProp函数。然而,RemoveProp函数通过该回调函数的参数只能清除传给该回调函数的属性。该回调函数不应该试图增加属性。
速查:Windows NT:3.1以上版本;Windows:95的以上版本;Windows
CE:不支持;头文件:winuser.h;库文件:用户自定义;Unicode:定义为Unicode和ANSI原型。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
RemoveProp
函数功能:该函数从指定的窗口的属性表中删除一项。指定的字符串标识了要删除的项。
函数原型:HANDLE RemoveProp(HWND hWnd,LPCTSTR lpString);
参数:
hWnd:指向要改变属性项的窗口的句柄。
lpString:指向以null结尾的字符串指针,或者包含一个标识字符串的原子。如果该参数是一个原子,那么它必须是使用AddAtom函数创建的。原子是16位的数据值,它必须是放置在lpString参数的低位字中,
而高位率必须为0。
返回值:返回值标识了指定的字符串。如果该串无法在指定的属性表中发现,那么返回值为NULL。
备注:应用程序必须释放与从属性表中清除的项相关的数据句柄。应用程序只能清除它加入的那些属性它不能清除其他应用程序或系统本身加入的属性。
RemoveProp函数返回与该字符串相关的数据句柄,这样应用程序就可以释放与该句柄相关的数据。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows
CE:不支持;头文件:winuser.h;文件:user32.lib;Unicode:在Windows
NT环境中以Unicode和ANSI版本实现。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
SetProp
函数功能:该函数在指定窗口的属性表中增加一个新项,或者修改一个现有项。如果指定的字符串不在属性表中,那么就增加该新的项,新项中包含该字符串和句柄,否则就用指定的句柄替换该字符串的全前句柄。
函数原型:BOOL SetProp(HWND hWnd,LPCTSTR lpString,HANDLE
hData);
参数:
hWnd:指向窗口的句柄,该窗口的属性表要接收一个新项。
lpString:指向以null结尾的字符串指针,或者包含一个标识字符串的原子。如果该参数是一个原子,么它必须是以前使用GlobalAddAtom函数创建的。原子是16位的数据值,它必须是放置在lpstring参数低位字中,而高位字必须为O。
hData:指向要拷贝到属性表中的数据的句柄。该数据句柄可以标识任何对应用程序有用的值。
返回值:如果该数据句柄和字符串以加到属性表中,那么返回值为非零。如果该函数失败,那么返回为零。若想获得更多错误信息,请调用GetLastError函数。
备注:在清除窗口之前(也就足在处理WM_DESTROY消息之前),应用程序必须把它加到属性表的所项清除。应用程序必须使用RemoveProp函数来清除这些项。
速查:Windows NT:3.1以上版本:Windows:95以上版本:Windows
CE:不支持:头文件:winuser.h;文件:user32.lib:Unicode:在Windows
NT环境中以Unicode和ANSI版本实现。
光标函数(CurSor)
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
CliepCursor
函数功能;该函数把光标限制在屏幕上的一个矩形区域内,如果调用SetCursor或用鼠标设置的一个随后的光标位置在该矩形区域的外面,则系统自动调整该位置以保持光标在矩形区域之内。
函数原型:BOOL CliepCursor(CONST RECT★ lpRect);
参数:
IpRect:指向RECT结构的指针,该结构包含限制矩形区域左上角和右下角的屏幕坐标,如果该指针为NULL(空),则光标可以在屏幕的任何区域移动。
返回值:如果成功,返回值非零;如果失败,返回值为零。若想获得更多错误信息,请调用GetLastError。
备注:光标是一个共享资源,如果一个应用控制了光标,在将控制转向另一个应用之前,必须要使用ClipCursor来释放光标,该调用过程必须具有对窗口的WINSTA_WRITEATTRIBUTES访问权。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;库文件;user32.lib。
= = = = = = = = = = = = = == = = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
CopyCursor
函数功能:该函数复制一光标。
函数原型:HCURSOR CopyCursor(HCURSOR pcur);
参数:
pcur:被复制光标的句柄
返回值;如果成功,返回值是复制光标的句柄;如果失败,返回值为NULL(空)。若想获得更多错误信息,请调用GetLastError函数。
备注;CopyCursor函数能使一个应用程序或一个动态连接库(OLL)得到一个属于另一模块的光标形状的句柄。如果另外一个模块被释放,则该应用程序仍然可以使用该光标形状。在关闭之前,一个应用程序必须调用DestroyCursor函数来释放任何与该光标有关的系统资源。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;库文件:user32.lib
= = = = = = = = = = = = = = = = = = = = = = == = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
CreateCursor
函数功能:该函数创建一个指定大小、位模式和热点的光标。
函数原型:HCURSOR CreateCursor(HINSTANCE htnst,int xHotSpot;int
yHotSpot;int
nWidth;iut nHeight,CONST VOID ★pvANDPlane,CONST VOID
★pvXORPlane);
参数:
hlnst:创建光标的应用程序的当前事例句柄。
xHotSpot:指定光标热点的水平位置。
yHotSpot:指定光标热点的垂直位置。
nWidth:以像素为单位指定光标的宽度。
nHeight:以像素为单位指定光标的高度。
pvANDPlane:指向一个字节数组的指针,该数组包含光标AND掩码的位值,就象设备相关的单色位图一样。
pvXORPlane:指向一个字节数组的指针,该数组包含光标XOR掩码的位值,就象设备相关的单色位图一样。
返回值:如果成功,返回光标的值;如果失败,返回值为NULL(空),若想获得更多错误信息,调用GetLastError函数。
备注:nWidth和nHeight参数必须指定一个当前显示驱动支持的宽度和高度,因为系统不能创建一个其他尺寸的光标,为了确定显示驱动所支持的宽度和高度,请使用GetSystemMetrics函数,指定SM_CXCUROR或SM_CYCURSOR值。在一个应用程序关闭之前,必须调用DestroyCursor函数来释放与光标有关的任何系统资源。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = =
DestroyCUrsor
函数功能:该函数销毁一个光标并释放它占用的任何内存,不要使用该函数去消毁一个共享光标。
函数原型:8OOL DestroyCUrsor(HCURSOR hCursor);
参数:
hCursor:要销毁的光标的句柄,该光标必须不在使用中。
返回值:如果成功,返回非零;如果失败,返回值为零,若想获得更多错误信息,请调用GetLastError函数。
备注:DestroyCursor函数销毁一个非共享的光标;不要用它销毁一个共享光标。一个共享光标只要调用它的模块仍在内存中,则该共享光标还是有效的,下面的函数可得到一个共享光标:LoadCursor;LoadCursorFronFile;Loadlmage(如果使用LR-SHARED标志);
Copylmage(如果使用LR_COPYRETURORG标志并且hlmags参数是一个共享光标)。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
GetClipCursor
函数功能:该函数检取一个矩形区域的屏幕坐标,光标被限制在该矩形区域之内。
函数原型:BOOL GetClipCursor(LPRECT IpRect);
参数:
IpRect:一个RECT结构的指针;接收限制矩形的屏幕坐标。如果该光标没有被限制在一个矩形区域内,则该RECT结构接收屏幕的尺寸。
返回值:如果成功,返回非零;如果失败,返回值为零,若想获得更多错误信息,请调用GetLastError函数。
备注:该光标是一个共享光标,如果一个应用程序使用ClipCursor函数来限制该光标,那么在它放弃控制转向另一个应用之前必须使用ClipCursor来释放该光标,该调用过程必须具有对窗口站的WINSTA_READATTRIBUTES访问权限。
速查:Windows NT:3.1及以上下版本;Windows:95及以上版本;Windows
CE:不支持;头文件:Winusre.h;库文件:user32。lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
GetCursor
函数功能:该函数检取当前光标的句柄。
函数原型:HCURSOR GetCursor(VOID);
参数:无。
返回值:返回值是当前光标的句柄,如果没有光标,返回值为NULL。
速查:Windows NT:3.1及以上版本;Wjhdows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
GetCursorPos
函数功能:该函数检取光标的位置,以屏幕坐标表示。
函数原型:BOOL GetCursorPos(LPPOlNT IpPoint);
参数:
IpPint:POINT结构指针,该结构接收光标的屏幕坐标。
返回值:如果成功,返回值非零;如果失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
备注:光标的位置通常以屏幕坐标的形式给出,它并不受包含该光标的窗口的映射模式的影响。该调用过程必须具有对窗口站的WINSTA_READATTRIBUTES访问权限。
速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
LoadCursorFromFile
函数功能:该函数根据一个文件中所含的数据创建光标。该文件由它的名字所指定或由一个系统光标鉴别器指定,该函数返回一个新建光标的句柄,文件所包含的光标数据可以是光标格式(CUR)或运动光标格式(.ANI)。
函数原型:HCURSOR LoadCursorFromFile(LPCTSTR IpFileName);
参数:
IpFileName:指明创建光标所用的文件数据资源,文件中的数据格式必须是COR或ANI,如果IpFileName的高位字为非零,则IpFileName就是指向一个字符串的指针,该字符串是包含光标数据的文件的名字。
如果IpFileName的高位字为零,低位字是系统光标标识符,则该函数在WIN.INI文件中搜索与系统光标名字有关的[Cursors]条目,下面是系统光标的名字和标识符的清单:
"AppStarting":OCR_APPSTARTING;"Arrow":OCR_NORMAL"Crosshair":OCR_CROSS;"Hand":WindowsNT5.0
and
laterOCR_HAND;"Help":OCR_HELP;"IBeam":OCR_IBEAM;"Icon":OCR_ICON;"No":OCR_NO;"Size":OCR_SIZE;
"SizeAll":OCR_SIZEALL;"SizeNESW":OCR_SIZENESW;"SizeNS":OCR_SIZENS;"SizeNWSE":OCR_SIZENESW;"SizeWE":OCR_SIZEWE;"UpArrow":OCR_UP;"Wait":OCR_WAIT
返回值:如果成功,返回值是新建光标的句柄;如果失败,返回值为空(NULL)。若想获得更多错误信息,请调用GetLastError函数。GetLastError也许会返回如下的值:ERROR_FILE_NOT_FOUND,没有找到指定的文件。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本:Windows
CE:不支持;头文件:winuser.h;库文件:user32.lib;Unicode:在Windows
NT中实现Unicode和ANSI两个版本。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
SetCursor
函数功能:该函数确定光标的形状。
函数原型:HCURSOR SetCursor(HCURSOR hCursor);
参数:
hCursor:光标的句柄,该光标由CreateCursor函数载入。如果该参数为NULL,则该光标从屏幕上移开。在Windows95中该光标的宽和高是GetSysfemMefirics
函数的返回值SM_CXCURSOR和观_CYCURSOR,并且光标的位深必须和显示器的位深相匹配,或者光标是单色的。
返回值:如果有前一个光标,则返回值是前光标的句柄;如果没有前光标,则返回值是NUL。
备注:仅当新光标与前光标不同时,才设置该光标,不然的话,该函数立即返回。该光标是一个共享资源。一个窗口仅当光标在其客户区域,或者它正在捕捉鼠标输入时,它才设置光标的形状。在一个没有鼠标的系统中,该窗口在光标离开它的客户区域或它要把控制权交给其他窗口之前,它会恢复以前的光标。如果应用程序必须在窗口中设置光标,必须确保指定窗口类的类光标被设为NULL,如果类光标不是NULL,则每次移动鼠标时,系统都要恢复类光标。如果内部的光标显不计数值小于零,则光标不在屏幕上显示。当一个应用程序使用ShowCursor函数隐藏光标的次数多于显示光标的次数时,则会发生这种情况。Windows
CE:当一个目标平台不支持鼠标光标时,使用cursor光标组件,该光标组件仅支持等待光标,设置等待光标,使用如下的代码:SetCursor(LoadCursor(NULL,IDC_WAIT));当一个目标平台不支持鼠标光标时,使用mcursor光标组件。该组件不支持彩色光标。
速查:Window NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:1.0及以上版本;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = = == = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
SetCursorPOS
函数功能:该函数把光标移到屏幕的指定位置。如果新位置不在由
ClipCursor函数设置的屏幕矩形区域之内,则系统自动调整坐标,使得光标在矩形之内。
函数原型:BOOL SetCursorPOS(int X,int Y);
参数:
X:指定光标的新的X坐标,以屏幕坐标表示。
Y:指定光标的新的Y坐标,以屏幕坐标表示。
返回值:如果成功,返回非零值;如果失败,返回值是零,若想获得更多错误信息,请调用GetLastError函数。
备注:该光标是共享资源,仅当该光标在一个窗口的客户区域内时它才能移动该光标。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
SetSystemCursor
函数功能:该函数使一个应用程序定制系统光标。它用hcur规定的光标内容代替id定义的系统光标内容,接着销毁hour。
函数原型:BOOL SetSystemCursor(HCURSOR hour,DWORD id);
参数:
hcur:光标的句柄,该函数hcur标识的光标的内容代替id定义的系统光标内容。系统通过调用DestroyCursor函数销毁hour。因此hour不能是由LoadCursor函数载入的光标。要指定一个从资源载入的光标,先用CopyCursor函数复制该光标,然后把该副本传送给SetSystemCursor函数。
Id:指定由hour的内容替换系统光标。
下面是一系列的系统光标标识符:
OCR_APPSTARTING:标准箭头和小的沙漏;OCR_NORAAC:标准箭头
OCR_CROSS:交叉十字线光标:OCR_HAND:手的形状(WindowsNT5.0和以后版本)
OCR_HELP:箭头和向东标记;OCR_IBEAM:I形梁;OCR_NO:斜的圆
OCR_SIZEALL:四个方位的箭头分别指向北、南、东、西
OCR_SIZENESEW:双箭头分别指向东北和西南;OCR_SIZENS:双箭头,分别指向北和南
OCR_SIZENWSE:双箭头分别指向西北和东南;OCR_SIZEWE:双箭头分别指向西和东
OCR_UP:垂直箭头:OCR_WAIT:沙漏返回值:如果成功,返回非零值;如果失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
ShowCursor
函数功能:该函数显示或隐藏光标。
函数原型:int ShowCursor(BOOL bShow);
参数:
bShow:确定内部的显示计数器是增加还是减少,如果bShow为TRUE,则显示计数器增加1,如果bShow为FALSE,则计数器减1。
返回值:返回值规定新的显示计数器。
备注:该函数设置了一个内部显示计数器以确定光标是否显示,仅当显示计数器的值大于或等于0时,光标才显示,如果安装了鼠标,则显示计数的初始值为0。如果没有安装鼠标,显示计数是C1。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == =
LoadCursor
函数功能:该函数从一个与应用事例相关的可执行文件(EXE文件)中载入指定的光标资源。该函数已被Loadlmage函数替代。
函数原型:HCURSOR LoadCursor(HINSTANCE hlnstance,LPCTSTR
lpCursorName);
参数:
hlnstance:标识一个模块事例,它的可执行文件包含要载入的光标。
LpCursorName:指向以NULL结束的字符串的指针,该字符串存有等载入的光标资源名。该参数低位字节和高位字节0组成资源标识器也可以由低位字为资源标识符和高位字为零组成。也可以用MADEINTRES_OURCE宏命令创建该值。要使用Win32预定义的一个光标,应用程序必须把hlnsfance参数设为NULL,并把IpCursorName设为如下值之一:
IDC_APPSTARING:标准箭头和小沙漏;IDC_ARROW:标准光标;IDC_CROSS:十字光标。
返回值:如果成功,返回值是新载入的光标的句柄:如果失败,返回值是NULL。若想获得更多错误信息,请调用GetLastError函数。
备注:LoadCursor函数仅载入没有被载入过的光标资源,否则,它检取已存在的光标资的句柄。仅当IpCursorName参数指向一个光标资源时,该函数才返回一个有效的光标句柄。如果IpCursorName不是指向光标而是指向了其他类型的资源(如icon),则该函数返回值不是NULL,尽管它不是一个有效的光标句柄,该函数为当前显示设备光标搜寻最贴切的光标资源。光标资源可以是彩色或单色的位图。Windows
CE:当目标平台不支持鼠标光标时。使用cursor光标组件。该光标组件支持的唯一的光标是等待光标(IDC_WAIT)。使用LoadCursor函数与SetCursor函数可设值等待光标。SetCursor(LoadCursor(NULL,IDC_WAIT))当目标平台不支持鼠标光标时,使用cursor光标组件,该组件以桌面窗口平台同样的方式支持LoadCursor函数,唯一不同的是仅支持单色光标。Windows
CE不支持彩色光标。试图载入一个彩色光标,将产生难以预料的结果。返回值是不确定的。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
消息和消息总队列函数(Messageand Message Queue)
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
BroadcastSystemMessage
函数功能:该函数发送消息给指定的接受者。接受者可以是一个应用程序、安装驱动器、网络驱动器、系统级设备驱动器或这些系统组件的组合。
函数原型:long BroadcastSystemMessage(DWORD dwFIags,LPDWORD
IpdwRecipients,UINT
UiMessage,WPARAMwParam,LPARAM IParam);
参数:
dwFlags:选项标志。可取下列值的组合:
BSF_FLUSHDISK:接受者处理消息之后清洗磁盘。
BSF_FORCEIFHUNG:继续广播消息,即使超时周期结束或一个接受者已挂起。
BSF_IGNORECURRENTTASK:不发送消息给属于当前任务的窗口。这样,应用程序就不会接收自己的消息。
BSF_NOHANG:强制挂起的应用程序超时。如果一个接受者超时,不再继续广播消息。
BSF_NOTIMEOUTIFNOTHUNG:只要接受者没挂起,一直等待对消息的响应。不会出现超时。
BSF_POSTMESSAGE:寄送消息。不能和BSF_QUERY组合使用。
BSF_QUERY:每次发送消息给一个接受者,只有当前接受者返回TRUE后,才能发送给下一个接受者。
lpdwRecipients:指向变量的指针,该变量含有和接收消息接受者的信息。此变量可为下列值的组合:
BSM_ALLCOMPONENTS:广播到所有的系统组件。
BSM_ALLDESKTOPS:Windows NT下,广播到所有的桌面。要求SE_TCB_NAME特权。
BSM_APPLICATIONS:广播到应用程序。
BSM_INSTALLABLEDRIVERS:Windows 95下,广播到安装驱动器。
BSM_INTDRIVER:Windows 95下,广播到网络驱动器。
BSM_VXDS:Windows 95下,广播到所有系统级设备驱动器。
当函数返回时,此变量接受上述值的组合,以确定真正接受消息的接受者。如果此参数为NULL,则将消息广播到所有的组件。
uiMessage:系统消息标识符。
WParam:32位消息特定值。
IParam:32位消息特定值。
返回值:如果函数调用成功,返回值是正数。如果函数不能广播消息,返回值是C1。如果参数dwFlags为BSF_QUERY且至少一个接受者返回BROADCAST_QUERY_DENY给相应的消息,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。
备注:如果BSF_QUERY没指定,函数发送指定的消息给所有请求的接受者,并忽略这些接受者返回的值。
速查:Windows NT:4.0及以上版本:Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;输入库:user32.lib;Unicode:在Windows
NT环境下以Unicode和ANSI方式实现。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
DispatchMessage
函数功能:该函数调度一个消息给窗口程序。通常调度从GetMessage取得的消息。
函数原型:LONG DispatchMessage(CONST MSG★lpmsg);
参数:
lpmsg:指向含有消息的MSG结构的指针。
返回值:返回值是窗口程序返回的值。尽管返回值的含义依赖于被调度的消息,但返回值通常被忽略。
备注:MSG结构必须包含有效的消息值。如果参数lpmsg指向一个WM_TIMER消息,并且WM_TIMER消息的参数IParam不为NULL,则调用IPa1ram指向的函数,而不是调用窗口程序。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:1.0及以上版本;头文件:winuser.h;输入库:user32.lib;Unicode:在Windows
NT环境下以Unicode和ANSI方式实现。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
GetlnputState
函数功能:该函数确定在调用线程的消息队列里,是否有鼠标键或键盘消息。
函数原型:BOOL GetlnputState(VOID)
参数:无。
返回值:如果队列里含有一个或多个新的鼠标键或键盘消息,返回非零值。如果队列里没有新的鼠标键或键盘消息,返回值是零。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;输入库:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
GetMessage
函数功能:该函数从调用线程的消息队列里取得一个消息并将其放于指定的结构。此函数可取得与指定窗口联系的消息和由PostThreadMesssge寄送的线程消息。此函数接收一定范围的消息值。GetMessage不接收属于其他线程或应用程序的消息。
函数原型:BOOL GetMessage(LPMSG lpMsg,HWND hWnd,UINT
wMsgFilterMin,UINT
wMsgFilteMax
参数:
lpMsg:指向MSG结构的指针,该结构从线程的消息队列里接收消息信息。
hWnd:取得其消息的窗口的句柄。这是一个有特殊含义的值(NULL)。GetMessage为任何属于调用线程的窗口检索消息,线程消息通过PostThreadMessage寄送给调用线程。
wMsgFilterMin:指定被检索的最小消息值的整数。
wMsgFilterMax:指定被检索的最大消息值的整数。
返回值:如果函数取得WM_QUIT之外的其他消息,返回非零值。如果函数取得WM_QUIT消息,返回值是零。如果出现了错误,返回值是_1。例如,当hWnd是无效的窗口句柄或lpMsg是无效的指针时。若想获得更多的错误信息,请调用GetLastError函数。
备注:应用程序通常用返回值来确定是否终止主消息循环并退出程序。
GetMesssge只接收与参数hWnd标识的窗口或子窗口相联系的消息,子窗口由函数IsChild决定,消息值的范围由参数wMsgFilterMin和wMsgFilterMax给出。如果hWnd为NULL,则GetMessage接收属于调用线程的窗口的消息,线程消息由函数PostThreadMessage寄送给调用线程。GetMessage不接收属于其他线程或其他线程的窗口的消息,即使hWnd为NULL。由PostThreadMessage寄送的线程消息,其消息hWnd值为NULL。如果wMsgFilterMin和wMsgFilterMax都为零,GetMessage返回所有可得的消息(即,无范围过滤)。
常数
WM_KEYFIRST和WM_KEYAST可作为过滤值取得与键盘输入相关的所有消息:常数WM_MOUSEFIRST和WM_MOUSELST可用来接收所有的鼠标消息。如果wMsgFilterMin和wMsgFilterMax都为零,GetMessage返回所有可得的消息(即,无范围过滤)。
GetMessage不从队列里清除WM.PAINT消息。该消息将保留在队列里直到处理完毕。
注意,此函数的返回值可非零、零或-1,应避免如下代码出现:
while(GetMessage(IpMsg,hwnd,0,0))…
-1返回值的可能性表示这样的代码会导致致命的应用程序错误。
速查:Windows NT: 3.1及以上版本;Windows:95及以上版本;Windows
CE:1.0及以上版本:头文件:winuser.h;输入库:user32.Iib;Unicode:在Windows
NT环境下以Unicode和ANSI方式实现。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
GetMessageEXtralnfo
函数功能:该函数为当前线程取得附加消息信息。附加消息信息是应用程序或驱动程序定义的与当前线程的消息队列联系的32位值。可用SetMessageExtralnfo来设置线程的附加消息信息,该消息信息将会保留到下一次调用GetMessage或PeekMessage之前。
函数原型:LONG GetMessageEXtralnfo(VOID)
参数:无。
返回值:返回值为附加信息。附加信息是设备特定的。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;输入库:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
GetMessagePos
函数功能:该函数返回表示屏幕坐标下光标位置的长整数值。此位置表示当上一消息由GetMessage取得时鼠标占用的点。
函数原型:DWORD GetMessagePos(VOID)
参数:无。
返回值:返回值给出光标位置的X,y坐标。X坐标在低位整数,y坐标在高位整数。
备注:如前所述,X坐标在返回值的低位整数,y坐标在高位整数(都表示有符号值,因为在多显示器的系统里可取得负值)。如果返回值赋给了一个变量,可用MAKEPOINT宏从返回值取得POINT结构。也可用GET_X_LPARAM或GET_Y_LPARAM宏来抽取X,y坐标。
要得到光标的当前位置而不是上一个消息发生时的位置,调用函数GetCursorPos。
要点:不要用LOWORD或HIWORD宏来抽取鼠标位置的x,y坐标,因为在多显示器的系统里将返回不正确的结果。多显示器的系统里可取得负的x,
y坐标,但LOWORD和HIWORD将坐标当作无符号量。
Windows
CE下,对那些使用记录笔而不是鼠标的设备,光标位置是指当上一信息由GetMessage取得时,记录笔在触屏上的位置。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:1.0及以上版本;头文件:winuser.h;输入库:user32.lib。
= = = = = = = = = = = = = = = == = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
GetMessageTime
函数功能:该函数返回由GetMessage从当前线程队列里取得上一消息的消息时间。时间是一个长整数,指定从系统开始到消息创建(即,放入线程消息队列)的占用时间(按毫秒计算)。
函数原型:LONG GetMessageTime(VOID)
参数:无。
返回值:返回值为消息时间。
备注:由GetMessageTime返回的值对后面的消息并不一定是增长的,因为当计时器计数超过长整数的最大值时,又从零开始计算。为计算消息间的延迟时间,必须验证第二个消息的时间比第一个消息的时间大,然后用第二个消息的时间减去第一个消息的时间。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h输入库:user32,lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
GetQueueStatus
函数功能:该函数返回表示调用线程消息队列里的消息的类型的标志。
函数原型:DWORD GetQueueStatus(UINT flags);
参数:
flags:表示消息类型的队列状态标志。此参数可为下列值的组合:
QS_ALLEVENTS:输入,WM_TIMER, WM_PAINT,WM_HOTKEY或寄送的消息在队列里。
QS_ALLINPUT:任何消息在队列里。
QS_ALLPOSTMESSAGE:寄送的消息(而不是其他所列消息)在队列里。
QS_HOTKEY:一条WM_HOTKEY消息在队列里。QS_INPUT:输入消息在队列里。
QS_KEY:一条WM_KEYUP
WM_KEYDOWN,WM_SYSKEYUP或WM_SYSKEYDOWN消息在队列里。
QS_MOUSE:WM_MOUSEMOVE消息或鼠标键消息(WM_BUTTONUP
WM_RBUTTONDOWN等)在消息队列里。
QS_MOUSEBUTTON:鼠标键消息(WM_LBUTTONUP,WM_RBUTTONDOWN等)在消息队列里。
QS_MOUSEMOVE:WM_MOUSEMOVE消息在消息队列里。
QS_FAINT:WM_PAINT消息在消息队列里。
QS_POSTMESSAGE:寄送的消息(而不是其他所列消息)在队列里。
QS_SENDMESSAGE:由其他线程或应用程序发送的消息在消息队列里。
QS_TIEMR:一条WM_TIEMR消息在消息队列里。
返回值:返回值的高位字表示队列里当前消息的类型。低位字表示上次调用GetQueuestatus,GetMessage或FeekMessBge以来加入队列并仍然在队列里的消息的类型。
备注:QS_标志出现在返回值里并不保证以后调用函数GetMessage或PeekMessage会返回一个消息。GetMesssge和PeekMesssge执行某些内部过滤会导致消息被内部处理。因此,GetQueueStatus的返回值只能被看作是否调用GetMessage或PeekMessage的提示。
QS_ALLPOSTMESSAGE和QS_POSTMESSAGE标志在被清除时不一样。QS_POSTMESSAGE在调用GetMessage或
PeekMessage时清除,无论是否过滤消息。QS_ALLPOSTMESSAGE在调用GetMessage或PeekMessage时清除,不过滤消息(wMsgFilterMin和wMsgFilterMax是零)。这对于多次调用PeeKMessage来获得不同范围的消息非常有用。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本:Windows
CE:不支持;头文件:winuser.h;输入库:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = == = = = = = = =
InsendMessage
函数功能:该函数决定当前窗口程序是否处理另一个线程调用SendMesssge(在相同进程或不同进程)发送来的消息。
函数原型:BOOL InsendMessage(VOID);
参数:无。
返回值:如果窗口程序处理另一个线程调用SendMessage发送来的消息,返回非零值。如果窗口程序不处理另一个线程调用SendMessage发送来的消息,返回值是零。
速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h输入库:user32.Iib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
InsendMessageEx
函数功能:函数决定当前窗口程序是否处理另一个线程调用SendMessage(在相同进程或不同进程)发送来的消息。此函数与InsendMesssge相似,但另外提供了如何发送消息的信息。
函数原型:DWORD InsendMessageEx(LPVOID IpReserved);
参数:
IpReserved:保留值,必须为NULL。
返回值:如果消息没被发送,返回值是ISMEX_NOSEND。否则,返回值是一个或多个下列值:
ISMEX_CALLBACK:消息是用函数SendMesssgeCallback发送的。发送此消息的线程没被阻塞。
ISMEX_NOTIFY:消息是用函数SendNotifyMessags发送的。发送此消息的线程没被阻塞。
ISMEX_REPLIED:窗口程序处理了消息。发送此消息的线程不再被阻塞。
ISMEX_SEND:消息是用函数SendMessage或SendMessageTimeout发送的。如果ISMEX_REPLIED没设置,发送此消息的线程被阻塞。
速查:Wihdows NT:5.0及以上版本:Windows:98及以上版本;Wihdows
CE:不支持:头文件:winuser.h;输入库:user32.Iib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
PeekMessage
函数功能:该函数为一个消息检查线程消息队列,并将该消息(如果存在)放于指定的结构。
函数原型:BOOL PeekMessage(LPMSG IpMsg,HWND hWnd,UINT
wMSGfilterMin,UINT
wMsgFilterMax,UINT wRemoveMsg);
参数:
lpMsg:接收消息信息的MSG结构指针。
hWnd:其消息被检查的窗口的句柄。
wMsgFilterMin:指定被检查的消息范围里的第一个消息。
wMsgFilterMax:指定被检查的消息范围里的最后一个消息。
wRemoveMsg:确定消息如何被处理。此参数可取下列值之一:
PM_NOREMOVE:PeekMessage处理后,消息不从队列里除掉。
PM_REMOVE:PeekMessage处理后,消息从队列里除掉。
可将PM_NOYIELD随意组合到PM_NOREMOVE或PM_REMOVE。此标志使系统不释放等待调用程序空闲的线程。
缺省地,处理所有类型的消息。若只处理某些消息,指定一个或多个下列值:
PM_QS_INPUT:Windows NT5.0和Windows 98:处理鼠标和键盘消息。
PM_QS_PAINT:Windows NT 5.0和Windows 98:处理画图消息。
PM_QS_POSTMESSAGE:Windows NT 5.0和Windows
98:处理所有被寄送的消息,包括计时器和热键。
PM_QS_SENDMESSAGE:Windows NT 5.0和Windows 98:处理所有发送消息。
返回值:如果消息可得到,返回非零值;如果没有消息可得到,返回值是零。
备注:和函数GetMessage不一样的是,函数PeekMesssge在返回前不等待消息被放到队列里。
PeekMesssge只得到那些与参数hWnd标识的窗口相联系的消息或被lsChild确定为其子窗口相联系的消息,并且该消息要在由参数wMsgFiterMin和wMsgFiherMax确定的范围内。如果hWnd为NULL,则PeekMessage接收属于当前调用线程的窗口的消息(PeekMessage不接收属于其他线程的窗口的消息)。如果hWnd为C1,PeekMessage只返回hWnd值为NULL的消息,该消息由函数PostThreadMessage寄送。如果wMsgFilterMin和wMsgFilterMax都为零,GetMessage返回所有可得的消息(即,无范围过滤)。
常数WM_KEYFIRST和WMKEYLAST可作为过滤值取得所有键盘消息;常数WM_MOUSEFIRST和WM_MOUSELAST可用来接收所有的鼠标消息。
PeekMessage通常不从队列里清除WM_PANT消息。该消息将保留在队列里直到处理完毕。但如果WM_PAINT消息有一个空更新区,PeekMessage将从队列里清除WM_PAINT消息。
Windows CE:有一个NULL更新区的WM_PAINT消息不从队列里清除。
速查:Windows NT:3.1及以上版本;Wihdows:95及以上版本:Windows
CE:1.0及以上版本;头文件:winuser.h输入库:user32.lib:Unicode:在Windows
NT环境下以Unicode和ANSI方式实现。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
PostMessage
函数功能:该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回。消息队列里的消息通过调用GetMessage和PeekMessage取得。
函数原型:B00L PostMessage(HWND hWnd,UINT Msg,WPARAM
wParam,LPARAM lParam);
参数
hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含义的两个值:
HWND.BROADCAST:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口。消息不被寄送到子窗口。
NULL:此函数的操作和调用参数dwThread设置为当前线程的标识符PostThreadMessage函数一样。
Msg:指定被寄送的消息。
wParam:指定附加的消息特定的信息。
IParam:指定附加的消息特定的信息。
返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。
备注:需要以 HWND_BROADCAST方式通信的应用程序应当用函数
RegisterwindwosMessage来获得应用程序间通信的独特的消息。
如果发送一个低于WM_USER范围的消息给异步消息函数(PostMessage.SendNotifyMessage,SendMesssgeCallback),消息参数不能包含指针。否则,操作将会失败。函数将再接收线程处理消息之前返回,发送者将在内存被使用之前释放。
速查:Windows NT: 3.1及以上版本;Windows:95及以上版本;Windows
CE:1.0及以上版本;头文件:winuser.h;输入库:user32.lib;Unicode:在Windows
NT环境下以Unicode和ANSI方式实现。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
PostQuitMessage
函数功能:该函数向系统表明有个线程有终止请求。通常用来响应WM_DESTROY消息。
函数原型:VOID PostQuitMessage(int nExitCode);
参数:
pExitCode:指定应用程序退出代码。此值被用作消息WM_QUIT的wParam参数。
返回值:无。
备注:PostQuitMessage寄送一个WM_oUT消息给线程的消息队列并立即返回;此函数向系统表明有个线程请求在随后的某一时间终止。
当线程从消息队列里取得WM_QUIT消息时,应当退出消息循环并将控制返回给系统。返回给系统的退出值必须是消息WM_QUIT的wParam参数。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:1.0及以上版本;头文件:winuser.h;输入库:user32,lib:Uhicode:在Wihdows
NT环境下以Unicode和ANSI方式实现。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
PostThreadMessage
函数功能:该函数将一个消息放入(寄送)到指定线程的消息队列里,不等待线程处理消息就返回。
函数原型:BOOL PostThreadMessage(DWORD idThread,UINT Msg,WPARAM
wParam,LPARAM
IParam);
参数
idThread:其消息将被寄送的线程的线程标识符。如果线程没有消息队列,此函数将失败。当线程第一次调用一个Win
32
USER或GDI函数时,系统创建线程的消息队列。要得到更多的信息,参见备注。
Msg:指定将被寄送的消息的类型。
wParam:指定附加的消息特定信息。
IParam:指定附加的消息特定信息。
返回值:如果函数调用成功,返回非零值。如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。如果idThread不是一个有效的线程标识符或由idThread确定的线程没有消息队
列,GetLastError返回ERROR_INVALID_THREAD。
备注:消息将寄送到的线程必须创建消息队列,否则调用PostThreadMessage会失败。用下列方法之一来处理这种情况:
调用PostThreadMessage。如果失败,调用Sleep,再调用PostThreadMessage,反复执行,直到PostThreadMessage成功。
创建一个事件对象,再创建线程。在调用PostThreadMessage之前,用函数WaitForSingleObject来等特事件被设置为被告知状态。消息将寄送到的线程调用PeedMessage(£msg,NULL,WM_USER,WM_USER,PM_NOREMOVE)来强制系统创建消息队列。设置事件,表示线程已准备好接收寄送的消息。
消息将寄送到的线程通过调用GetMesssge或PeekMesssge来取得消息。返回的MSG结构中的hwnd成员为NULL。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:1.0及以上版本:头文件:winuser.h;输入库:user32.lib;Unicode:在Windows
NT环境下以Unicode和ANSI方式实现。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = =
RegisterWindowsMessage
函数功能:该函数定义一个新的窗口消息,该消息确保在系统中是唯一的。返回的消息值可在调用函数SendMessage或PostMessage时使用。
函数原型:UINT RegisterWindowsMessage(LPCTSTR lpString);
参数:
lpString:指定将被注册的消息的以‘\O’结束的字符串指针。
返回值:如果消息被成功注册,返回值是在范围OxCOOO到OxFFFF的消息标识符;如果函数调用失败,返回值是零。要得到更多的错误信息,调用函数GetLastError。
备注:RegisterWindowMessage通常为合作应用程序间的通信注册消息。
如果不同的应用程序注册同样的消息字符串,应用程序返回同样的消息值。消息保持注册,直到会话完成。
当一个以上的应用程序必须处理同一个消息时,必须使用RegisterWindowMessage。要在窗口类里发送私有消息,应用程序可以使用UM_USER到OX7FFF范围内的任意整数。(在此范围的消息对窗口类私有,而不是对应用程序私有。如,预定义的控制类如BUTTON,
EDIT LISTBOX和COMBOBOX可用此范围的值。)
速查:Windows NT: 3.1及以上版本;Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;输入库:user32.lib;Unicode:在Windows
NT环境下以Unicode和ANSI方式实现。
= = = = = = = = = = = = = = = == = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
ReplyMessage
函数功能:该函数用于应答由函数SendMessage发送的消息,不返回控制给调用SendMessage的函数。
函数原型:BOOL ReplyMessage(LRESULTIResult);
参数:
IResult:指定消息处理的结果。可能的值由所发送的消息确定。
返回值:如果调用线程正处理从其他线程或进程发送的消息,返回非零值。如果调用线程不是正处理从其他线程或进程发送的消息,返回值是零。
备注:调用此函数,接收消息的窗口程序允许调用SendMessage的线程继续运行,尽管接收消息的线程已返回控制。调用ReplyMessage的线程也继续运行。
如果消息不是通过SendMessage发送的,或者消息由同一个线程发送,ReplyMessage不起作用。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本:Windows
CE:不支持:头文件:winuser.h;输入库,user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = = = = = = = = = = = =
SendAsyncProc
函数功能:该函数是应用程序定义的回调函数,和SendMessageCallback一起使用。系统在将消息传给目标窗口程序后,将消息传给回调函数。类型SENDASYNCPROC定义了一个指向此回调函数的指针。SendAsyncProc是此应用程序定义的函数名的占位符。
函数原型:VOID CALLBACK SendAsyncProc(HWND hwnd,UINT uMsg,DWORD
dwData,LRESULT
IResult);
参数:
hwnd;其窗口程序接收消息的窗口的句柄。如果将SendMessageCallback的参数hwnd设置为HWND_BROADCAST,系统为每个顶层窗口调用一次SendAsyncProc。
uMsg:指定消息。
dwData:指定从函数SendMessageCallback发送来的应用程序定义的值。
IResult:指定消息处理的结果与消息。
返回值:此回调函数无返回值。
备注:通过传一个SENDASYNCPROC指针给函数SendMessageCallback来安装一个SendAsyncProc应用程序定义的回调函数。
此回调函数仅当调用SendMessageCallback的线程调用GetMessage,PeekMessage或WaitMessage时调用。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;WindowsCE:不支持;头文件:
winuser.h;输入库:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
SendMessage
函数功能:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而函数PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回。
函数原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM
wParam,LPARAM IParam);
参数:
hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。
Msg:指定被发送的消息。
wParam:指定附加的消息指定信息。
IParam:指定附加的消息指定信息。
返回值:返回值指定消息处理的结果,依赖于所发送的消息。
备注:需要用HWND_BROADCAST通信的应用程序应当使用函数RegisterWindowMessage来为应用程序间的通信取得一个唯一的消息。
如果指定的窗口是由调用线程创建的,则窗口程序立即作为子程序调用。如果指定的窗口是由不同线程创建的,则系统切换到该线程并调用恰当的窗口程序。线程间的消息只有在线程执行消息检索代码时才被处理。发送线程被阻塞直到接收线程处理完消息为止。
Windows CE:Windows
CE不支持Windows桌面平台支持的所有消息。使用SendMesssge之前,要检查发送的消息是否被支持。
速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows
CE:1.0及以上版本;头文件:winuser.h;输入库:user32.lib;Unicode:在Windows
NT环境下以Unicode和ANSI方式实现。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
SendMessageCallback
函数功能:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,并立即返回。当窗口程序处理完消息后,系统调用指定的回调函数,将消息处理的结果和一个应用程序定义的值传给回调函数。
函数原型:BOOL SendMessageCallback(HWND hwnd,UINT Msg,WPARAM
wParam,LPARAM
IParam,
SEhDASYNCPROCIpResultCallBack,DWORD dwData);
参数:
hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。
Msg:指定被发送的消息。
wParam:指定附加的消息指定信息。
IParam:指定附加的消息指定信息。
IpResultCallBack:指向回收函数的指针,窗曰程序处理完消息后调用该回调函数。参见SendAsyncProc可得到合适的回调函数的信息。如果hwnd为HWND_BROADCAST,系统为每个顶层窗诘饔靡淮蜸endASyncProc回调函数。
dwData:一个应用程序定义的值,被传给由参数IPResultCallBack指向的回调函数。
返回值:如果函数调用成功,返回非零值。如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。
备注:如果发送一个低于WM_USER范围的消息给异步消息函数(PostMessage,SendNotifyMesssge;SendMessageCallback),消息参数不能包含指针。否则,操作将会失败。函数将在接收线程处理消息之前返回,发送者将在内存被使用之前释放。
需要以HWND_BROADCAST方式通信的应用程序应当用函数RegisterWindwosMessage来获得应用程序间通信的独特的消息。
此回调函数仅当调用SendMessagecallback的线程调用GetMessage,PeekMessage或WaitMessage时调用。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;输入库:user32.lib;Unicode:在Windows
NT环境下以Unicode和ANSI方式实现。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
SendMessageTmeoUt
函数功能:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,并且,如果指定的窗口属于不同的线程,直到窗口程序处理完消息或指定的超时周期结束函数才返回。如果接收消息的窗口和当前线程属于同一个队列,窗口程序立即调用,超时值无用。
函数原型:LRESULT SendMessageTmeoUt(HWND hwnd,UINT Msg,WPARAM
wParam,LPARAM
IParam,UINTfuFlags,UIUT uTimeout,LPDWORD lpdwResultult);
参数:
hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口。
Msg:指定被发送的消息。
wParam:指定附加的消息指定信息。
IParam:指定附加的消息指定信息。
fuFlags;指定如何发送消息。此参数可为下列值的组合:
SMTO_ABORTIFHUNG:如果接收进程处于“hung”状态,不等待超时周期结束就返回。
SMTO_BLOCK:阻止调用线程处理其他任何请求,直到函数返回。
SMTO_NORMAL:调用线程等待函数返回时,不被阻止处理其他请求。
SMTO_ONTIMEOUTIFNOTHUNG:Windows
95及更高版本:如果接收线程没被挂起,当超时周期结束时不返回。
uTimeout:为超时周期指定以毫秒为单位的持续时间。如果该消息是一个广播消息,每个窗口可使用全超时周期。例如,如果指定5秒的超时周期,有3个顶层窗回未能处理消息,可以有最多15秒的延迟。
IpdwResult:指定消息处理的结果,依赖于所发送的消息。
返回值:如果函数调用成功,返回非零值。如果函数调用失败,或超时,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。如果GetLastError返回零,表明函数超时。如果使用HWND_BROADCAST,SenddMessaggTimeout不提供单个窗口超时信息。
速查: Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;输入库:user32.lib;Unicode:在Windows
NT环境下以Unicode和ANSI方式实现。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
SendNotifyMessage
函数功能:该函数将指定的消息发送到一个窗口。如果该窗口是由调用线程创建的;此函数为该窗口调用窗口程序,并等待窗口程序处理完消息后再返回。如果该窗口是由不同的线程创建的,此函数将消息传给该窗口程序,并立即返回,不等待窗口程序处理完消息。
函数原型:BOOL SendNotifyMessage(HWND hWnd,UINT Msg,WPARAM
wParam,LPARAM IParam);
参数:
hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。
Msg:指定被发送的消息。
wParam:指定附加的消息指定信息。
IParam:指定附加的消息指定信息。
返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。
备注:如果发送一个低于WM_USER范围的消息给异步消息函数(PostMessage,SendNotifyMessage,SendMesssgeCallback),消息参数不能包含指针。否则,操作将会失败。函数将在接收线程处理消息之前返回,发送者将在内存被使用之前释放。
需要以HWND_BROADCAST方式通信的应用程序应当用函数RegisterWindwosMessage来获得应用程序间通信的独特的消息。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:1.0及以上版本;头文件:winuser.h;输入库:user32.lib;Unicode:在Windows
NT环境下以Uncode和ANSI方式实现。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
SetMesssgeEXtralnfo
函数功能:该函数为当前线程设置附加消息信息。附加消息信息是应用程序或驱动程序定义的与当前线程的消息队列联系的32位值。GetMessageExtralnfo来取得线程的附加消息信息。
函数原型:LPARAM SetMesssgeEXtralnfo(LPARAM IParam);
参数:
IParam:指定与当前线程联系的32位值。
返回值:返回值为前一个32位值。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:不支持;头文件:winser.h;输入库:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
TranslateMessage
函数功能:该函数将虚拟键消息转换为字符消息。字符消息被寄送到调用线程的消息队列里,当下一次线程调用函数GetMessage或PeekMessage时被读出。
函数原型:BOOL TranslateMessage(CONST MSG★lpMsg);
参数:
IpMsg:指向含有消息的MSG结构的指针,该结构里含有用函数GetMessage或PeekMessage从调用线程的消息队列里取得的消息信息。
返回值:如果消息被转换(即,字符消息被寄送到调用线程的消息队列里),返回非零值。如果消息是WM_kEYDOWN,WM_KEYUP
WM_SYSKEYDOWN或WM_SYSKEYUP,返回非零值,不考虑转换。如果消息没被转换(即,字符消息没被寄送到调用线程的消息队列里),返回值是零。
备注:此函数不修改由参数IpMsg指向的消息。
WM_KEYDOWN和WM_KEYUP组合产生一个WM_CHAR或WM_DEADCHAR消息。
WM_SYSKEYDOWN和WM_SYSKEYUP组合产生一个SYSWM_CHAR或
WM_SYSDEADCHAR消息。TtanslateMessage为那些由键盘驱动器映射为ASCll字符的键产生WM_CHAR消息。
如果应用程序为其他用途处理虚拟键消息,不应调用TranslateMessage。例如,如果件ThranslateAccelerator返回一个非零值,应用程序不应调用TranslateMessage。
Windows CE:Windows
CE不支持扫描码或扩展键标志,因此,不支持由TranslateMessage产生的WM_CHAR消息中的IKeyData参数(IParam)取值16-24。
TranslateMessage只能用于转换调用GetMessage或PeekMessage接收的消息。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:1.0及以上版本;头文件:winuser.h;输入库:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
WaitMessage
函数功能:该函数产生对其他线程的控制,如果一个线程没有其他消息在其消息队列里。此函数中止线程,直到一个新消息被放入该线程的消息队列里,再返回。
函数原型;BOOL WaitMessage(VOID)
参数:无。
返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。
备注:在线程调用一个函数来检查队列后,如果有未经阅读的输入在消息队列里,WaitMessage不返回。这是因为PeekMessage,GetMessage,GetQueueStatus:WaitMessage,MsgWaitForMultipleObjects,MsgWaitForMulitpleObjectEx等函数检查队列后,改变队列的状态信息这样输入不再被认为是新的。如果连续调用WaitMessage,将等到指定类型的新输入到达后才返回。已存在的未读过的输入(在上次线程检查队列之前接收的)被忽略。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;输入库:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = =
坐标空间与变换函数(Coordinate Space Trandformation)
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = =
ClientToScreen
函数功能:该函数将指定点的用户坐标转换成屏幕坐标。
函数原型:BOOL ClientToScreen(HWNDhWnd,LPPOINT lpPoint);
参数:
hWnd:用户区域用于转换的窗口句柄。
lpPoint:指向一个含有要转换的用户坐标的结构的指针,如果函数调用成功,新屏幕坐标复制到此结构。
返回值:如果函数调用成功,返回值为非零值,否则为零。
注释:函数用屏幕坐标取代POINT结构中的用户坐标,屏幕坐标与屏幕左上角相关联。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:1.0及以上版本;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
MapwindowPoints
函数功能:该函数把相对于一个窗口的坐标空间的一组点映射成相对于另一窗口的坐标空 的一组点。
函数原型:int MapwindowPoints(HWNDhWndFrom, HWND
hWndTo,LPPOINT lpPoints, UINT
cPoints);
参数:
hWndfrom:转换点所在窗口的句柄,如果此参数为NULL或HWND_DESETOP则假定这些点在屏幕坐标上。
hWndTo:转换到的窗口的句柄,如果此参数为NULL或HWND_DESKTOP,这些点被转换为屏幕坐标。
lpPoints:指向POINT结构数组的指针,此结构数组包含要转换的点,此参数也可指向RECT结构,在此情况下,Cpoints参数应设置为2。
cPoints:指定LpPoints参数指向的数组中POINT结构的数目。
返回值:如果函数调用成功,返回值的低位字是每一个源点的水平坐标的像素数目,以便计算每个目标点的水平坐标;高位字是每一个源点的垂直坐标的像素的数目,以便计算每个目标点的垂直坐标,如果函数调用失败,返回值为零。
Windows NT:若想获得更多错误信息,请调用GetLastError函数。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:1.0及以上版本;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = =
鼠标输入函数(MouseInput)
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
DragDetect
函数功能:该函数捕获并跟踪鼠标的移动直到用户松开左键、按下Esc。键或者将鼠标移动到围绕指定点的“拖动矩形”之外。拖动矩形的宽和高由函数GetSystemMetrics返回的SM_CXDRAG或SM_CYDRAG确定。
函数原型:BOOL DragDetect(HWND hwnd,POINT pt);
参数:
hwnd:接受鼠标输入的窗口的句柄。
pt:鼠标在屏幕坐标下的初始位置,此函数根据这个点来确定拖动矩形的坐标。
返回值:如果用户在按着鼠标左键时将鼠标移出了拖动矩形之外,则返回非零值;如果用户按着鼠标左键在拖动内移动鼠标,则返回值是零。
备注:拖动矩形的系统度量是可构造的,允许更大或更小的拖动矩形。
速查:Windows NT: 4.0及以上版本;Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;输入库:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
GetCapture
函数功能:该函数取得捕获了鼠标的窗口(如果存在)的句柄。在同一时刻,只有一个窗口能捕获鼠标;此时,该窗口接收鼠标的输入,无论光标是否在其范围内。
函数原型:HWND GetCapture(VOID)
参数:无。
返回值:返回值是与当前线程相关联的捕获窗口的句柄。如果当前线程里没有窗口捕获到鼠标,则返回NULL。
备注:返回NULL并不意味着系统里没有其他进程或线程捕获到鼠标,只表示当前线程没有捕获到鼠标。
速查:Windows NT:4.0及以上版本;Wiodows:95及以上版本;Windows
CE:1.0及以上版本;头文件:winuser.h;输入库:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
GetDoubleClickTime
函数功能:该函数取得鼠标的当前双击时间。一次双击是指对鼠标键的两次连击,第一次击键后在指定时间内击第二次。双击时间是指在双击中,第一次击键和第二次击键之间的最大毫秒数。
函数原型:UINT GetDoubleClickTime(VOID)
参数:无。
返回值:返回是当前双击时间,按毫秒计算。
速查:Windows NT:4.0及以上版本;Windows:95及以上版本;Windows
CE:1.0及以上版本;头文件:winuser.h;输入库:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
GetMouseMovePoints
函数原型:int GetMouseMovePoints(UINT cbSize,LPMOUSEMOVEPOlNT
lppt,LPMOUSEMOVEPOINT
IpptBuf,int,nBufPoints,DWORD resolution);
参数:
cbSize:结构MOOSEMOVEPOINT的大小。
lppt:指向结构MOUSEMOVEPOINT的指针,该结构包含了有效的鼠标坐标(屏幕坐标)。也可以包含一个时间标记。
函数GetMouseMovePoints在鼠标坐标历史记录中查找一点。如果此函数查到该点,则返回包含提供点在内的在此之前的最后一个nBufPoints。如果应用程序提供一个时间标记,则函数GetMouseMovePoints将用它来区分记录于不同时间的两个相等的点。
应用程序使用从消息WM_MOOSEMOVE中接收的鼠标坐标来调用此函数,并把它们转换为屏幕坐标。
lpptBut:将接收点的缓冲区的指针。其大小至少应为cbsze· nBuffPoints。
nBufPoints:指定将取得的点的个数。
resolution:指定希望的分辨率。此参数可取下列值之一:
GMMP_USE_DISPLAY_POINTS:用显示分辨率取得点。
GMMP_USE_DRIVER_pOINTS:用驱动器分辨率取得点。在Windows
CE平台下,画笔驱动器的分辨率高于显示分辨率。这样,函数GetMouseMovePoints可被那些需要准确分辨率的应用程序使用。(如手写体识别软件或计算机辅助设计软件)。
返回值:如果函数调用成功,返回值是缓冲区里的点的数目。否则,函数返回C1。若想获得更多的错误信息,请调用GetlastError函数。函数GetLastError可能返回下面的错误代码。
GMMF_ERR_POINT_NOT_FOUNQ由lPPt指定的点找不到或不再存在于系统缓冲区中。
备注:系统至少保留着64个鼠标坐标及其时间标记。如果应用程序给GetMouseMovePoints提供了一个鼠标坐标,而该坐标存在于系统中的鼠标坐标历史记录中,则函数从历史坐标记录取得指定个数的坐标。也可以提供一个时间标记,用来区分历史记录中相同的点。
函数GetMouseMonePoints将返回实际发送给调用线程和其他线程的点。
速查:Windows NT:5.0及以上版本;Windows:98及以上版本;Windows
CE:2.0及以上版本;头文件:winuser.h;输入库:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
mouse_event
函数功能:该函数综合鼠标击键和鼠标动作。
函数原型:VOID mouse_event(DWORD dwFlags,DWORD dx,DWORD
dwFlags,OWORD dx,DWORD
dy, DWORD dwData, DWORD dwExtralnfo);
参数:
dwFlags:标志位集,指定点击按钮和鼠标动作的多种情况。此参数里的各位可以是下列值的任何合理组合:
MOOSE_EVENTF_ABSOLOTE:表明参数dX,dy含有规范化的绝对坐标。如果不设置此位,参数含有相对数据:相对于上次位置的改动位置。此标志可被设置,也可不设置,不管鼠标的类型或与系统相连的类似于鼠标的设备的类型如何。要得到关于相对鼠标动作的信息,参见下面备注部分。
MOOSEEVENTFMOVE:表明发生移动。
M00SEEVENTF_LEFTDOWN:表明接按下鼠标左键。
M00SEEVENTF_LEFTUP:表明松开鼠标左键。
MOOSEEVENTF_RIGHTDOWN:表明按下鼠标右键。
MOOSEEVENTF_RIGHTUP:表明松开鼠标右键。
MOOSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。
MOOSEEVENTF_MIDDLEUP:表明松开鼠标中键。
MOOSEEVENTF_WHEEL:在Windows
NT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量由dwData给出。
dx:指定鼠标沿x轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOOSEEVENTF_ABSOLOTE的设置。给出的绝对数据作为鼠标的实际X坐标;给出的相对数据作为移动的mickeys数。一个mickey表示鼠标移动的数量,表明鼠标已经移动。
dy:指定鼠标沿y轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOOSEEVENTF_ABSOLVTE的设置。给出的绝对数据作为鼠标的实际y坐标,给出的相对数据作为移动的mickeys数。
dwData:如果dwFlags为MOOSEEVENTF_WHEEL,则dwData指定鼠标轮移动的数量。正值表明鼠标轮向前转动,即远离用户的方向;负值表明鼠标轮向后转动,即朝向用户。一个轮击定义为WHEEL_DELTA,即120。
如果dwFlagsS不是MOOSEEVENTF_WHEEL,则dWData应为零。
dwExtralnfo:指定与鼠标事件相关的附加32位值。应用程序调用函数GetMessgeExtrajnfo来获得此附加信息。
返回值:无。
备注:如果鼠标被移动,用设置MOUSEEVENTF_MOVE来表明,dX和dy保留移动的信息。给出的信息是绝对或相对整数值。
如果指定了MOWSEEVENTF_ABSOLOTE值,则dX和dy含有标准化的绝对坐标,其值在0到65535之间。事件程序将此坐标映射到显示表面。坐标(0,0)映射到显示表面的左上角,(6553,65535)映射到右下角。
如果没指定MOWSEEVENTF_ABSOLOTE,dX和dy表示相对于上次鼠标事件产生的位置(即上次报告的位置)的移动。正值表示鼠标向右(或下)移动;负值表示鼠标向左(或上)移动。
鼠标的相对移动服从鼠标速度和加速度等级的设置,一个最终用户用鼠标控制面板应用程序来设置这些值,应用程序用函数SystemParameterslnfo来取得和设置这些值。
在应用加速时系统对指定相对鼠标移动提供了两个测试。如果指定的沿X轴y轴的距离比第一个鼠标阈值大,并且鼠标的加速等级非零,则操作系统将距离加倍。如果指定的沿X轴或y轴的距离比第二个鼠标阈值大,并且鼠标的加速等级为2,则操作系统将从第一个阈测试得来的距离加倍。这样就允许操作系统将指定鼠标沿X轴或y轴的相对位移加到4倍。
一旦应用了加速,系统用期望的鼠标速度换算合成的值。鼠标速度的范围是从1(最慢)到20(最快),并代表基于鼠标移动的距离指示符移动的数量。缺省值是10,表示对鼠标的移动设有附加的修改。
函数mouse_event需要用的应用程序用来合成鼠标事件。也被应用程序用来取得鼠标位置和鼠标按键状态之外的鼠标信息。例如,如果输入板制造商想将基于画笔的信息传给自己的应用程序,可以写一个直接与输入板硬件通信的动态键接库(DLL),获得附加的信息,并保存到一个队列中。DLL然后调用mouse_event,用标准按键和x/y位置数据,并在参数dwExtralnfo设置排列的附加信息的指针或索引。当应用程序需要附加信息时,调用DLL(连同存贮在dwEXtralnfo中的指针或索引),则DLL返回附加信息。
Windows CE:Windows CE不支持参数 dwFlags取MOOSE EVENTF WHEEL常数。
速查: Windows NT: 3.1及以上版本; Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;输入库:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = =
ReleaseCapture
函数功能:该函数从当前线程中的窗口释放鼠标捕获,并恢复通常的鼠标输入处理。捕获鼠标的窗口接收所有的鼠标输入(无论光标的位置在哪里),除非点击鼠标键时,光标热点在另一个线程的窗口中。
函数原型:BOOL ReleaseCapture(VOlD)
参数:无。
返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetlastError函数。
备注:应用程序在调用函数SetCaPture之后调用此函数。
Windows
95:调用ReleaseCapture会引起失去鼠标捕获的窗日接收一个WM_CAPTURECHANGED消息。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本:Windows
CE:1.0及以上版本;头文件:winuser.h;输入库:User32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = =
SetCapture
函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。
函数原型:HWND SetCapture(HWND hwnd);
参数:
hWnd:当前线程里要捕获鼠标的窗口句柄。
返回值:返回值是上次捕获鼠标的窗口句柄。如果不存在那样的句柄,返回值是NULL。
备注:只有前台窗口才能捕获鼠标。如果一个后台窗口想捕获鼠标,则该窗口仅为其光标热点在该窗口可见部份的鼠标事件接收消息。另外,即使前台窗口已捕获了鼠标,用户也可点击该窗口,将其调入前台。当一个窗日不再需要所有的鼠标输入时,创建该窗口的线程应当调用函数ReleaseCapture来释放鼠标。此函数不能被用来捕获另一进程的鼠标输入。
Windows
95:调用SetCaptune会引起失去鼠标捕获的窗口接收一个WM_CAPTURECHANGED消息。
速查:头文件:Winuser.h:输入库:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = =
SetDoubleCIckTime
函数功能:该函数为鼠标设置双击时间。
函数原型:BOOL SetDoubleCIckTime(UINT ulnterval);
参数:
ulnterval:指定在双击中第一次和第二次点击之间的毫秒数。如果此参数设置为零则系统使用缺省的双击时间,即500毫秒。
返回值:如果函数调用成功,返回非零值。如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。
备注:函数SetDoubleClickTime为系统中所有的窗口修改双击时间。
速查:Windows NT 3.1及以上版本;Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;输入库:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = = =
SwapMouseButton
函数功能:该函数反转或恢复鼠标左右键的含义
函数原型:BOOL SwapMouseButton(BOOL fSwap);
参数:
fSwap:指定鼠标键的含义是否被反转或恢复。如果此参数为TRUE,则左键产生右键消息而右键产生左键消息,如果此参数为FALSE,则恢复鼠标键的最初含义。
返回值:如果在函数调用之前鼠标键的含义已被反转,则返回非零值。如果鼠标键的含义没反转,返回值是零。
备注:鼠标键交换是为给那些用左手操作鼠标的人提供方便。此函数通常只能由控制板调用。尽管一个应用程序能够自由地调用此函数,但鼠标是一种共享资源,其键的含义反转会影响所有应用程序。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows
CE:不支持;头文件:winuser.h;输入库:user32.lib。
= = = = = = = = = = = = = = == = = = = = = = = = = = = = = =
= = = = = = = = =
= = = = = = = = = = = = = = == = = =
TrackMouseEvent
函数功能:当在指定时间内鼠标指针离开或盘旋在一个窗口上时,此函数寄送消息。
函数原型:BOOL TrackMouseEvent(LPTRACKMOUSEEVENT lpEventTrack);
参数:
lpEventTrack;指向结构TRACKMOUSEEVENT的指针。
返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。
此函数能寄送如下消息:
WM_MOUSEHOVER:在上次调用TrackMouseEvent指定的时间里,鼠标盘旋在窗口的客户区。当此消息产生时,盘旋跟踪停止。如果需要进一步的鼠标盘旋跟踪,应用程序应当再次调用TrackMouseEvent。
WM_MOUSELEAVE:鼠标离开上次调用TrackMouseEvent时指定的窗口客户区。当此消息产生时,所有由TrackMouseEvent要求的跟踪都被取消。当鼠标再次进入窗口,并且要求进一步的鼠标盘旋跟踪时,应用程序必须调用TrackMouseEvent。
备注:当鼠标指针在指定时间内停留在指定矩形内,就被认为是处于盘旋状态。调用函数
SystemParameterslnfo并使用SPI_GETMOUSEAOVERWIDTH,SPI_GETMOUSEHOVERAEIGHT和
SFI_GETMOOSEAOVERTIME值来取得矩形的大小和时间。
速查:Windows NT 4.0及以上版本;Windows 98及以上版本;Windows
CE:1.0及以上版本;头文件:winuser.h;输入库:user32.lib。
= = = = = = = = = = = = = = = == = = = = = = = = = = = = = =