HWND是Windows系統(tǒng)中對(duì)所有窗口的一種標(biāo)識(shí),即窗口句柄。這是一個(gè)SDK概念。
CWnd是MFC類庫(kù)中所有窗口類的基類。微軟在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。