1. 程式人生 > >MFC 控制元件的大小及定位

MFC 控制元件的大小及定位

用CWnd類的函式MoveWindow()或SetWindowPos()可以改變控制元件的大小和位置。

void MoveWindow(int x,int y,int nWidth,int nHeight);
void MoveWindow(LPCRECT lpRect);

第一種用法需給出控制元件新的座標和寬度、高度;
第二種用法給出存放位置的CRect物件;
例:
CWnd *pWnd;
pWnd = GetDlgItem( IDC_EDIT1 );    //獲取控制元件指標,IDC_EDIT1為控制元件ID號
pWnd->MoveWindow( CRect(0,0,100,100) );    //在視窗左上角顯示一個寬100、高100的編輯控制元件

SetWindowPos()函式使用更靈活,多用於只修改控制元件位置而大小不變或只修改大小而位置不變的情況:
BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);
第一個引數我不會用,一般設為NULL;
x、y控制元件位置;cx、cy控制元件寬度和高度;
nFlags常用取值:
SWP_NOZORDER:忽略第一個引數;
SWP_NOMOVE:忽略x、y,維持位置不變;
SWP_NOSIZE:忽略cx、cy,維持大小不變;
例:

CWnd *pWnd;
pWnd = GetDlgItem( IDC_BUTTON1 );    //獲取控制元件指標,IDC_BUTTON1為控制元件ID號
pWnd->SetWindowPos( NULL,50,80,0,0,SWP_NOZORDER | SWP_NOSIZE );    //把按鈕移到視窗的(50,80)處
pWnd = GetDlgItem( IDC_EDIT1 );
pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER | SWP_NOMOVE );    //把編輯控制元件的大小設為(100,80),位置不變
pWnd = GetDlgItem( IDC_EDIT1 );
pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER );    //編輯控制元件的大小和位置都改變

以上方法也適用於各種視窗。