发布时间:2025-12-10 19:20:26 浏览次数:7
MoveWindow函数用法[通俗易懂]win32API函数:BOOLMoveWindow(_In_HWNDhWnd,_In_intX,_In_intY,_In_intnWidth,_In_intnHeight,_In_BOOLbRepaint);CWnd类成员函数:voidMoveWindow(intx,inty,intnWi…
一、MoveWindow
win32 API函数:BOOL MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint);CWnd类成员函数:void MoveWindow(int x, int y, int nWidth, int nHeight, BOOL bRepaint = TRUE);//x left, y top, nWidth 宽度, nHeight 高度void MoveWindow(LPCRECT lpRect, BOOL bRepaint = TRUE); 是否还在为Ide开发工具频繁失效而烦恼,来吧关注以下公众号获取最新激活方式。亲测可用!
【正版授权,激活自己账号】:Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】:官方授权 正版激活 自己使用,支持Jetbrains家族下所有IDE…
一般使用类成员函数,在初始化函数中使用,移动控件位置,调整控件尺寸。
BOOL CMFC_MoveWindowDlg::OnInitDialog(){CDialogEx::OnInitDialog();// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动// 执行此操作SetIcon(m_hIcon, TRUE);// 设置大图标SetIcon(m_hIcon, FALSE);// 设置小图标// TODO: 在此添加额外的初始化代码//::MoveWindow(GetSafeHwnd(), 0, 0, 600, 550, TRUE); //相对于屏幕左上角移动this->MoveWindow(0, 0, 600, 550);//这里并没有将对话框移动到屏幕左上角?可以设置窗口的属性! //但是不写在此函数中会生效return TRUE; // 除非将焦点设置到控件,否则返回 TRUE}void CMFC_MoveWindowDlg::OnBnClickedOk(){// TODO: 在此添加控件通知处理程序代码//CDialogEx::OnOK();this->MoveWindow(0, 0, 600, 550);//这里生效了} ps:
False为居中,改为True,对话框移动到屏幕左上角。
MoveWindow移动控件位置是相对于父窗口的客户区左上角。(反正是以上一个窗口为参照移动,具体要看情况)
void CMFC_MoveWindowDlg::OnBnClickedBtn2(){// TODO: 在此添加控件通知处理程序代码GetDlgItem(IDOK)->MoveWindow(0, 0, 100, 80);} 运行效果如下:
二、SetWindowPos(与MoveWindow用法相似,也是相对于父窗口或者屏幕移动)
1.
API函数:BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter,int X,int Y,int cx,int cy,UINT uFlags);
hWnd 窗口句柄
hWndInsertAfter对话框在Z轴上的显示顺序
#define HWND_TOP ((HWND)0)
#define HWND_BOTTOM ((HWND)1)
#define HWND_TOPMOST ((HWND)-1)
#define HWND_NOTOPMOST ((HWND)-2)
nFlags窗口尺寸和定位的标志
2.
CWnd类成员函数:BOOL SetWindowPos(const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags);
pWndInsertAfter对话框在Z轴上的显示顺序(指针类型)
static AFX_DATA const CWnd wndTop;
static AFX_DATA const CWnd wndBottom;
static AFX_DATA const CWnd wndTopMost;
static AFX_DATA const CWnd wndNoTopMost;
X 左上角x坐标,Y 左上角y坐标,cx 控件宽度, cy 控件高度
nFlags窗口尺寸和定位的标志
#define SWP_NOSIZE 0x0001 不改变尺寸(忽略cx,cy)
#define SWP_NOMOVE 0x0002 不移动窗口位置(忽略x,y)
#define SWP_NOZORDER 0x0004 维持当前Z序(忽略hWndlnsertAfter参数)
#define SWP_NOREDRAW 0x0008
#define SWP_NOACTIVATE 0x0010
#define SWP_FRAMECHANGED 0x0020 /* The frame changed: send WM_NCCALCSIZE */
#define SWP_SHOWWINDOW 0x0040 显示窗口
#define SWP_HIDEWINDOW 0x0080 隐藏窗口
#define SWP_NOCOPYBITS 0x0100
#define SWP_NOOWNERZORDER 0x0200 /* Don’t do owner Z ordering */
#define SWP_NOSENDCHANGING 0x0400 /* Don’t send WM_WINDOWPOSCHANGING */
#define SWP_DRAWFRAME SWP_FRAMECHANGED
#define SWP_NOREPOSITION SWP_NOOWNERZORDER
#define SWP_DEFERERASE 0x2000
#define SWP_ASYNCWINDOWPOS 0x4000
BOOL CMFC_CButtonDlg::OnInitDialog(){CDialogEx::OnInitDialog();// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动// 执行此操作SetIcon(m_hIcon, TRUE);// 设置大图标SetIcon(m_hIcon, FALSE);// 设置小图标// TODO: 在此添加额外的初始化代码//::SetWindowPos(GetSafeHwnd(), HWND_TOPMOST, 0, 0, -1, -1, SWP_NOSIZE);//没有移动到窗口左上角this->SetWindowPos(&wndTop, 0, 0, 700, 650, SWP_SHOWWINDOW);//移动到窗口左上角,并改变尺寸return TRUE; // 除非将焦点设置到控件,否则返回 TRUE}