ID--HANDLE--HWND三者之間的互相轉換
id->句柄 hWnd = ::GetDlgItem(hParentWnd,id);
id->指針 CWnd::GetDlgItem();
句柄->id id = GetWindowLong(hWnd,GWL_ID);
句柄->指針 CWnd *pWnd=CWnd::FromHandle(hWnd);
指針->ID id = GetWindowLong(pWnd->GetSafeHwnd,GWL_ID);
GetDlgCtrlID();
指針->句柄 hWnd=cWnd.GetSafeHandle() or mywnd->m_hWnd; 編程
指針的使用在編程過程當中相當重要,恰到好處並能正確無誤的使用指針不但可以提升程序自身的運行效率,並且有助於節省程序執行所須要消耗的資源。指針對應着某個數據在內存空間中的地址,獲得了指針就能夠自由地修改該數據。句柄表明指針的「指針」,也能夠將其比做表中數據項的索引值( 表對應某個進程自身的內存空間 )。句柄是間接的引用對象。函數
指針和句柄的不一樣之處:spa
具體轉換:線程
( 句柄轉爲指針 )指針
CWnd* pWnd=FromeHandle(hMyHandle);
pWnd->SetWindowText("Hello World!");
or
CWnd* pWnd;
pWnd->Attach(hMyHandle); 對象
MFC類中有的還提供了標準方法,好比Window句柄:索引
static CWnd* PASCAL FromHandle(
HWND hWnd
);
HWND GetSafeHwnd( ) const;
對於位圖:
static CBitmap* PASCAL FromHandle(
HBITMAP hBitmap
);
static CGdiObject* PASCAL FromHandle(
HGDIOBJ hObject
);
HGDIOBJ GetSafeHandle( ) const;進程
固然,更詳細的信息須要在具體使用中自我查詢。內存
建 議:指針和句柄的使用屬於比較複雜、危險性較高的應用,在具體實踐中,若是能夠,儘可能不要使用指針和句柄,最好選擇現有的、封裝無缺的方式來實現,更別提指針同句柄的轉換了,它更加危險。資源
好比在操做字符串時,儘可能使用CString類來實現,經過定義好的構造、析構函數來完成分配和回收,最好不要經過指針來動態操做。