CWnd與HWND的區別與聯絡(相互轉換)完全解析

2021-07-27 18:30:58 字數 1274 閱讀 4975

首先,從這兩個單詞的第乙個字母即可知道兩者之間的差別。熟悉mfc的人都知道在mfc中,類基本上都是以c開頭的,這是一種規則約定,目的就是讓人一看就知道它是乙個類!

因此,cwnd第乙個字母c指的是class的意思,即cwnd是乙個類;hwnd第乙個字母h指的是handle的意思,即hwnd是乙個控制代碼

cwnd:是mfc類庫中所有視窗類的基類。mfc將所有視窗的通用操作都封裝到cwnd類中,如movewindow、showwindow;同時,它也封裝了視窗控制代碼,即m_hwnd成員。

hwnd:即windows視窗控制代碼,是windows系統中對所有視窗的一種唯一標識

聰明的讀者可以發現,cwnd其實就是mfc中的乙個類名;而hwnd是windows中窗體控制代碼的型別,乙個類似於指標位址的數字型物件。

方法一:通過cwnd的attach()函式來獲取

cwnd wnd;

hwnd hwnd;

wnd.attach(hwnd);

cwnd的attach()函式的作用基本上就是包乙個控制代碼附加到乙個mfc的物件上,即將cwnd物件的hwnd成員指向這個視窗控制代碼hwnd。

方法二:hwnd可以通過cwnd的靜態函式:cwnd::fromhandle()或cwnd::fromhandlepermanent(),由控制代碼例項化乙個cwnd物件出來。

如果用fromhandle(),返回值是乙個臨時cwnd物件,並且我們確保返回值為非空,也就是hwnd是有效的。(函式宣告如下:)

static cwnd*   cwnd::fromhandle(hwnd   hwnd) ;

如果用fromhandlepermanent(),返回值是乙個永久物件,只有在返回的cwnd在類表裡已經存在,則返回值為非空。(函式宣告如下:)

static cwnd*   cwnd::fromhandlepermanent(hwnd   hwnd)  ;

方法一:從cwnd獲取hwnd就容易多了,因為它的乙個成員變數m_hwnd就是所對應視窗的控制代碼。

wnd->m_hwnd

方法二:也可以通過成員函式cwnd::getsafehwnd()來獲得該視窗物件的hwnd視窗控制代碼。

CWnd與HWND的區別

一 區別 hwnd是控制代碼,cwnd是 mfc窗體類,cwnd中包含hwnd控制代碼成員物件是m hwnd.hwnd是windows系統中對所有視窗的一種標識,即視窗控制代碼。這是乙個sdk概念。cwnd是mfc類庫中所有視窗類的基類。微軟在mfc中將所有視窗的通用操作都封裝到了這個類中,如 sh...

CWnd與HWND的區別與轉換

一 區別 hwnd是控制代碼,cwnd是 mfc控制項的視窗物件指標cwnd 三 如何得到視窗控制代碼 hwnd handle 1,handle this m hwnd 2,void getdlgitem id edit name,handle 將控制項的id轉化為handle 3,handle g...

CWnd與HWND的區別與轉換

一 區別 hwnd是控制代碼,cwnd是 mfc窗體類,cwnd中包含hwnd控制代碼成員物件是m hwnd.hwnd是windows系統中對所有視窗的一種標識,即視窗控制代碼。這是乙個sdk概念。cwnd是mfc類庫中所有視窗類的基類。微軟在mfc中將所有視窗的通用操作都封裝到了這個類中,如 sh...