函數功能:該函數改變指定視窗的位置和尺寸。對於頂層視窗,位置和尺寸是相對於螢幕的左上方的:對於子視窗,位置和尺寸是相對於父視窗客戶區的左上方座標的。 函數原型:BOOL MoveWindow(HWND hWnd.int x.int y,int nWidth,int nHeight,BOOL BRePaint); 參數: hWnd:視窗控制代碼。 x:指定視窗的新位置的左邊界。 Y:指定視窗的新位置的頂部邊界。 nWidth:指定視窗的新的寬度。 nHaight:指定視窗的新的高度。 bRepaint:確定視窗是否被重新整理。如果該參數為TRUE,視窗接收一個WM_PAINT訊息;如果參數為FALSE,不發生任何重新整理動作。它適用於客戶區,非客戶區(包括標題列和捲軸),及由於移動子視窗而露出的父視窗的地區。如果參數為FALSE,應用程式就必須明確地使視窗無效或重畫該視窗和需要重新整理的父視窗。 傳回值:如果函數成功,傳回值為非零;如果函數失敗,傳回值為零。若想獲得更多錯誤資訊,請調用GetLastError函數。 備忘:如果bRepaint為TRUE,系統在視窗移動後立即給視窗過程發送WM_PAINT訊息(即由MoveWindow函數調用 UPdateWindow函數)。如果bRepaint 為FALSE,系統將WM_PAINT訊息放在該視窗的訊息佇列中。訊息迴圈只有在派遣完訊息佇列中的其他訊息時才派遣WM_PAINT訊息。 MoveWindow給視窗發送WM_WfNOWPOSCHANGING,WM_WINDOWPOSCHANGED,WM_MOVE,WM_SIZE和WM_NCCALCSIZE訊息, 速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows CE:1.0以上版本:標頭檔:winuser.h;庫檔案:user32.lib。 我收集和學習別人的文章,我對這些文章的作者或譯者表示感謝 改變控制項的大小和位置 用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 ); //編輯控制項的大小和位置都改變 以上方法也適用於各種視窗 本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/godyxfcode/archive/2007/04/20/1573295.aspx |