青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 25  文章 - 29  trackbacks - 0
<2006年7月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用鏈接

留言簿(4)

隨筆分類(22)

隨筆檔案(25)

文章分類(2)

文章檔案(2)

相冊

最新隨筆

搜索

  •  

積分與排名

  • 積分 - 57075
  • 排名 - 405

最新評論

閱讀排行榜

評論排行榜

The Problem

Windows objects are normally represented by HANDLEs. The MFC classes wrap Windows object handles with C++ objects. The handle wrapping functions of the MFC class library provide a way to find the C++ object that is wrapping the Windows object with a particular handle. There are times when a Windows object does not have a C++ wrapper object, however, and at these times a temporary object is created to act as the C++ wrapper.

mfc 映射的 windows object ---->c++ wrapper
以下使用 mfc 的函數 如:fromhandle, getdlgitem,都會返回temporary 和 pemanent? c++ wrapper object
?注意:
???? 零時的 對象 會被在空閑時(OnIdle()函數)被刪除,不能存下在下次消息處理中 使用
The default OnIdle processing in CWinThread automatically calls DeleteTempMap for each class that supports temporary handle maps
////////////////////////////////////////////////////////////
The Windows objects that use handle maps are:

  • HWND (CWnd and CWnd-derived classes)
  • HDC (CDC and CDC-derived classes)
  • HMENU (CMenu)
  • HPEN (CGdiObject)
  • HBRUSH (CGdiObject)
  • HFONT (CGdiObject)
  • HBITMAP (CGdiObject)
  • HPALETTE (CGdiObject)
  • HRGN (CGdiObject)
  • HIMAGELIST (CImageList)
  • SOCKET (CSocket)

///////////////////////////////////////////////

Given a handle to any of these objects, you can find the MFC object that wraps the handle by calling the static member function FromHandle. For example, given an HWND called hWnd:

CWnd::FromHandle(hWnd)

will return a pointer to the CWnd that wraps the hWnd. If that hWnd does not have a specific wrapper object, then a temporary CWnd is created to wrap the hWnd. This makes it possible to get a valid C++ object from any handle.

Once you have a wrapper object, you can get to its handle through a public member variable. In the case of a CWnd, m_hWnd contains the HWND for that object.

Attaching Handles to MFC Objects

Given a newly created handle-wrapper object and a handle to a Windows object, you can associate the two by calling Attach. For example:

CWnd myWnd;
myWnd.Attach(hWnd);
////mywnd 析構時會調用 destroywindow ,連同 hwnd 一起銷毀




This makes an entry in the permanent map associating myWnd and hWnd.
Calling CWnd::FromHandle(hWnd) will now return a pointer to myWnd.
When myWnd is deleted, the destructor will automatically destroy the hWnd by calling the Windows DestroyWindow function. If this is not desired, the hWnd must be detached from myWnd before the myWnd object is destroyed (normally when leaving the scope at which myWnd was defined). The Detach member function does this.

myWnd.Detach();

More About Temporary Objects

Temporary objects are created whenever FromHandle is given a handle that does not already have a wrapper object. These temporary objects are detached from their handle and deleted by the DeleteTempMap functions. The default OnIdle processing in CWinThread automatically calls DeleteTempMap for each class that supports temporary handle maps. This means that you cannot assume a pointer to a temporary object will be valid past the point of exit from the function where the pointer was obtained, as the temporary object will be deleted during the Windows message-loop idle time.

很重要:
在多線程中傳遞 c++ wrapper object 是無效的(無論是 temporary 還是 permanent)
只能傳遞 windows handle, 換句話就是說, 線程 只能 訪問 自己創建的c++ wrapper object

Wrapper Objects and Multiple Threads

Both temporary and permanent objects are maintained on a per-thread basis. That is, one thread cannot access another threads C++ wrapper objects, regardless of whether it is temporary or permanent. As stated above, temporary objects are deleted when the thread which that temporary object belongs enters OnIdle.

To pass these objects from one thread to another, always send them as their native HANDLE type. Passing a C++ wrapper object from one thread to another will often result in unexpected results.

????

posted on 2006-06-30 11:33 黃大仙 閱讀(1728) 評論(1)  編輯 收藏 引用 所屬分類: c++

