转自:http://blog.sina.com.cn/s/blog_82c346de0100u7kq.html
MoveWindow and SetWindowPos
(2011-09-14 15:56:51)
MoveWindow仅仅能设置窗体的大小和位置;SetWindowPos拥有MoveWindow的所有功能之外。还能够设置窗体的层叠关系(如。把指定的窗体放在所有窗体的最上层--always
你全然能够不用MoveWindow,而仅仅用SetWindowPos;可是。在仅仅要设置窗体大小或位置的情况下,你也全然能够使用MoveWindow.
void
void
參数
x指定了CWnd的左边的新位置。
y指定了CWnd的顶部的新位置。
nWidth指定了CWnd的新宽度。
nHeight指定了CWnd的新高度。
bRepaint指定了是否要重画CWnd。
假设为TRUE,则CWnd象通常那样在OnPaint消息处理函数中接收到一条WM_PAINT消息。假设这个參数为FALSE。则不会发生不论什么类型的重画操作。这应用于客户区、非客户区(包含标题条和滚动栏)和因为CWnd移动而露出的父窗体的不论什么部分。当这个參数为FALSE的时候,应用程序必须明白地使CWnd和父窗体中必须重画的部分无效或重画。lpRectCRect对象或RECT结构,指定了新的大小和位置。说明这个函数改变窗体的位置和大小。对于顶层的CWnd对象,x和y參数是相对于屏幕的左上角的。对于子对象。它们是相对于父窗体客户区的左上角的。
MoveWindow函数发送一条WM_GETMINMAXINFO消息。处理这个消息时,CWnd得到一个改变最大和最小的窗体缺省值的机会。假设传递给MoveWindow成员函数的參数超过了这些值。则在WM_GETMINMAXINFO处理函数中能够用最小或最大值来取代这些值。
返回值假设函数成功,则返回非零值。否则返回0。
參数pWndInsertAfter标识了在Z轴次序上位于这个CWnd对象之前的CWnd对象。这个參数能够是指向CWnd对象的指针。也能够是指向下列值的指针:l
l
这个标志对那些已经是非顶层窗体的窗体没有作用。有关这个函数以及这些參数的使用规则參见说明部分。x指定了窗体左边的新位置。y指定了窗体顶部的新位置。cx指定了窗体的新宽度。
cy指定了窗体的新高度。nFlags指定了大小和位置选项。
这个參数能够是下列值的组合:l
l
l
这适用于客户区、非客户区(包含标题和滚动栏)以及被移动窗体覆盖的父窗体的不论什么部分。当这个标志被设置的时候。应用程序必须明白地无效或重画要重画的窗体和父窗体的不论什么部分。
l
l
调用这个成员函数以改变子窗体、弹出窗体和顶层窗体的大小、位置和Z轴次序。
窗体在屏幕上依照它们的Z轴次序排序。在Z轴次序上处于顶端的窗体将程序在全部其他窗体的顶部。
子窗体的全部坐标都是客户坐标(相对于父窗体客户区的左上角)。窗体能够被移动到Z轴次序的顶部,既能够通过将pWndInsertAfter參数设为&wndTopMost,并确保没有设置SWP_NOZORDER标志。也能够通过设置窗体的Z轴次序使它位于全部现存的顶层窗体上方。当一个非顶层窗体被设为顶层窗体时。它拥有的窗体也被设为顶层的。它的拥有者不发生变化。
假设顶层窗体被又一次定位到Z轴次序的底部(&wndBottom)或不论什么非顶层窗体之后。则它将不再是顶层窗体。
当顶层窗体被变为非顶层窗体时。它全部的拥有者和它拥有的全部窗体都被变为非顶层窗体。假设既没有指定SWP_NOACTIVE标志也没有指定SWP_NOZORDER标志(这意味着应用程序要求窗体被同一时候激活并放入指定的Z轴次序),则pWndInsertAfter參数中指定的值将仅仅在下列环境下适用:l
这个窗体不是活动窗体。应用程序不能激活一个非活动窗体但同一时候又不把它带到Z轴次序的顶部。
应用程序能够没有不论什么限制地改变活动窗体的Z轴次序。非顶层窗体可能拥有一个顶层窗体,可是反之则不成立。不论什么被顶层窗体拥有的窗体(比如对话框)都将自己变为顶层窗体。以确保全部被拥有的窗体位于它们的拥有者上方。
在Windows
MoveWindow
函数功能:该函数改变指定窗体的位置和尺寸。 对于顶层窗体,位置和尺寸是相对于屏幕的左上角的:对于子窗体。位置和尺寸是相对于父窗体客户区的左上角坐标的。
它适用于客户区。非客户区(包含标题栏和滚动栏)。及因为移动子窗体而露出的父窗体的区域。假设參数为FALSE,应用程序就必须明白地使窗体无效或重画该窗体和须要刷新的父窗体。
我收集和学习别人的文章,我对这些文章的作者或译者表示感谢 改变控件的大小和位置 用CWnd类的函数MoveWindow()或SetWindowPos()能够改变控件的大小和位置。
void MoveWindow(int x,int y,int nWidth,int nHeight);
SetWindowPos()函数使用更灵活,多用于仅仅改动控件位置而大小不变或仅仅改动大小而位置不变的情况: |