<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    MFC Attach()函數和Detach()函數

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接 一、Windows對象和MFC對象的區別?
    MFC對象實際上并沒有把整個Windows對象都包裝在其中。
    對于窗口:MFC對象它只是有一個窗口句柄而已,這個窗口句柄如果指向一個實際存在的窗口對象(窗口對象,也就是WNDCLASS,是一個Windows對象),那么這個MFC對象就是有效的,否則這個MFC對象是空的。
    如果你還不明白,請回憶一下,當我們使用MFC創建一個窗口時,是分兩步進行的:
    第一步,new一個CWnd對象,這一步是創建MFC對象,但是其中的HWND還是非法的,因為對應的Windows對象還沒有被創建出來;
    第二步,調用CWnd的成員函數Create創建真正的Windows對象,同時,把先前創建的MFC的CWnd對象的HWND成員指向該窗口,這樣才算創建完畢一個窗口。
    而如果你是用SDK方式,那么只要創建一個WNDCLASS結構,然后調用Create或者CreateEx就創建了一個窗口。   

    二、Attach  Detach
    【Attach】 假設你已經有了一個有效窗口句柄,那么你想把這個窗口和一個CWnd對象關聯起來怎么辦?很簡單,用Attach,其實就是讓一個CWnd對象的HWND成員指向這個窗口句柄。這就是Attach主要完成的任務。
       
    【Detach】如前所述,WNDCLASS其實和CWnd根本沒有什么關系。它們之間只是通過CWnd的成員HWND聯系起來的。如果把Attach看做“聯姻”的話,那么Detach就是“離婚”了,通俗地說,就是切斷一個CWnd對象和一個有效窗口的臍帶。為什么要切斷呢?因為CWnd是C++的對象,C++的對象有一個生存期的概念,脫離了該對象的作用域,這個對象就要被銷毀,但是Windows對象沒有這個特點,當銷毀CWnd對象的時候,我們不一定希望WNDCLASS一起被銷毀,那么在此之前,我們就先要把這個“臍帶”剪斷,以免“城門失火,殃及池魚”。Understand?

    基本就是把一個句柄綁定和解綁定于一個類對象上,是其可以使用MFC的函數而不是API


    程序代碼 程序代碼       if (oldbmp != NULL)
          {
           wdc.SelectObject(oldbmp);
          }
          DeleteObject(bmp.Detach());  // bmp自定義的一個位圖句柄
          
          HBITMAP hdib = CreateDIBSection(wdc.m_hDC,&m_bmi,DIB_RGB_COLORS,(void**)&m_pbyte,NULL,0);
          ASSERT(hdib);
          bmp.Attach(hdib);RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全