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
}

 

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