VC 各種情況下的視窗控制代碼的獲取

2021-09-06 18:21:42 字數 2984 閱讀 2490

afxgetmainwnd

afxgetmainwnd獲取自身視窗控制代碼

hwnd hwnd = afxgetmainwnd()->m_hwnd;

gettopwindow

函式功能:該函式檢查與特定父視窗相聯的子視窗z序(z序:垂直螢幕的方向,即疊放次序),並返回在z序頂部的子視窗的控制代碼。

函式原型:hwnd gettopwindow(hwnd hwnd);

引數:hwnd:被查序的父視窗的控制代碼。如果該引數為null,函式返回z序頂部的視窗控制代碼。

返回值:

如果函式成功,返回值為在z序頂部的子視窗控制代碼。如果指定的視窗無子視窗,返回值為null。

getforegroundwindow

函式功能:該函式返回當前系統的前台視窗的視窗控制代碼。

函式原型:hwnd getforegroundwindow(void)  

返回值:函式返回前台窗回的控制代碼。

getactivewindow

函式原型:hwnd getactivewindow(void)

getsafehwnd

函式功能:獲取某個視窗物件(cwnd的派生物件)指標的控制代碼(hwnd)時,最安全的方法是使用getsafehwnd()函式。

通過下面的例子來看其理由:

cwnd *pwnd = findwindow(「explorewclass」,null); //希望找到資源管理器

hwnd hwnd = pwnd->m_hwnd; //得到它的hwnd

這樣的**當開始得到的pwnd為空的時候就會出現乙個「general protection error」,並關閉應用程式,因為一般不能對乙個null指標訪問其成員,如果用下面的**:

cwnd *pwnd = findwindow(「explorewclass」,null); //希望找到資源管理器

hwnd hwnd = pwnd->getsafehwnd(); //得到它的hwnd

就不會出現問題,因為儘管當pwnd是null時,getsafehwnd仍然可以用,只是返回null

iswindowvisible

函式功能:該函式獲得給定視窗的可視狀態。

函式原型:bool iswindowvisible(hwnd hwnd);

引數;hwnd:被測試視窗的控制代碼。

返回值:

如果指定的視窗及其父視窗具有ws_visible風格,返回值為非零;如果指定的視窗及其父視窗不具有ws_visible風格,返回值為零。由於返回值表明了視窗是否具有ws_visible風格,因此,即使該視窗被其他視窗遮蓋,函式返回值也為非零。

備註:視窗的可視狀態由ws_visible位指示。當設定了ws_visible位,視窗就可顯示,而且只要視窗具有ws_visible風格,任何畫在視窗的資訊都將被顯示。

iswindow

函式功能:該函式確定給定的視窗控制代碼是否標示乙個已存在的視窗。 

函式原型:bool iswindow(hwnd hwnd);

引數:hwnd:被測試視窗的控制代碼。

返回值:

如果視窗控制代碼標識了乙個已存在的視窗,返回值為ture;如果視窗控制代碼未標識乙個已存在視窗,返回值為false。

findwindow

hwnd findwindow(lpcstr lpclassname,lpcstr lpwindowname );

引數:lpclassname

指向乙個以null結尾的、用來指定類名的字串或乙個可以確定類名字串的原子。如果這個引數是乙個原子,那麼它必須是乙個在呼叫此函式前已經通過globaladdatom函式建立好的全域性原子。這個原子(乙個16bit的值),必須被放置在lpclassname的低位位元組中,lpclassname的高位位元組置零。

lpwindowname

指向乙個以null結尾的、用來指定視窗名(即視窗標題)的字串。如果此引數為null,則匹配所有視窗名。

返回值:

如果函式執行成功,則返回值是擁有指定視窗類名或視窗名的視窗的控制代碼。

//set title for view』s mdi child frame window .

getparentframe ( ) —> setwindowtext ("_t ("mdi child frame new title") )

//set title for dialog』s push button control.

getdigitem (idc_button) —> setwindowtext (_t ("button new title ") )

其他:1、直接得控制代碼 

getactivewindow();        //得啟用視窗控制代碼

getforegroundwindows();           //的前台視窗控制代碼

2、列舉型的

hwnd getwindow(hwnd hwnd, uint ucmd );      //要先有hwnd,然後指明ucmd 的關係

hwnd findwindowex( hwnd hwndparent,

hwnd hwndchildafter,  

lpctstr lpszclass, l

pctstr zwindow);   

//由類名和視窗標題得控制代碼,可能不只乙個,所以不唯一確定

3、其他引數的控制代碼

程序id:

mark:由控制代碼得id可以用getwindowthreadprocessid()

而由id的控制代碼只能列舉+比較了

歷遍全部窗體,並取得他們對應的hwnd進一步取得對應pid,符合已知pid的就是了,當然可能要判斷一下窗體狀態了,如果程序只有乙個窗體那就不用了。

呼叫enumwindows(enumwindowsproc, (lparam)getdlgitem(idc_list1));

VC 各種情況下的視窗控制代碼的獲取

afxgetmainwnd afxgetmainwnd獲取自身視窗控制代碼 hwnd hwnd afxgetmainwnd m hwnd gettopwindow 函式功能 該函式檢查與特定父視窗相聯的子視窗z序 z序 垂直螢幕的方向,即疊放次序 並返回在z序頂部的子視窗的控制代碼。函式原型 hwn...

VC 各種情況下的視窗控制代碼的獲取

afxgetmainwnd afxgetmainwnd獲取自身視窗控制代碼 hwnd hwnd afxgetmainwnd m hwnd gettopwindow 函式功能 該函式檢查與特定父視窗相聯的子視窗z序 z序 垂直螢幕的方向,即疊放次序 並返回在z序頂部的子視窗的控制代碼。函式原型 hwn...

VC 各種情況下的視窗控制代碼的獲取

afxgetmainwnd afxgetmainwnd獲取自身視窗控制代碼 hwnd hwnd afxgetmainwnd m hwnd gettopwindow 函式功能 該函式檢查與特定父視窗相聯的子視窗z序 z序 垂直螢幕的方向,即疊放次序 並返回在z序頂部的子視窗的控制代碼。函式原型 hwn...