LONG GetWindowLong( HWND hWnd,int nIndex )
参数:
hWnd:指定窗口的句柄
nIndex:需要获得的信息的类型
值 功能
nIndex取值如下:
GWL_EXSTYLE 得到扩展的窗口风格
GWL_STYLE 得到窗口风格
GWL_WNDPROC 得到窗口回调函数的地址,或者句柄。得到后必须使用CallWindowProc函数来调用
GWL_HINSTANCE 得到应用程序运行实例的句柄
GWL_HWNDPARENT 得到父窗口的句柄
GWL_ID 得到窗口的标识符
GWL_USERDATA 得到和窗口相关联的32位的值(每一个窗口都有一个有意留给创建窗口的应用程序是用的32位
的值)
当hWnd标识一个对话框时可以使用下面的值
Value Action
DWL_DLGPROC 得到对话框回调函数的地址,或者句柄。得到后必须使用CallWindowProc函数来调用
DWL_MSGRESULT 得到对话框回调函数中消息处理过程的返回值
DWL_USER 得到额外的应用程序私有信息,如一些句柄和指针等
返回值:
成功时,返回一个请求的32位的值
失败时,返回0,可以使用GetLastError来取得错误信息
————————————————————————————————
LONG SetWindowLong( HWND hWnd, int nIndex, LONG dwNewLong );
- hWnd 窗口句柄,并间接处理窗口所属的类。
- nIndex 指定要设置的值的从零开始的偏移量。有效值在零范围内,通过额外窗口内存的字节数减去4;例如,如果指定了 12 个或更多字节的额外内存,则值 8 将是第三个 32 位整数的索引。对于 Windows 嵌入式 CE,字节偏移量必须为 4 个字节的倍数。
- 若要设置任何其他值,请指定下列值之一
-
价值 描述 GWL_EXSTYLE
设置新的扩展窗口样式。
GWL_STYLE
设置新的窗口样式。
GWL_WNDPROC
为窗口过程设置新地址。如果窗口与调用线程不属于同一进程,则无法更改此属性。
GWL_ID
设置窗口的新标识符。
GWL_USERDATA
设置与窗口关联的 32 位值。每个窗口都有一个相应的 32 位值,供创建窗口的应用程序使用。Windows CE 2.0 及更高版本支持此值,但 Windows CE 1.0 和 1.01 不支持。
当hWnd参数标识对话框时,以下值也可用。
价值 | 描述 |
---|---|
DWL_DLGPROC | 设置对话框过程的新地址。Windows CE 2.0 及更高版本支持此值,但 Windows CE 1.0 和 1.01 不支持。 |
DWL_MSGRESULT | 设置在对话框过程中处理的消息的返回值。 |
DWL_USER | 设置应用程序专用的新额外信息,如句柄或指针。 |
- dwNewLong 指定替换值。
————————————————————————————————
HWND SetParent( [in] HWND hWndChild, [in, optional] HWND hWndNewParent );
[in] hWndChild
子窗口的句柄。
[in, optional] hWndNewParent
新父窗口的句柄。如果此参数为 NULL,则桌面窗口将成为新的父窗口。如果此参数HWND_MESSAGE,则子窗口将变为仅消息窗口。
返回值:
如果函数成功,则返回值是上一个父窗口的句柄。
如果函数失败,则返回值为NULL。
————————————————————————————————
BOOL GetClientRect(HWND hWnd,LPRECT lpRect);
函数功能:该函数获取窗口客户区的坐标。客户区坐标指定客户区的左上角和右下角。由于客户区坐标是相对子窗口客户区的左上角而言的,因此左上角坐标为(0,0);
HWND hWnd 为客户区窗口句柄;
LPRECT lpRect 为客户区存储坐标的对象RECT;
GetClientRect相当于GetWindowRect和ScreenToClient区别 - yongtaiyu - 博客园GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置。 GetClientRect取得窗口客户区(不包括非客https://www.cnblogs.com/yongtaiyu/archive/2011/05/18/2049554.html————————————————————————————————
BOOL SetWindowPos(HWN hWnd,HWND hWndlnsertAfter,int X,int Y,int cx,int cy,UNIT.Flags);
函数功能:该函数改变一个子窗口,弹出式窗口式顶层窗口的尺寸,位置和Z序。子窗口,弹出式窗口,及顶层窗口根据它们在屏幕上出现的顺序排序、顶层窗口设置的级别最高,并且被设置为Z序的第一个窗口。
hWnd:窗口句柄。
hWndlnsertAfter:在z序中的位于被置位的窗口前的窗口句柄。该参数必须为一个窗口句柄,或下列值之一:
HWND_BOTTOM:将窗口置于Z序的底部。如果参数hWnd标识了一个顶层窗口,则窗口失去顶级位置,并且被置在其他窗口的底部。
HWND_DOTTOPMOST:将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。如果窗口已经是非顶层窗口则该标志不起作用。
HWND_TOP:将窗口置于Z序的顶部。
HWND_TOPMOST:将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。
x:以客户坐标指定窗口新位置的左边界。
Y:以客户坐标指定窗口新位置的顶边界。
cx:以像素指定窗口的新的宽度。
cy:以像素指定窗口的新的高度。
//uFlags 参数可选值:
SWP_NOSIZE = 1; {忽略 cx、cy, 保持大小}
SWP_NOMOVE = 2; {忽略 X、Y, 不改变位置}
SWP_NOZORDER = 4; {忽略 hWndInsertAfter, 保持 Z 顺序}
SWP_NOREDRAW = 8; {不重绘}
SWP_NOACTIVATE = $10; {不激活}
SWP_FRAMECHANGED = $20; {强制发送 WM_NCCALCSIZE 消息, 一般只是在改变大小时才发送此消息}
SWP_SHOWWINDOW = $40; {显示窗口}
SWP_HIDEWINDOW = $80; {隐藏窗口}
SWP_NOCOPYBITS = $100; {丢弃客户区}
SWP_NOOWNERZORDER = $200; {忽略 hWndInsertAfter, 不改变 Z 序列的所有者}
SWP_NOSENDCHANGING = $400; {不发出 WM_WINDOWPOSCHANGING 消息}
SWP_DRAWFRAME = SWP_FRAMECHANGED; {画边框}
SWP_NOREPOSITION = SWP_NOOWNERZORDER;{}
SWP_DEFERERASE = $2000; {防止产生 WM_SYNCPAINT 消息}
SWP_ASYNCWINDOWPOS = $4000; {若调用进程不拥有窗口, 系统会向拥有窗口的线程发出需求}
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误消息,请调用GetLastError函数。
备注:如果设置了SWP_SHOWWINDOW和SWP_HIDEWINDOW标志,则窗口不能被移动和改变大小。如果使用SetWindowLoog改变了窗口的某些数据,则必须调用函数SetWindowPos来作真正的改变。使用下列的组合标志:SWP_NOMOVEISWP_NOSIZEISWP_FRAMECHANGED。
有两种方法将窗口设为最顶层窗口:一种是将参数hWndlnsertAfter设置为HWND_TOPMOST并确保没有设置SWP_NOZORDER标志;另一种是设置窗口在Z序中的位置以使其在其他存在的窗口之上。当一个窗口被置为最顶层窗口时