首先,從這兩個單詞的第乙個字母即可知道兩者之間的差別。熟悉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...