日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC Attach()函数和Detach()函数

發(fā)布時間:2023/12/4 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC Attach()函数和Detach()函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、Windows對象和MFC對象的區(qū)別?
MFC對象實(shí)際上并沒有把整個Windows對象都包裝在其中。
對于窗口:MFC對象它只是有一個窗口句柄而已,這個窗口句柄如果指向一個實(shí)際存在的窗口對象(窗口對象,也就是WNDCLASS,是一個Windows對象),那么這個MFC對象就是有效的,否則這個MFC對象是空的。
如果你還不明白,請回憶一下,當(dāng)我們使用MFC創(chuàng)建一個窗口時,是分兩步進(jìn)行的:
第一步,new一個CWnd對象,這一步是創(chuàng)建MFC對象,但是其中的HWND還是非法的,因?yàn)閷?yīng)的Windows對象還沒有被創(chuàng)建出來;
第二步,調(diào)用CWnd的成員函數(shù)Create創(chuàng)建真正的Windows對象,同時,把先前創(chuàng)建的MFC的CWnd對象的HWND成員指向該窗口,這樣才算創(chuàng)建完畢一個窗口。
而如果你是用SDK方式,那么只要創(chuàng)建一個WNDCLASS結(jié)構(gòu),然后調(diào)用Create或者CreateEx就創(chuàng)建了一個窗口。???

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

基本就是把一個句柄綁定和解綁定于一個類對象上,是其可以使用MFC的函數(shù)而不是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);

總結(jié)

以上是生活随笔為你收集整理的MFC Attach()函数和Detach()函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。