movewindow(MoveWindow失败)
[求助]MoveWindow怎么劫持其他窗口到我的控件里
是我没听明白吗你的意思是移到你的控件的位置上 还是将两个窗口"粘"一起?
在MFC怎么中设置窗口大小和位置?
第一种方法:使用SetWindowPos函数
CWnd::SetWindowPosBOOL SetWindowPos( const CWnd* pWndInsertAfter, int x, int y, int cx, int cy,UINT nFlags );
返回值如果函数成功,则返回非零值;否则返回0。
说明
调用这个成员函数以改变子窗口、弹出窗口和顶层窗口的大小、位置和Z轴次序。窗口在屏幕上按照它们的Z轴次序排序。在Z轴次序上处于顶端的窗口将程序在所有其它窗口的顶部。子窗口的所有坐标都是客户坐标(相对于父窗口客户区的左上角)。窗口可以被移动到Z轴次序的顶部,既可以通过将pWndInsertAfter参数设为wndTopMost,并确保没有设置SWP_NOZORDER标志,也可以通过设置窗口的Z轴次序使它位于所有现存的顶层窗口上方。当一个非顶层窗口被设为顶层窗口时,它拥有的窗口也被设为顶层的。它的拥有者不发生变化。如果顶层窗口被重新定位到Z轴次序的底部(wndBottom)或任何非顶层窗口之后,则它将不再是顶层窗口。当顶层窗口被变为非顶层窗口时,它所有的拥有者和它拥有的所有窗口都被变为非顶层窗口。如果既没有指定SWP_NOACTIVE标志也没有指定SWP_NOZORDER标志(这意味着应用程序要求窗口被同时激活并放入指定的Z轴次序),则pWndInsertAfter参数中指定的值将只在下列环境下适用:l 在pWndInsertAfter参数中既没有指定wndTopMost也没有指定wndNoTopMost。
这个窗口不是活动窗口。应用程序不能激活一个非活动窗口但同时又不把它带到Z轴次序的顶部。应用程序可以没有任何限制地改变活动窗口的Z轴次序。非顶层窗口可能拥有一个顶层窗口,但是反之则不成立。任何被顶层窗口拥有的窗口(例如对话框)都将自己变为顶层窗口,以确保所有被拥有的窗口位于它们的拥有者上方。在Windows 3.1或更新的版本中,可以将窗口移动到Z轴次序的顶部,并通过设置它们的WS_EX_TOPMOST风格而将之锁定在那里。这种顶层窗口即使在失去活动状态以后也会保持顶层位置。例如,选择WinHelp的Always On Top命令会使帮助窗口变为顶层,并且在你返回应用程序之后它还保持可见。要创建一个顶层窗口,应在调用SetWindowPos的时候将pWndInsertAfter参数设为wndTopMost,或者在创建窗口的时候设置WS_EX_TOPMOST风格。如果Z轴次序中包含了任何具有WS_EX_TOPMOST风格的窗口,则用wndTopMost移动的窗口将被放到所有非顶层窗口的顶部,但是位于任何顶层窗口的下面。当应用程序激活一个不具有WS_EX_TOPMOST风格的非活动窗口时,该窗口将被移动到所有非顶层窗口的上方,但是位于所有顶层窗口的下方。如果在调用SetWindowPos的时候pWndInsertAfter参数被设为wndBottom,并且CWnd是一个顶层窗口,则该窗口失去顶层状态(WS_EX_BOTTOM风格被清除),并且系统将窗口放在Z轴次序的底部 。
参数pWndInsertAfter
标识了在Z轴次序上位于这个CWnd对象之前的CWnd对象。这个参数可以是指向CWnd对象的指针,也可以是指向下列值的指针:
wndBottom 将窗口放在Z轴次序的底部。如果这个CWnd是一个顶层窗口,则窗口将失去它的顶层状态;系统将这个窗口放在其它所有窗口的底部。
wndTop 将窗口放在Z轴次序的顶部。
wndTopMost 将窗口放在所有非顶层窗口的上面。这个窗口将保持它的顶层位置,即使它失去了活动状态。
wndNoTopMost 将窗口重新定位到所有非顶层窗口的顶部(这意味着在所有的顶层窗口之下)。这个标志对那些已经是非顶层窗口的窗口没有作用。有关这个函数以及这些参数的使用规则参见说明部分。
x指定了窗口左边的新位置。
y指定了窗口顶部的新位置。
cx指定了窗口的新宽度。
cy指定了窗口的新高度。
nFlags指定了大小和位置选项。这个参数可以是下列值的组合:
SWP_DRAWFRAME 围绕窗口画出边框(在创建窗口的时候定义)。
SWP_FRAMECHANGED 向窗口发送一条WM_NCCALCSIZE消息,即使窗口的大小不会改变。如果没有指定这个标志,则仅当窗口的大小发生变化时才发送WM_NCCALCSIZE消息。
SWP_HIDEWINDOW 隐藏窗口。
SWP_NOACTIVATE 不激活窗口。如果没有设置这个标志,则窗口将被激活并移动到顶层或非顶层窗口组(依赖于pWndInsertAfter参数的设置)的顶部。
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 保持当前的次序(忽略pWndInsertAfter)。
SWP_SHOWWINDOW 显示窗口。
========================================================================
第二种方法:使用MoveWindow函数
void CWnd::MoveWindow( int x, int y, int nWidth, int nHeight, BOOL bRepaint = TRUE );
void CWnd::MoveWindow( LPCRECT lpRect, BOOL bRepaint = TRUE );
参数
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处理函数中可以用最小或最大值来代替这些值。
让物体移动到指定位置要用什么函数
MoveWindow 试试看
CWnd::MoveWindow
void MoveWindow( int x, int y, int nWidth, int nHeight, BOOL bRepaint = TRUE );
void MoveWindow( LPCRECT lpRect, BOOL bRepaint = TRUE );
参数: x 指定了CWnd的左边的新位置。
y 指定了CWnd的顶部的新位置。
nWidth 指定了CWnd的新宽度。
nHeight 指定了CWnd的新高度。
bRepaint 指定了是否要重画CWnd。如果为TRUE,则CWnd象通常那样在OnPaint消息处理函数中接收到一条WM_PAINT消息。如果这个参数为FALSE,则不会发生任何类型的重画操作。这应用于客户区、非客户区(包括标题条和滚动条)和由于CWnd移动而露出的父窗口的任何部分。当这个参数为FALSE的时候,应用程序必须明确地使CWnd和父窗口中必须重画的部分无效或重画。
lpRect CRect对象或RECT结构,指定了新的大小和位置。
说明:
这个函数改变窗口的位置和大小。
对于顶层的CWnd对象,x和y参数是相对于屏幕的左上角的。对于子对象,它们是相对于父窗口客户区的左上角的。
MoveWindow函数发送一条WM_GETMINMAXINFO消息。处理这个消息时,CWnd得到一个改变最大和最小的窗口缺省值的机会。如果传递给MoveWindow成员函数的参数超过了这些值,则在WM_GETMINMAXINFO处理函数中可以用最小或最大值来代替这些值。
易语言 修改指定窗口位置
.版本
2
.子程序
窗口移动,
,
公开,
移动指定窗口(无返回值)
.参数
临时句柄,
整数型,
,
欲移动窗口的句柄
.参数
窗口新左边,
整数型,
可空,
可空:原左边不变
.参数
窗口新顶边,
整数型,
可空,
可空:原顶边不变
.参数
窗口新宽度,
整数型,
可空,
可空:原宽度不变
.参数
窗口新高度,
整数型,
可空,
可空:原高度不变
.局部变量
位置大小,
矩形坐标
_窗口取外边框
(临时句柄,
位置大小)
.如果真
(是否为空
(窗口新左边))
窗口新左边
=
位置大小.矩形左边
.如果真结束
.如果真
(是否为空
(窗口新顶边))
窗口新顶边
=
位置大小.矩形顶边
.如果真结束
.如果真
(是否为空
(窗口新宽度))
窗口新宽度
=
位置大小.矩形右边
-
位置大小.矩形左边
.如果真结束
.如果真
(是否为空
(窗口新高度))
窗口新高度
=
位置大小.矩形底边
-
位置大小.矩形顶边
.如果真结束
_移动窗口
(临时句柄,
窗口新左边,
窗口新顶边,
窗口新宽度,
窗口新高度,
1)
.版本
2
.DLL命令
_窗口取外边框,
逻辑型,
,
"GetWindowRect",
公开,
user32.dll获得整个窗口的范围矩形,窗口的边框、标题栏、滚动条及菜单等都在这个矩形内
.参数
句柄,
整数型,
,
Long,想获得范围矩形的那个窗口的句柄
.参数
大小,
矩形坐标,
传址,
RECT,屏幕坐标中随同窗口装载的矩形(左边,顶边,右边,底边)
.DLL命令
_移动窗口,
整数型,
,
"MoveWindow",
,
user32.dll
.参数
hwnd,
整数型,
,
备注1无法读取,请您提供该API名报易BBS中ID号klasp完善。
.参数
x,
整数型,
,
备注2无法读取,请您提供该API名报易BBS中ID号klasp完善。
.参数
y,
整数型,
,
备注3无法读取,请您提供该API名报易BBS中ID号klasp完善。
.参数
n,
整数型,
,
备注4无法读取,请您提供该API名报易BBS中ID号klasp完善。
.参数
nHeight,
整数型,
,
备注5无法读取,请您提供该API名报易BBS中ID号klasp完善。
.参数
bRepaint,
整数型,
,
备注6无法读取,请您提供该API名报易BBS中ID号klasp完善。
.版本
2
.数据类型
矩形坐标,
公开
.成员
矩形左边,
整数型
.成员
矩形顶边,
整数型
.成员
矩形右边,
整数型
.成员
矩形底边,
整数型
下面是设置窗口状态的API:
.版本
2
.DLL命令
设置窗口状态,
整数型,
,
"ShowWindow",
,
控制窗口的状态(在vb里使用:针对vb窗体及控件,请使用对应的vb属性)
成功:返回TRUE(非零),失败:返回FALSE(零)
.参数
hwnd,
整数型,
,
窗口句柄,要向这个窗口应用由命令
.参数
nCmdShow,
整数型,
,
为窗口指定的一个命令。请用下述任何一个常数:0
隐藏窗口
1
显示窗口
2
最小化激活
3
最大化激活
4
还原
6
最小化取消激活
7
最小化
9
还原激活