• <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>

            操作系統(tǒng)怎么根據(jù)一個(gè)HWND句柄,找到相應(yīng)的代碼

            【 在 某 的大作中提到: 】

            : 比如我有一個(gè)CMyButton的類,我現(xiàn)在有他的一個(gè)handle
            : 編譯器怎么根據(jù)這個(gè)句柄找到CMyButton的代碼的?

            【 在 某某 的大作中提到: 】
            : 這個(gè)和OS/Compiler沒(méi)關(guān)系,是庫(kù)起的作用
            : 以從某個(gè)文章里看的,說(shuō)MFC用了一個(gè)大map,沒(méi)驗(yàn)證過(guò)
            : 有本講GDI的書里,用了WNDCLASS里的extra bytes來(lái)實(shí)現(xiàn)的這個(gè)映射

             


            MFC的應(yīng)用里,每個(gè)MFC線程(必須要使用MFC方式啟動(dòng)的線程)都維護(hù)有一個(gè)MFC object和HWND之間的

            mapping,整個(gè)MFC框架就是使用這個(gè)機(jī)制來(lái)實(shí)現(xiàn)應(yīng)用級(jí)C++對(duì)象和系統(tǒng)級(jí)原生窗口內(nèi)核對(duì)象之間的關(guān)聯(lián);

            因?yàn)檫@個(gè)mapping是以線程為單位來(lái)維護(hù)的,每個(gè)線程間互不關(guān)聯(lián),所以,一個(gè)應(yīng)用里對(duì)于涉及UI窗口的

            任務(wù)最好是都放在同一個(gè)線程里面,一般就是當(dāng)前進(jìn)程的主線程,否則可能出現(xiàn)MFC object和HWND之間

            關(guān)聯(lián)不上的問(wèn)題,而且這樣的問(wèn)題還很隱蔽。

            至于WNDCLASS結(jié)構(gòu)自帶的extra bytes域,是以前缺乏應(yīng)用框架的時(shí)代,使用Win32 API直接開(kāi)發(fā)時(shí),讓每個(gè)

            窗口類(這里的類,不是C++ class的概念,而是Windows系統(tǒng)窗口定義時(shí)的一種數(shù)據(jù)結(jié)構(gòu))都能有個(gè)附

            帶一些額外的自定義數(shù)據(jù)的空間,這個(gè)空間往往被用來(lái)存放與當(dāng)前窗口類相關(guān)的用戶數(shù)據(jù),通常是指向

            某個(gè)內(nèi)存區(qū)域的指針,當(dāng)程序操作這個(gè)屬于這個(gè)窗口類的窗口時(shí)就可以根據(jù)這個(gè)附帶的自定義數(shù)據(jù)(或

            者指針)來(lái)操作對(duì)應(yīng)的關(guān)聯(lián)自定義數(shù)據(jù);很多后來(lái)出現(xiàn)的框架,也都使用了這個(gè)extra bytes域,來(lái)存放

            框架本身的一些和窗口類相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)。從目前趨勢(shì)看,直接使用WNDCLASS以及extra bytes的可能

            性是微乎其微了,但是如果要做好原生應(yīng)用的開(kāi)發(fā),很多底層的實(shí)現(xiàn)細(xì)節(jié)最要還是要知道一下,以便于

            優(yōu)化結(jié)構(gòu)和性能,以及出錯(cuò)時(shí)的調(diào)試處理;因?yàn)闊o(wú)論是Winform/WPF,還是跨平臺(tái)的WTL/QT/WxWindows等

            等新型的機(jī)制或者框架、類庫(kù),只要是在Windows平臺(tái)上搭建的,那都是基于前面說(shuō)過(guò)的這套最基本也是

            最核心的Win32 API基礎(chǔ)之上。

             

            posted on 2011-04-04 14:16 flagman 閱讀(1738) 評(píng)論(4)  編輯 收藏 引用 所屬分類: 設(shè)計(jì) DesignC++

            評(píng)論

            # re: 操作系統(tǒng)怎么根據(jù)一個(gè)HWND句柄,找到相應(yīng)的代碼 2011-04-04 14:37 空明流轉(zhuǎn)

            其實(shí)這種extra byte的辦法,很多庫(kù)都有。.net的component也多有object類型的tag。這個(gè)是應(yīng)用程序定制的好辦法。  回復(fù)  更多評(píng)論   

            # re: 操作系統(tǒng)怎么根據(jù)一個(gè)HWND句柄,找到相應(yīng)的代碼[未登錄](méi) 2011-04-04 19:01 vincent

            你可以把一個(gè)handle比喻成一個(gè)內(nèi)核對(duì)象在內(nèi)核中的數(shù)組索引,當(dāng)然,也許這個(gè)handle是索引處理過(guò)的東西
            內(nèi)核對(duì)象身上自然存儲(chǔ)的有它相關(guān)的一些資源,屬性或信息  回復(fù)  更多評(píng)論   

            # re: 操作系統(tǒng)怎么根據(jù)一個(gè)HWND句柄,找到相應(yīng)的代碼[未登錄](méi) 2011-04-04 19:02 vincent

            我又2了。。沒(méi)仔細(xì)看題。。。真的要檢討了。。
            同好奇。。  回復(fù)  更多評(píng)論   

            # re: 操作系統(tǒng)怎么根據(jù)一個(gè)HWND句柄,找到相應(yīng)的代碼 2011-04-07 14:54 flagman

            @空明流轉(zhuǎn)
            是這樣,在MFC出現(xiàn)之前,純Win32 API的時(shí)代,extra byte是最便捷的對(duì)窗口自定義數(shù)據(jù)的存儲(chǔ)方法;.net framework的設(shè)計(jì)者很有可能參考了這種設(shè)計(jì)思路,所以在UI界面的components上也帶有可攜帶自定義數(shù)據(jù)的tag field;

            引申出去,常見(jiàn)很多人問(wèn),“某某技術(shù)要學(xué)嗎”“某某庫(kù)、框架要摸索一下嗎”,真要把某個(gè)技術(shù)、庫(kù)等等研究透了,就常常會(huì)發(fā)現(xiàn)有許多設(shè)計(jì)思路和方法是相似的。  回復(fù)  更多評(píng)論   

            <2011年4月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            1234567

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            99久久精品免费| 久久精品成人| 亚洲国产精品人久久| 亚洲欧美日韩久久精品| 久久综合狠狠综合久久综合88| 国产精品久久久久aaaa| 亚洲欧美成人久久综合中文网| 麻豆亚洲AV永久无码精品久久| 国产精品青草久久久久婷婷| 亚洲人成网站999久久久综合| 国产午夜久久影院| 国产美女亚洲精品久久久综合| 久久国产精品久久| 亚洲AV无码久久精品成人| 久久国产高清一区二区三区| 久久亚洲春色中文字幕久久久| 亚洲中文字幕伊人久久无码| 66精品综合久久久久久久| 韩国免费A级毛片久久| 热99RE久久精品这里都是精品免费 | 99久久精品国产一区二区蜜芽| 国产成人精品久久| 久久综合鬼色88久久精品综合自在自线噜噜 | 久久久久av无码免费网| 欧美日韩精品久久久免费观看| …久久精品99久久香蕉国产| 亚洲精品tv久久久久久久久| 亚洲欧洲精品成人久久曰影片| 久久国产福利免费| 久久精品视频91| 久久久久国产亚洲AV麻豆| 精品多毛少妇人妻AV免费久久| 久久不射电影网| 爱做久久久久久| 精品久久久久中文字幕一区| 国产高清国内精品福利99久久| 久久精品国产影库免费看| 色综合久久天天综合| 久久综合丝袜日本网| 国产精品久久久99| 婷婷久久综合九色综合九七|