Windows視窗操作函數

來源:互聯網
上載者:User

從VC提供的MFC類派生圖中我們可以看出視窗的派生關係,派生圖,所有的視窗類別都是由CWnd派生。所有CWnd的成員函數在其衍生類別中都可以使用。本節介紹一些常用的功能給大家。

改變視窗狀態:
BOOL EnableWindow( BOOL bEnable = TRUE );可以設定視窗的禁止/允許狀態。BOOL IsWindowEnabled( );可以查詢時段的禁止/允許狀態。
BOOL ModifyStyle( DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0 )/BOOL ModifyStyleEx( DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0 );可以修改視窗的風格,而不需要調用SetWindowLong
BOOL IsWindowVisible( ) 可以檢查視窗是否被顯示。
BOOL ShowWindow( int nCmdShow );將改變視窗的顯示狀態,nCmdShow可取如下值:

  • SW_HIDE 隱藏視窗
  • SW_MINIMIZE SW_SHOWMAXIMIZED 已最小化的視窗
  • SW_RESTORE 恢複視窗
  • SW_SHOW 顯示視窗
  • SW_SHOWMINIMIZED 已最大化的視窗

改變視窗位置:
void MoveWindow( LPCRECT lpRect, BOOL bRepaint = TRUE );可以移動視窗。
void GetWindowRect( LPRECT lpRect ) ;可以得到視窗的矩形位置。
BOOL IsIconic( ) ;可以檢測視窗是否已經縮為表徵圖。
BOOL SetWindowPos( const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags );可以改變視窗的Z次序,此外還可以移動視窗位置。

使視窗失效,印發重繪:
void Invalidate( BOOL bErase = TRUE );使整個視窗失效,bErase將決定視窗是否產生重繪。
void InvalidateRect( LPCRECT lpRect, BOOL bErase = TRUE )/void InvalidateRgn( CRgn* pRgn, BOOL bErase = TRUE );將使指定的矩形/多邊形地區失效。

視窗尋找:
static CWnd* PASCAL FindWindow( LPCTSTR lpszClassName, LPCTSTR lpszWindowName );可以以視窗的類名和視窗名尋找視窗。任一參數設定為NULL表對該參數代表的資料進行任意匹配。如FindWindow("MyWnd",NULL)表明尋找類名為MyWnd的所有視窗。
BOOL IsChild( const CWnd* pWnd ) 檢測視窗是否為子視窗。
CWnd* GetParent( ) 得到父視窗指標。
CWnd* GetDlgItem( int nID ) 通過子視窗ID得到視窗指標。
int GetDlgCtrlID( ) 得到視窗ID值。
static CWnd* PASCAL WindowFromPoint( POINT point );將從螢幕上某點座標得到包含該點的視窗指標。
static CWnd* PASCAL FromHandle( HWND hWnd );通過HWND構造一個CWnd*指標,但該指標在空閑時會被刪除,所以不能儲存供以後使用。

時鐘:
UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );可以建立一個時鐘,如果lpfnTimer回呼函數為NULL,視窗將會收到WM_TIMER訊息,並可以在afx_msg void OnTimer( UINT nIDEvent );中安排處理代碼
BOOL KillTimer( int nIDEvent );刪除一個指定時鐘。

可以利用重載來添加訊息處理的虛函數:
afx_msg int OnCreate( LPCREATESTRUCT lpCreateStruct );視窗被建立時被調用
afx_msg void OnDestroy( );視窗被銷毀時被調用
afx_msg void OnGetMinMaxInfo( MINMAXINFO FAR* lpMMI );需要得到視窗尺寸時被調用
afx_msg void OnSize( UINT nType, int cx, int cy );視窗改變大小後被調用
afx_msg void OnMove( int x, int y );視窗被移動後時被調用
afx_msg void OnPaint( );視窗需要重繪時時被調用,你可以填如繪圖代碼,對於視圖類不需要重載OnPaint,所有繪圖代碼應該在OnDraw中進行
afx_msg void OnChar( UINT nChar, UINT nRepCnt, UINT nFlags );接收到字元輸入時被調用
afx_msg void OnKeyDown/OnKeyUp( UINT nChar, UINT nRepCnt, UINT nFlags );鍵盤上鍵被按下/放開時被調用
afx_msg void OnLButtonDown/OnRButtonDown( UINT nFlags, CPoint point );滑鼠左/右鍵按下時被調用
afx_msg void OnLButtonUp/OnRButtonUp( UINT nFlags, CPoint point );滑鼠左/右鍵放開時被調用
afx_msg void OnLButtonDblClk/OnRButtonDblClk( UINT nFlags, CPoint point );滑鼠左/右鍵雙擊時被調用
afx_msg void OnMouseMove( UINT nFlags, CPoint point );滑鼠在視窗上移動時被調用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.