一、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
}