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