亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Windows對象、句柄與MFC對象

系統 3025 0

Windows對象、句柄與MFC對象

(2009-04-28 22:11:34)
  Windows對象是以句柄來標識的,對應的MFC類就是這些句柄的C++包裝。內存中的Windows對象一定有唯一的句柄來標識,但不一定有對應的MFC類對象在內存中。當需要獲取Windows對象的對應MFC類對象而內存中又沒有此對象時,系統會創建一個臨時MFC類對象返回給用戶,并在之后某個空閑時刻進行回收。
  Windows對象句柄及其對應的MFC類如下表所示:

HWND

CWnd 及派生類

HDC

CDC 及派生類

HMENU

CMenu

HPEN 、 HBRUSH 、 HFONT HBITMAP 、 HPALETTE 、 HRGN

CGdiObject

HIMAGELIST

CImageList

SOCKET

CSocket


  如果你擁有上面的任何一個Windows對象句柄,你可以調用對應類的靜態成員函數FromHandle來查找對應的MFC對象(系統為每個線程維護了一個從Windows對象句柄到MFC對象的映射,一個持久的map和一個臨時的map);如果你擁有上面的MFC對象,你也可以通過MFC類的公有成員變量來獲取對應的Windows對象句柄。
  例如,給定一個HWND類型的句柄hWnd,可以通過

CWnd::FromHandle(hWnd) ;

來獲得CWnd對象的指針。如果hWnd沒有對應的CWnd對象,則系統會產生一個臨時CWnd對象與hWnd關聯,并返回該對象的指針。在獲得CWnd對象后,你可以通過CWnd的公有成員m_hWnd獲得窗口對象的句柄。
  如果在調用FromHandle時產生臨時MFC對象,句柄和MFC對象之間的映射被保存在系統的臨時map中。默認情況下,CWinThread::OnIdle自動為那些支持臨時句柄映射的MFC類調用DeleteTempMap函數。在DeleteTempMap函數中,這些臨時對象將被取消與句柄的關聯,然后被銷毀。
  如果你擁有一個Windows對象句柄,那么你可以創建一個對應的MFC對象,然后把該MFC對象與該Windows對象句柄進行關聯。此時,該MFC對象與Windows對象相互建立起映射關系。
  例如,對于如下代碼:

CWnd myWnd;

myWnd.Attach(hWnd);

將建立起hWnd到myWnd的映射。此后,你調用CWnd::FromHandle(hWnd)將返回myWnd對象的指針。如果myWnd對象被銷毀,它的析構函數將自動通過調用DestroyWindow來銷毀該hWnd所指Windows對象。如果該行為不是所期望的,則需要在myWnd銷毀之前調用Detach成員函數解除兩者之間的關聯(映射),如 myWnd.Detach()。
所有臨時MFC對象和持久(permanent)MFC對象都是以線程為單位進行維護管理的。也就是說,一個線程不能夠訪問另一個線程的MFC包裝類對象,不管它是臨時的還是持久的。
  為了在不同的線程間傳遞這些Windows對象,總是應該通過HANDLE類型傳遞。從一個線程向另一個線程傳遞MFC包裝對象將可能引起不可預料的結果。
  由于MFC包裝類對象是以線程為單位進行管理的,因此,在程序中的不同線程中可能有多個MFC對象與同一個句柄對應。
  存在的疑問:如果同一線程中有多個MFC對象Attach同一句柄,那么對該句柄調用FromHandle將返回哪個MFC對象呢?未定義行為?

Windows對象、句柄與MFC對象


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲一区二区三区在线网站 | 成人免费视频日本 | 牛牛本精品99久久精品 | 亚洲精品视频在线观看视频 | 色综合天天综合网国产国产人 | 狠狠干狠狠色 | 国产一区二区三区四区在线 | 国产看片网站 | 第一国内永久免费福利视频 | 日本一级毛片免费播放 | 国产免费久久精品丫丫 | 精品国产香蕉 | 中国美女牲交一级毛片 | 国产成人精品一区二区三在线观看 | 97久久国产一区二区三区四区 | 女人精69xxxxx免费无毒 | 视频大全在线观看免费 | 99精品视频在线成人精彩视频 | 天天干天天拍天天射天天添天天爱 | 欧美精品综合 | 国产精品主播在线 | 成人性生活免费看 | 日本欧美一区二区三区在线 | 特黄日韩免费一区二区三区 | 亚色在线视频 | 成人免费视频在线观看 | 香蕉一区 | 日本一级毛片高清免费观看视频 | 日韩国产中文字幕 | 亚洲视频网 | 尤物精品视频在线观看 | 日本久久一区二区 | 日韩男女视频 | 牛牛影视午夜免费福利 | 一级无遮挡理论片 | 99麻豆久久久国产精品免费 | 免费超级淫片日本高清视频 | 国产日日操 | 天天成人综合网 | 国产在线91观看免费观看 | 久久精品在现线观看免费15 |