程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> General Window

General Window

編輯:C語言基礎知識

從VC提供的MFC類派生圖中我們可以看出窗口的派生關系,派生圖,

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

所有的窗口類都是由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,所有繪圖

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved