資源描述:
《VC++窗口句柄和指針的相互轉(zhuǎn)換.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、VC中窗口ID,句柄,指針三者相互轉(zhuǎn)換函數(shù)ID--HANDLE--HWND三者之間的互相轉(zhuǎn)換id->句柄hWnd=::GetDlgItem(hParentWnd,id);id->指針CWnd::GetDlgItem();句柄->idid=GetWindowLong(hWnd,GWL_ID);句柄->指針CWnd*pWnd=CWnd::FromHandle(hWnd);指針->IDid=GetWindowLong(pWnd->GetSafeHwnd,GWL_ID);GetDlgCtrlID();指針->句
2、柄hWnd=cWnd.GetSafeHandle()ormywnd->m_hWnd;指針的使用在編程過(guò)程中至關(guān)重要,恰到好處并能正確無(wú)誤的使用指針不但能夠提高程序自身的運(yùn)行效率,而且有助于節(jié)省程序執(zhí)行所需要消耗的資源。指針對(duì)應(yīng)著某個(gè)數(shù)據(jù)在內(nèi)存空間中的地址,得到了指針就可以自由地修改該數(shù)據(jù)。句柄代表指針的“指針”,也可以將其比作表中數(shù)據(jù)項(xiàng)的索引值(表對(duì)應(yīng)某個(gè)進(jìn)程自身的內(nèi)存空間)。句柄是間接的引用對(duì)象。指針和句柄的不同之處:句柄所指的可以是一個(gè)很復(fù)雜的結(jié)構(gòu),并且很有可能與系統(tǒng)有關(guān)的,比如上面所說(shuō)線程的句柄,
3、它指向的就是一個(gè)類或者結(jié)構(gòu),它和系統(tǒng)有很密切的關(guān)系。當(dāng)一個(gè)線程由于不可預(yù)料的原因而終止時(shí),系統(tǒng)就可以通過(guò)句柄來(lái)回收它所占用的資料,如CPU,內(nèi)存等等。反過(guò)來(lái)想,這些句柄中的某一些,是與系統(tǒng)進(jìn)行交互用的。指針?biāo)部梢灾赶蛞粋€(gè)復(fù)雜的結(jié)構(gòu),但通常是由用戶自我定義的,所以一些必需的工作都要由用戶自己完成,特別是在刪除的時(shí)候。另外需要注意的是句柄往往有自己的存在區(qū)限,比如一個(gè)進(jìn)程,如果將其傳遞到另一個(gè)進(jìn)程中,句柄也就失去了意義(表中數(shù)據(jù)項(xiàng)的索引值,索引離開(kāi)了具體的表也就失去了意義)。具體轉(zhuǎn)換:(句柄轉(zhuǎn)為指針)CW
4、nd*pWnd=FromeHandle(hMyHandle);pWnd->SetWindowText("HelloWorld!");orCWnd*pWnd;pWnd->Attach(hMyHandle);MFC類中有的還提供了標(biāo)準(zhǔn)方法,比如Window句柄:staticCWnd*PASCALFromHandle(HWNDhWnd);HWNDGetSafeHwnd()const;對(duì)于位圖:staticCBitmap*PASCALFromHandle(HBITMAPhBitmap);staticCGdiOb
5、ject*PASCALFromHandle(HGDIOBJhObject);HGDIOBJGetSafeHandle()const;當(dāng)然,更詳細(xì)的信息需要在具體使用中自我查詢。建議:指針和句柄的使用屬于比較復(fù)雜、危險(xiǎn)性較高的應(yīng)用,在具體實(shí)踐中,如果可以,盡量不要使用指針和句柄,最好選擇現(xiàn)有的、封裝完好的方式來(lái)實(shí)現(xiàn),更別提指針同句柄的轉(zhuǎn)換了,它更加危險(xiǎn)。比如在操作字符串時(shí),盡量使用CString類來(lái)實(shí)現(xiàn),通過(guò)定義好的構(gòu)造、析構(gòu)函數(shù)來(lái)完成分配和回收,最好不要通過(guò)指針來(lái)動(dòng)態(tài)操作。