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

            旅途

            如果想飛得高,就該把地平線忘掉

            超類化

            windows界面編程最基本的元素就是“窗口”,一個窗口的產(chǎn)生一般要經(jīng)過填寫窗口類結(jié)構(gòu),對窗口類注冊,和創(chuàng)建窗口,最終顯示出來給用戶見到。大概代碼如下:
             
            //填寫窗口類結(jié)構(gòu)
            WNDCLASS wcWin;
            wcWind.lpfnWndProc = (WNDPROC)WndProc; //窗口消息處理
            ...
            wcWind.lpszClassName = "winClassName"; //窗口類的名字
             
            //注冊窗口
            RegisterClass(&wcWin);
             
            //創(chuàng)建窗口
            HWND hWnd = CreateWindow("winClassName", "my window", ...);
             
            在WTL中,對windows的一套窗口機(jī)制提供了面向?qū)ο蟮姆庋b,有著完善的windows界面架構(gòu),對一些常用的API,控件等等都做了封裝,而且自己也可以繼承性的在此基礎(chǔ)上二次開發(fā)。所以在實際的編程中,可以省去不少的工作量。越扯越遠(yuǎn)了,ft。
             
            在WTL/ATL中,提供了DECLARE_WND_CLASS, DECLARE_WND_CLASS_EX, or DECLARE_WND_SUPERCLASS 這三個宏來實現(xiàn)窗口類結(jié)構(gòu)的填寫,其中DECLARE_WND_SUP
            ERCLASS 在msdn中的介紹是 :CWndClassInfo registers information for a window class that is based on an existing class but uses a different window procedure. This technique is called superclassing. 這段話大意就是講 “可以基于一個已經(jīng)存在的窗口類,但是使用一個不同的消息處理函數(shù),去生成一個新的窗口類——這種技術(shù)就稱為超類化” ,這個超類化的特點就是:
            1,已經(jīng)存在一個注冊的窗口類A。(注意,此窗口類有自己的消息處理函數(shù))
            2,創(chuàng)建一個新的窗口類B,但是是以上面的A為基礎(chǔ)(即窗口類的名字相同等)。
            3,可以寫個新的消息處理模塊做為B的消息處理,此時窗口A的所有消息就被這個新的消息處理所截取了。
             
            由上可知,在程序中使用超類,可以截取某個窗口創(chuàng)建之初的所有消息,從而可以達(dá)到一些目的,嘿嘿~
             
            一個例子(設(shè)想):
            API的MessageBox非常好用,調(diào)用很簡單,但是如果想要對它的彈出位置等進(jìn)行修改的話,確不容易,因為這個調(diào)用不會返回句柄,也沒有消息可以獲取,如果真要修改它彈出的默認(rèn)位置的話,大概有下面幾種辦法:
            1,自己寫一個messagebox,要考慮到那么多的情況,寫出來也不是很方便啊。
            2,可以在調(diào)用MessageBox之前設(shè)置一個timer,在timer中不斷FindWindow這個messagebox,找到后就可以得到句柄,從而就可以SetWindowPos改表位置了。
            3,可以使用HOOK技術(shù),截了messagebox的WN_INITDIALOG消息,在消息處理中就可以。。。
            4,使用“超類化”!過程為:在本實例中找一個已知類名(可以用spy++先看MessageBox的類名)的MessageBox窗口類,找到后將此類 的信息賦給一個新的窗口類,將一個新的窗口消息處理過程賦給它,然后注冊新窗口類,注冊成功后,當(dāng)這個MessageBox要被創(chuàng)建出來后發(fā)的消息就都自 己的新消息處理函數(shù)所截獲了,在消息處理函數(shù)中就可以想怎么樣就怎么樣了。

             

            posted on 2007-07-18 00:14 旅途 閱讀(435) 評論(0)  編輯 收藏 引用 所屬分類: 深入windows

            亚洲伊人久久综合中文成人网| 三级韩国一区久久二区综合| 久久久www免费人成精品| 久久精品成人欧美大片| 伊人久久大香线蕉亚洲五月天| 久久夜色精品国产噜噜噜亚洲AV| 91精品国产9l久久久久| 亚洲AV伊人久久青青草原| 浪潮AV色综合久久天堂| 国产亚州精品女人久久久久久| 区久久AAA片69亚洲| 色综合久久综精品| 精品综合久久久久久98| 91亚洲国产成人久久精品网址| 香蕉久久夜色精品国产2020| 精品久久久久久久| 香蕉久久夜色精品国产2020| 国产免费久久久久久无码| 亚洲国产欧美国产综合久久| 久久丝袜精品中文字幕| 久久精品成人国产午夜| 少妇精品久久久一区二区三区| 久久伊人五月天论坛| 狠狠色噜噜狠狠狠狠狠色综合久久| 久久婷婷五月综合成人D啪| 久久免费观看视频| 99久久精品国产一区二区| 久久99精品久久久久久动态图| 国产精品久久久久久久人人看| 国产午夜精品久久久久九九电影| 日产精品99久久久久久| 久久久精品国产免大香伊| 久久亚洲精品国产亚洲老地址| 久久免费99精品国产自在现线 | 亚洲精品无码久久久久久| 久久综合九色综合久99| 久久亚洲国产午夜精品理论片| 久久精品国产亚洲77777| 久久精品无码专区免费青青| 久久婷婷五月综合色高清| 亚洲熟妇无码另类久久久|