Windows視窗操作函式

2021-04-20 03:17:47 字數 2849 閱讀 2969

從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可取如下值:

改變視窗位置:

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 );滑鼠在視窗上移動時被呼叫

windows視窗過程函式名詞解析

lresult callback wndproc hwnd hwnd,uint message,wparam wparam,lparam lparam 1.lrresultlresult msdn 32 bit value returned from a windows procedure or c...

windows視窗關係

乙個視窗有很多方式關聯到使用者或者其它的視窗。乙個視窗可能是 自有視窗?前景視窗或者背景視窗。乙個視窗總有乙個 z序 用以關聯到其它視窗。什麼是 z序 下面會簡單的敘述一下 每個程序可以有多個可執行的執行緒。每個執行緒都可以建立視窗。乙個執行緒建立的了乙個視窗,並且這個視窗時使用者正在工作和使用的,...

WINDOWS視窗座標

不只是有最大最小關閉按鈕的那個矩形東西被稱為視窗,所有控制項是視窗。視窗中的子視窗是視窗。視窗的組成 外部邊框。視窗border屬性為 thin,resizing時,有3個畫素寬的邊框。系統區 視窗上部藍色部分,有最大最小關閉按鈕的那乙個部分。客戶區 除去外部邊框和系統區的部分。系統區有統一的機制處...