FeedBack:
# re: MFC中 windows object 和 C++ object 2006-07-08 00:49 flyingxu
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲永久视频| 欧美人成在线| 欧美成人黄色小视频| 久久国产视频网站| 久久精品av麻豆的观看方式| 亚洲欧美日韩视频二区| 午夜精品久久久久| 久久都是精品| 欧美成人国产| 欧美激情一级片一区二区| 亚洲国产一区二区a毛片| 91久久精品美女| 洋洋av久久久久久久一区| 亚洲午夜免费视频| 欧美有码在线视频| 欧美人成在线| 欧美激情在线狂野欧美精品| 欧美成人国产| 亚洲激情在线激情| 亚洲天堂成人在线观看| 欧美亚洲免费| 免费久久99精品国产| 欧美日韩国产成人在线观看| 国产精品乱码一区二三区小蝌蚪| 国产精品爽爽ⅴa在线观看| 国产一区二区看久久| 日韩视频二区| 久久另类ts人妖一区二区 | 一区二区三区视频在线观看| 欧美一区二区三区日韩| 欧美a级大片| 亚洲欧美中文日韩v在线观看| 麻豆av福利av久久av| 国产精品美女久久久浪潮软件| 在线观看亚洲一区| 亚洲欧美日韩网| 亚洲国产日韩欧美在线动漫| 性欧美xxxx大乳国产app| 欧美成人免费va影院高清| 国产亚洲精品综合一区91| aa国产精品| 亚洲成色www8888| 亚洲免费伊人电影在线观看av| 欧美激情一区二区久久久| 黄色成人av在线| 欧美诱惑福利视频| 一区二区三区日韩欧美| 欧美激情亚洲精品| 亚洲日本中文| 亚洲高清久久| 欧美bbbxxxxx| 91久久国产综合久久91精品网站| 亚洲人成高清| 亚洲日本视频| 久久亚洲精品网站| 国产无一区二区| 亚洲欧美日韩一区在线| 99re热这里只有精品视频| 蜜臀99久久精品久久久久久软件| 精品电影在线观看| 裸体素人女欧美日韩| 亚洲欧美久久| 国产嫩草影院久久久久| 午夜精品久久久久久久| 亚洲午夜日本在线观看| 国产欧美日韩在线| 欧美在线视频一区二区| 亚洲欧美视频在线观看视频| 国产婷婷色一区二区三区| 久久国产精品一区二区三区四区| 亚洲一区三区电影在线观看| 国产精品乱看| 久久久久国产精品厨房| 欧美尤物巨大精品爽| 在线观看亚洲精品| 欧美韩国一区| 欧美日韩亚洲另类| 午夜精品99久久免费| 午夜精品久久久久久久| 狠狠综合久久| 亚洲黄色免费电影| 欧美日韩综合精品| 久久精品女人天堂| 老巨人导航500精品| 亚洲美女性视频| 亚洲午夜久久久久久久久电影院 | 亚洲一区二区三区欧美| 国产亚洲一区二区三区| 另类av导航| 欧美日韩精品二区| 久久精品亚洲国产奇米99| 美女黄毛**国产精品啪啪| 99精品视频免费| 亚洲欧美国产精品专区久久| 在线免费不卡视频| 夜夜夜久久久| 一区二区视频免费完整版观看| 欧美国产亚洲另类动漫| 国产精品成人午夜| 久久亚洲风情| 欧美午夜精品电影| 久久青青草原一区二区| 欧美日韩国产免费| 久久亚洲国产精品日日av夜夜| 欧美国产精品人人做人人爱| 亚洲免费视频一区二区| 欧美成人a∨高清免费观看| 性色一区二区三区| 免费高清在线一区| 亚洲一区免费观看| 免费av成人在线| 久久精品中文字幕一区| 欧美日韩精品久久久| 亚洲福利视频网站| 久久婷婷久久| 亚洲小视频在线观看| 久久久久久精| 亚洲一区免费视频| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲欧美欧美一区二区三区| 欧美二区在线观看| 麻豆久久婷婷| 国产视频一区二区三区在线观看| 亚洲日韩视频| 永久免费毛片在线播放不卡| 午夜精品影院| 欧美一区二区视频在线| 欧美理论视频| 亚洲国产精品专区久久| 亚洲成人中文| 久久婷婷国产综合国色天香| 久久精品电影| 国产亚洲aⅴaaaaaa毛片| 亚洲欧美日韩精品久久久久| 亚洲一区二区三区777| 欧美日韩成人在线| 99视频在线观看一区三区| 日韩视频―中文字幕| 免费成人小视频| 亚洲黄色精品| 一二三区精品| 欧美日韩另类字幕中文| 99精品久久| 欧美一区二区在线免费播放| 国产精品丝袜xxxxxxx| 亚洲欧美成人一区二区在线电影| 欧美一区二区精品久久911| 国产伦精品一区二区三区照片91 | 亚洲欧美国产毛片在线| 羞羞色国产精品| 国产日韩精品一区二区| 午夜在线观看欧美| 免费成人高清视频| 日韩天天综合| 国产精品高清一区二区三区| 亚洲欧美日韩国产综合| 久久综合伊人| 亚洲美女一区| 国产精品一区二区你懂得| 久久本道综合色狠狠五月| 欧美大色视频| 亚洲在线视频网站| 伊人婷婷久久| 欧美色欧美亚洲另类二区| 香蕉久久夜色精品国产使用方法| 裸体丰满少妇做受久久99精品| 日韩视频欧美视频| 国产亚洲精品资源在线26u| 久久久亚洲成人| 日韩午夜在线观看视频| 久久久精品国产一区二区三区| 亚洲黄色在线| 国产美女精品| 欧美激情综合色| 亚洲综合久久久久| 欧美国产第一页| 亚洲欧美日韩一区二区在线 | 欧美一区二区私人影院日本| 有坂深雪在线一区| 欧美日韩一区二区国产| 久久久久九九九| 日韩视频中午一区| 开心色5月久久精品| 亚洲综合色在线| 91久久精品一区二区别| 国产欧美日韩三级| 欧美精品不卡| 久久精品夜色噜噜亚洲aⅴ| 99热在线精品观看| 欧美成人有码| 欧美在线观看www| 一区二区三区高清在线 | 亚洲欧美偷拍卡通变态| 亚洲国产成人在线播放| 国产香蕉97碰碰久久人人| 欧美精品亚洲一区二区在线播放| 久久国产精品99久久久久久老狼| 99综合视频| 亚洲乱码国产乱码精品精可以看 | 久久激情视频免费观看|