hWnd是窗口句柄,通過它可以得到窗口的屬性。
hDC是窗口顯示上下文句柄,只有在窗口進(jìn)行圖形,文字輸出的時(shí)候才需要它。
有了hWnd,可以使用API的GetDC()函數(shù)得到與其相關(guān)的hDC:
hDC=GetDC(hWnd)
句柄:
在Windows編程中我們時(shí)刻接觸到一個(gè)稱為句柄(HANDLE)的東西。可以這樣去理解句柄,Windows程序中產(chǎn)生的任何資源(要占用某一塊或大或小的內(nèi)存),如圖標(biāo),光標(biāo),窗口,應(yīng)用程序的實(shí)例(已加載到內(nèi)存運(yùn)行中的程序)。操作系統(tǒng)每產(chǎn)生一個(gè)這樣的資源時(shí),都要將它們放入相應(yīng)的內(nèi)存,并為這些內(nèi)存指定一個(gè)唯一的標(biāo)識(shí)號(hào),這個(gè)標(biāo)識(shí)號(hào)即該資源的句柄。操作系統(tǒng)要管理和操作這些資源,都是通過句柄來找到對(duì)應(yīng)的資源的。按資源的類型,又可將句柄細(xì)分成圖標(biāo)句柄(HICON),光標(biāo)句柄(HCURSOR),窗口句柄(HWND),應(yīng)用程序?qū)嵗浔℉INSTANCE),等等各種類型的句柄。操作系統(tǒng)給每一個(gè)窗口指定的一個(gè)唯一的標(biāo)識(shí)號(hào)即窗口句柄。
也就是說:
操作系統(tǒng)把資源放入內(nèi)存。句柄是資源所在內(nèi)存的標(biāo)識(shí)號(hào)。
CWnd是MFC類庫中所有窗口類的基類。微軟在MFC中將所有窗口的通用操作都封裝到了這個(gè)類中,如:ShowWindow等等,同時(shí)它也封裝了窗口句柄即m_hWnd成員。
由HWnd得到CWnd*:
CWnd wnd;
HWnd hWnd;
wnd.Attach(hWnd);
通常一個(gè)窗口資源已經(jīng)和一個(gè)CWnd類的對(duì)象關(guān)聯(lián)起來的,由于一般來說這個(gè)類是自己創(chuàng)建的,所以自然知道怎么得到指向這個(gè)類的指針。如果沒有就創(chuàng)建一個(gè)CWnd對(duì)象,將這個(gè)對(duì)象與窗口資源的hWnd句柄關(guān)聯(lián)起來。(如上邊的語句)。如果用
static CWnd* CWnd::FromHandle(HWND hWnd) ;
則返回值是一個(gè)暫時(shí)的CWnd對(duì)象,并且我們確保返回值為非空,也就是hWnd是有效的。
static CWnd* CWnd::FromHandlePermanent(HWND hWnd) ;
返回的是一個(gè)永久的對(duì)象。只有在返回的CWnd在類表里已經(jīng)存在是返回值為非空。
由CWnd獲取HWnd就容易多了,因?yàn)樗囊粋€(gè)成員m_hWnd就是所對(duì)應(yīng)窗口的句柄。
wnd->m_hWnd。