MoveWindow函数用法

 一、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);

一般使用类成员函数,在初始化函数中使用,移动控件位置,调整控件尺寸。

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
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章