weidagang2046的專欄

          物格而后知致
          隨筆 - 8, 文章 - 409, 評論 - 101, 引用 - 0
          數(shù)據(jù)加載中……

          Windows窗口操作函數(shù)

          ?

          從VC提供的MFC類派生圖中我們可以看出窗口的派生關(guān)系,派生圖,所有的窗口類都是由CWnd派生。所有CWnd的成員函數(shù)在其派生類中都可以使用。本節(jié)介紹一些常用的功能給大家。

          改變窗口狀態(tài):
          BOOL EnableWindow( BOOL bEnable = TRUE );可以設(shè)置窗口的禁止/允許狀態(tài)。BOOL IsWindowEnabled( );可以查詢窗口的禁止/允許狀態(tài)。
          BOOL ModifyStyle( DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0 )/BOOL ModifyStyleEx( DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0 );可以修改窗口的風(fēng)格,而不需要調(diào)用SetWindowLong
          BOOL IsWindowVisible( ) 可以檢查窗口是否被顯示。
          BOOL ShowWindow( int nCmdShow );將改變窗口的顯示狀態(tài),nCmdShow可取如下值:

          • SW_HIDE 隱藏窗口
          • SW_MINIMIZE SW_SHOWMAXIMIZED 最小化窗口
          • SW_RESTORE 恢復(fù)窗口
          • SW_SHOW 顯示窗口
          • SW_SHOWMINIMIZED 最大化窗口

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

          使窗口失效,印發(fā)重繪:
          void Invalidate( BOOL bErase = TRUE );使整個(gè)窗口失效,bErase將決定窗口是否產(chǎn)生重繪。
          void InvalidateRect( LPCRECT lpRect, BOOL bErase = TRUE )/void InvalidateRgn( CRgn* pRgn, BOOL bErase = TRUE );將使指定的矩形/多邊形區(qū)域失效。

          窗口查找:
          static CWnd* PASCAL FindWindow( LPCTSTR lpszClassName, LPCTSTR lpszWindowName );可以以窗口的類名和窗口名查找窗口。任一參數(shù)設(shè)置為NULL表對該參數(shù)代表的數(shù)據(jù)進(jìn)行任意匹配。如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 );將從屏幕上某點(diǎn)坐標(biāo)得到包含該點(diǎn)的窗口指針。
          static CWnd* PASCAL FromHandle( HWND hWnd );通過HWND構(gòu)造一個(gè)CWnd*指針,但該指針在空閑時(shí)會(huì)被刪除,所以不能保存供以后使用。

          時(shí)鐘:
          UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );可以創(chuàng)建一個(gè)時(shí)鐘,如果lpfnTimer回調(diào)函數(shù)為NULL,窗口將會(huì)收到WM_TIMER消息,并可以在afx_msg void OnTimer( UINT nIDEvent );中安排處理代碼
          BOOL KillTimer( int nIDEvent );刪除一個(gè)指定時(shí)鐘。

          可以利用重載來添加消息處理的虛函數(shù):
          afx_msg int OnCreate( LPCREATESTRUCT lpCreateStruct );窗口被創(chuàng)建時(shí)被調(diào)用
          afx_msg void OnDestroy( );窗口被銷毀時(shí)被調(diào)用
          afx_msg void OnGetMinMaxInfo( MINMAXINFO FAR* lpMMI );需要得到窗口尺寸時(shí)被調(diào)用
          afx_msg void OnSize( UINT nType, int cx, int cy );窗口改變大小后被調(diào)用
          afx_msg void OnMove( int x, int y );窗口被移動(dòng)后時(shí)被調(diào)用
          afx_msg void OnPaint( );窗口需要重繪時(shí)時(shí)被調(diào)用,你可以填如繪圖代碼,對于視圖類不需要重載OnPaint,所有繪圖代碼應(yīng)該在OnDraw中進(jìn)行
          afx_msg void OnChar( UINT nChar, UINT nRepCnt, UINT nFlags );接收到字符輸入時(shí)被調(diào)用
          afx_msg void OnKeyDown/OnKeyUp( UINT nChar, UINT nRepCnt, UINT nFlags );鍵盤上鍵被按下/放開時(shí)被調(diào)用
          afx_msg void OnLButtonDown/OnRButtonDown( UINT nFlags, CPoint point );鼠標(biāo)左/右鍵按下時(shí)被調(diào)用
          afx_msg void OnLButtonUp/OnRButtonUp( UINT nFlags, CPoint point );鼠標(biāo)左/右鍵放開時(shí)被調(diào)用
          afx_msg void OnLButtonDblClk/OnRButtonDblClk( UINT nFlags, CPoint point );鼠標(biāo)左/右鍵雙擊時(shí)被調(diào)用
          afx_msg void OnMouseMove( UINT nFlags, CPoint point );鼠標(biāo)在窗口上移動(dòng)時(shí)被調(diào)用

          from: http://tech.china.com/zh_cn/netschool/programme/c/656/20001207/01_4e.html

          posted on 2006-11-15 13:57 weidagang2046 閱讀(1818) 評論(0)  編輯  收藏 所屬分類: Windows

          主站蜘蛛池模板: 沐川县| 克拉玛依市| 西安市| 宁阳县| 溧水县| 临夏市| 县级市| 左贡县| 郴州市| 普定县| 体育| 广州市| 庆城县| 河北区| 长春市| 柘荣县| 准格尔旗| 莱芜市| 敦化市| 绩溪县| 昌江| 伊吾县| 阿图什市| 金沙县| 潢川县| 友谊县| 区。| 辰溪县| 辽阳市| 碌曲县| 湖南省| 莆田市| 小金县| 丰镇市| 荆州市| 中西区| 任丘市| 南雄市| 黑水县| 通渭县| 西吉县|