锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美成人高清,a91a精品视频在线观看,久久国产日韩欧美http://www.shnenglu.com/Euan/category/13270.htmlzh-cnMon, 15 Mar 2010 15:36:03 GMTMon, 15 Mar 2010 15:36:03 GMT60銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?12. 榪涚▼涓庣嚎紼?/title><link>http://www.shnenglu.com/Euan/archive/2010/03/15/109792.html</link><dc:creator>Euan</dc:creator><author>Euan</author><pubDate>Mon, 15 Mar 2010 15:29:00 GMT</pubDate><guid>http://www.shnenglu.com/Euan/archive/2010/03/15/109792.html</guid><wfw:comment>http://www.shnenglu.com/Euan/comments/109792.html</wfw:comment><comments>http://www.shnenglu.com/Euan/archive/2010/03/15/109792.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Euan/comments/commentRss/109792.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Euan/services/trackbacks/109792.html</trackback:ping><description><![CDATA[<p>2009-10-7</p> <p>=======================<br>銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?12. 榪涚▼涓庣嚎紼?br>=======================<br>    <br>    鏍稿績(jī)瀵硅薄<br>                        鏍稿績(jī)瀵硅薄            浜х敓鏂規(guī)硶<br>                        event               CreateEvent<br>                        mutex               CreateMutex<br>                        semaphore       CreateSemaphore<br>                        file                    CreateFile<br>                        file-mapping     CreateFileMapping<br>                        process             CreateProcess<br>                        thread              CreateThread<br>                        <br>    榪涚▼鐨勭敓鍛藉懆鏈燂細(xì)                                            銆婃繁鍏ユ祬鍑篗FC銆婸39<br>        1銆乻hell璋冪敤 CreateProcess 嬋媧?App.exe<br>        2銆佺郴緇熶駭鐢熶竴涓繘紼嬫牳蹇?jī)瀵硅薄锛岃鏁板間負(fù)1.<br>        3銆佺郴緇熷湪姝よ繘紼嬪緩绔嬩竴涓?GB鍦板潃絀洪棿銆?br>        4銆佸姞杞藉櫒灝嗗繀瑕佺殑浠g爜鍔犺澆鍒頒笂榪板湴鍧絀洪棿涓紝鍖呮嫭App.exe鐨勭▼搴忋佹暟鎹紝浠ュ強(qiáng)鎵闇鐨勫姩鎬侀摼鎺ュ嚱鏁板簱錛圖LLs錛夈?br>        5銆佺郴緇熶負(fù)姝よ繘紼嬪緩绔嬩竴涓嚎紼嬶紝鎴愪負(fù)涓葷嚎紼嬶紝鐜版垚鎵嶆槸CPU鏃墮棿鐨勫垎閰嶅璞°?br>        6銆佺郴緇熻皟鐢?C runtime 鍑芥暟搴撶殑 Startup code銆?br>        7銆乻tartup code 璋冪敤 App紼嬪簭鐨?WinMain鍑芥暟銆?br>        8銆丄pp寮濮嬭繍琛屻?br>        9銆佷嬌鐢ㄨ呭叧闂瑼pp涓葷獥鍙o紝鏄疻inMain娑堟伅寰幆緇撴潫錛學(xué)inMain緇撴潫<br>        10銆佸洖鍒癝tartup code銆?br>        11銆佸洖鍒扮郴緇燂紝緋葷粺璋冪敤 ExitProcess緇撴潫榪涚▼<br>        <br>    浜х敓瀛愯繘紼嬶細(xì)<br>        CreateProcess錛?br>            LPCSTR lpApplicationName,  //鎸囧畾鍙墽琛屾枃浠跺悕<br>            LPSTR  lpCommandLine,    //鎸囧畾嬈蹭紶緇欐柊榪涚▼鐨勫懡浠よ鍙傛暟<br>            LPSECURITY_ATTRIBUTES  lpProcessAttributes,<br>            LPSECURITY_ATTRIBUTES  lpThreadAttributes,<br>            BOOL   bInheritHandles,       //鎸囧畾3銆?鐨勫畨鍏ㄥ睘鎬ф槸鍚﹂渶瑕佽緇ф壙<br>            DWORD  dwCreationFlags,   //鏍囪瘑緇勫悎<br>            LPVOID   lpEnvironment,      //鎸囧畾榪涚▼鎵浣跨敤鐨勭幆澧冨彉閲忓尯錛孨ull鎴栫埗榪涚▼鐜鍙橀噺<br>            LPCSTR   lpCurrentDirectory,      //璁懼畾瀛愯繘紼嬬殑宸ヤ綔鐩綍涓庡伐浣滈┍鍔ㄥ櫒錛岃嫢涓篘ULL錛岀戶鎵跨埗榪涚▼<br>            LPSTARTUPINFO  lpStartupInfo,       //鎸囧悜涓涓?STARTUPINFO緇撴瀯鐨勬寚閽堬紝<br>            LPPROCESS_INFORMATION  lpProcessInformation      <br>        );            </p> <p>    綰跨▼鐨勭敓鍛藉懆鏈燂細(xì)                銆婃繁鍏ユ祬鍑篗FC銆婸41<br>        璋冪敤CreateThread浜х敓棰濆鐨勭嚎紼嬫椂錛岀郴緇熷畬鎴愪互涓嬪伐浣?br>            1銆侀厤緗?#8220;綰跨▼瀵硅薄”錛屽叾handle灝嗘垚涓?CreateThread 鐨勮繑鍥炲?br>            2銆佽瀹氳鏁板櫒涓?1.<br>            3銆侀厤緗嚎紼?context銆?br>            4銆佷繚鐣欑嚎紼嬬殑鍫嗘爤銆?br>            5銆佸皢 context 涓殑鍫嗘爤鎸囬拡緙撳瓨鍣紙SS錛夊拰鎸囦護(hù)鎸囬拡緙撳瓨鍣紙IP錛夎瀹氬Ε褰撱?br>    <br>    CreateThread ( LPSECURITY_ATTRIBUTES  lpThreadAttributes,    //瀹夊叏灞炴х殑璁懼畾鍙?qiáng)鐟翩?br>                        DWORD  dwStackSize,                                             //鍫嗘爤澶у皬<br>                        LPTHREAD_START_ROUTINE   lpStartAddress,        //璁懼畾“綰跨▼鍑芥暟”鐨勫悕縐?br>                        LPVOID  lpParameter,<br>                        DWORD  dwCreationFlags,            //涓?錛屽垯綰跨▼绔嬪嵆寮濮嬫墽琛屻?br>                        LPDWORD  lpThreadId                 //綰虹粐綰跨▼鐨勶緝錛?br>                        );<br>                        <br>    unsigned  long  _beginthreadex (                                            銆婃繁鍏ユ祬鍑篗FC銆婸42<br>        void*  security,<br>        unsigned  stack_size,<br>        unsigned  (__stdcall *start_address) (void *),<br>        void  *arglist,<br>        unsigned  initflag,<br>        unsigned*  thrdaddr<br>        );</p> <p> </p> <p> </p> <img src ="http://www.shnenglu.com/Euan/aggbug/109792.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Euan/" target="_blank">Euan</a> 2010-03-15 23:29 <a href="http://www.shnenglu.com/Euan/archive/2010/03/15/109792.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?11. MFC 瀹炵幇 COMhttp://www.shnenglu.com/Euan/archive/2010/03/15/109791.htmlEuanEuanMon, 15 Mar 2010 15:28:00 GMThttp://www.shnenglu.com/Euan/archive/2010/03/15/109791.htmlhttp://www.shnenglu.com/Euan/comments/109791.htmlhttp://www.shnenglu.com/Euan/archive/2010/03/15/109791.html#Feedback0http://www.shnenglu.com/Euan/comments/commentRss/109791.htmlhttp://www.shnenglu.com/Euan/services/trackbacks/109791.html2009-10-2

======================
銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?11. MFC 瀹炵幇 COM
======================

    COM ( Component Object Model,緇勪歡瀵硅薄妯″瀷錛?br>    OLE 鏄井杞殑瀵硅薄鎶鏈殑鍚嶅瓧錛屾槸涓縐嶆暣鍚堣蔣浠剁殑緇熶竴鏂規(guī)硶錛屼嬌寰楄蔣浠跺彲浠ラ殢鏃墮棿鑰屾紨鍙橈紝鏄竴縐嶆暣鍚堟妧鏈?br>        浠庢椂闂寸殑瑙掑害璁詫紝OLE鏄渶鏃╁嚭鐜扮殑錛岀劧鍚庢槸COM鍜?ActiveX錛?br>        浠庝綋緋葷粨鏋勮搴﹁錛孫LE鍜孉ctiveX鏄緩绔嬪湪COM涔嬩笂鐨勶紝鎵浠OM鏄熀紜錛?br>    OLE鐨勪富瑕佺洰鏍囨槸浣垮緱搴旂敤紼嬪簭琚鐣屾墍璁よ瘑鍜岀悊瑙c?br>    浣跨敤COM緙栫▼鐨勭洰鐨勬槸浣垮緱杞歡浠庢簮浠g爜浠ュ強(qiáng)鐨勯噸鐢ㄤ笂鍗囧埌浜岃繘鍒朵竴綰х殑閲嶇敤銆?br>   
    緇勪歡鏄竴涓彲閲嶇敤鐨勬ā鍧楋紝鐢變竴緇勫鐞嗚繃紼嬨佹暟鎹皝瑁呭拰鐢ㄦ埛鎺ュ彛緇勬垚鐨勪笟鍔″璞★紙Rules Object錛夈傜粍浠剁湅璧鋒潵鍍忓璞°傚畠浠殑涓昏鍖哄埆鏄細(xì)
銆銆1錛夌粍浠跺彲浠ュ湪鍙︿竴涓О涓哄鍣紙鏈夋椂涔熺О涓烘壙杞借呮垨瀹夸富錛夌殑搴旂敤紼嬪簭涓嬌鐢紝涔熷彲浠ヤ綔涓虹嫭绔嬭繃紼嬩嬌鐢紱
銆銆2錛夌粍浠跺彲浠ョ敱涓涓被鏋勬垚錛屼篃鍙互鐢卞涓被緇勬垚錛屾垨鑰呮槸涓涓畬鏁寸殑搴旂敤紼嬪簭錛?br>銆銆3錛夌粍浠朵負(fù)妯″潡閲嶇敤錛岃屽璞′負(fù)浠g爜閲嶇敤銆?br>銆銆緇勪歡妯″瀷鏈塁OM錛圕omponent Object Model錛屽璞$粍浠舵ā鍨嬶級(jí)/DCOM錛圖istributed COM錛屽垎甯冨紡瀵硅薄緇勪歡妯″瀷錛夊拰CORBA錛圕ommon Object Request Broker Architecture錛屽叕鍏卞璞¤姹備唬鐞嗕綋緋葷粨鏋勶級(jí)銆?
銆銆
銆銆
=================
COM
   
    ------------------------
    COM 綾?br>        COM 鎵鍋氱殑鍏ㄩ儴宸ヤ綔灝辨槸鍦ㄤ簩榪涘埗涓綰у叡浜蔣浠躲?br>       
        C++ 綾?鍜?COM 綾?br>            1銆丆++浣跨敤鎿嶄綔絎ew鏉ュ疄渚嬪寲涓涓璞★紝鑰孋OM瀵硅薄閫氳繃API鐨勫嚱鏁版潵鍒涘緩銆?br>            2銆丆++浣跨敤delete鏉ュ垹闄や竴涓璞★紝COM浣跨敤寮曠敤璁℃暟鏉ユ帶鍒跺璞$殑鐢熷瓨鏈燂紝寮曠敤璁℃暟涓?錛岃嚜鍔ㄥ垹闄ゃ?br>            3銆丆++浣跨敤鐗規(guī)畩鐨勬満鍒舵潵鎺у埗榪愯鏃剁被鍨嬩俊鎭紙run-time type info錛夊拰綾誨瀷杞寲錛坱ypecasting錛夛紝鑰孋OM綾婚氳繃鎴愬憳鍑芥暟鏉ユ敮鎸?br>            4銆丆++綾繪彁渚涙垚鍛樺嚱鏁板拰鏁版嵁浠ヤ緵澶栭儴璁塊棶錛孋OM涓紝綾誨彧鎻愪緵鎴愬憳鍑芥暟銆?br>            5銆丆OM綾繪病鏈夊叿浣撹瀹氱殑甯冨眬銆?br>            6銆丆OM寮曞叆浜?jiǎn)涓濂楁帴鍙g殑瑙勮寖鏉ュ艦寮忓寲瀵硅薄鎸囬拡鐨勬蹇點(diǎn)?br>        浣跨敤COM瀵硅薄錛?br>            鈶犮佺粰鎿嶄綔緋葷粺鍙戦佸疄渚嬪寲涓涓狢OM鐨勮姹傦紱
            鈶°佸緱鍒板璞$殑涓涓帴鍙f寚閽?br>            鈶€佷嬌鐢ㄦ帴鍙o紱          鈶c侀噴鏀炬帴鍙?br>           
    ------------------------          
    COM 鎺ュ彛
        涓涓帴鍙e氨鏄竴緇勭瓑寰呰瀹炵幇鐨勭函铏氬嚱鏁?br>       
    GUID
        Globally Unique Identifier   128浣嶆暟瀛?br>       
        COM 綾葷殑ID鐢?"CLSID"浣滀負(fù)鍓嶇紑錛?br>        鎺ュ彛 ID 鐢紓IID錛備綔涓哄墠緙

=================
IUnknown鎺ュ彛
    struct IUnknown{
        virtual HRESULT QueryInterface ( IID& iid, void** ppvObj ) = 0;
        virtual ULONG AddRef()  = 0;
        virtual ULONG Release()  =  0;
    }
    -------
    瀵硅薄鐢熷瓨鏈熺鐞?br>        COM瀵硅薄鑷繁鎺у埗鐢熷瓨鏈熴?br>        COM 瀵硅薄鐨勫紩鐢ㄨ鏁扮敱 IUnknown 鎺ュ彛鐨?AddRef() 鍜孯elease() 榪欎袱涓嚱鏁版潵綆$悊銆?br>    --------
    鎺ュ彛鍗忓晢錛坣egotiation錛岃繍琛屾椂鍙戠幇鍔熻兘錛?br>        褰撲竴涓鎴鋒嫢鏈変簡(jiǎn)涓涓狢OM瀵硅薄鐨勪竴涓帴鍙f寚閽堬紝灝辮兘澶熼氳繃 QueryInterface() 鍙戠幇榪欎釜瀵硅薄鎵鏀寔鐨勫埆鐨勬帴鍙?br>        HRESULT  QueryInterface ( REFIID  riid,  LPVOID  far*  ppvObj );
            riid鐢ㄦ潵鏍囪瘑鎵瑕佸緱鍒扮殑鎺ュ彛鐨?GUID銆?br>            ppvObj 鐢ㄦ潵瀛樻斁鎺ュ彛鎸囬拡
        瀹炵幇 IUnknown::QueryInterface鐨勪竴涓柟娉曪細(xì)
                HRESULT CoSomeObject::QueryInterface ( IID& riid, void  FAR** ppvObj ){
                    HRESULT hr = ResultFromSCode ( E_NOINTERFACE )錛?br>                    *ppvObj = NULL;
                    if ( riid == IID_IUnknown ){
                        *ppvObj = ( IPersist * ) this;
                        hr = NOERROR;
                    } else if (riid  == IID_IPersist ) {
                            *ppvObj = ( IPersist * ) this;
                            hr = NOERROR;
                      }
                    return hr;               
                }
    -------------
    璋冪敤 銆?浣跨敤 銆侀噴鏀俱?br>        1銆佽皟鐢ㄦ煇涓柟娉曞緱鍒頒竴涓帴鍙o紙閫氳繃鍒濆鍖栦竴涓璞℃垨鑰呴氳繃涓涓瓨鍦ㄧ殑鎺ュ彛璋冪敤 QueryInterface()錛夈?br>        2銆佷嬌鐢ㄦ帴鍙e唴鐨勫嚱鏁般?br>        3銆佽皟鐢≧elease() 瀵瑰璞″紩鐢ㄨ鏁板噺1.
       
========================
COM 瀵硅薄鏈嶅姟鍣?br>   
    COM綾誨瓨鍦ㄤ簬鏈嶅姟鍣ㄤ箣涓侰OM鏈嶅姟鍣ㄥ垎涓轟袱縐嶏細(xì) 榪涚▼鍐呮湇鍔″櫒(in-proc)鍜岃繘紼嬪鏈嶅姟鍣紙out-proc錛夈?br>        in-proc server 鏄?DLL褰㈠紡鐨勶紝浠栦滑涓庡鎴峰湪鍚屼竴涓繘紼嬬┖闂村唴銆?br>        out-proc server 鏄綔涓?EXE鏂囦歡褰㈠紡瀛樺湪錛屽拰瀹㈡埛鍦ㄤ笉鍚岀殑榪涚▼絀洪棿鍐咃紙鐢氳嚦鍦ㄤ笉鍚屾満鍣級(jí).
   
    榪涚▼鍐呮湇鍔″櫒錛圖LL錛?br>    榪涚▼澶栨湇鍔″櫒錛圗XE錛?br>        鏈夋洿寮虹殑椴佹鎬э紝榪涚▼澶栨湇鍔″櫒闇瑕佷粯鍑洪澶栫殑浠d環(huán)錛屽垪闆嗭紙marshaling錛夈?br>        涓涓繘紼嬬┖闂村唴鐨勫湴鍧錛堟暟鎹湴鍧銆佸嚱鏁版寚閽堬級(jí)鍦ㄥ彟涓涓繘紼嬬┖闂村唴涓嶈搗浣滅敤錛岄渶瑕佺敤榪滅▼榪囩▼璋冪敤錛圧PC錛夊拰鍒楅泦錛坢arshaling錛夈?br>            marshaling錛?br>                姣忎竴涓帴鍙o紝鍦ㄥ鎴蜂唬鐮佷腑鏈変竴涓唬鐞嗭紙proxy錛夛紝涓涓唬鐞嗘槸涓涓帴鍙g殑榪涚▼鍐呭疄鐜般?br>                鏈嶅姟绔腑錛屾瘡涓涓壒瀹氱殑鎺ュ彛閮藉緩绔嬩簡(jiǎn)涓浠藉瓨鏍癸紙stub錛変唬鐮侊紙鍦ㄦ湇鍔″櫒榪涚▼絀洪棿鍐咃級(jí)銆傚瓨鏍規(guī)槸RPC浼犺緭鐨勬帴鏀剁錛?br>            瀹冩妸浠g悊浼犺繃鏉ョ殑鍑芥暟璋冪敤鍜屽弬鏁頒紶閫掓槧灝勪負(fù)鏄犲皠涓烘湇鍔″櫒榪涚▼鍐呯殑鍑芥暟璋冪敤鍜屽弬鏁頒紶閫掋?br>                瀹㈡埛閫氳繃鎺ュ彛榪涜鍑芥暟璋冪敤鏃訛紝浠g悊灝嗗弬鏁版墦鍖呬負(fù)涓涓?2浣嶅彲縐繪鐨勬暟鎹粨鏋勩傛墦鍖呭畬鍚庯紝瀵規(guī)湇鍔″櫒榪涚▼浜х敓涓涓繙紼嬭繃紼嬭皟鐢ㄣ?br>                鏈嶅姟鍣ㄧ錛屽瓨鏍逛繚瀛樼湡姝g殑鎺ュ彛鎸囬拡銆佸嚱鏁板拰鐩稿叧鐨勬暟鎹粨鏋勩傚瓨鏍瑰皢鍙傛暟浠庡寘涓В寮浠ュ湪鏈繘紼嬬┖闂村唴璋冪敤銆?br>                涓涓嚱鏁拌皟鐢ㄨ繑鍥炴椂錛屽瓨鏍瑰皢榪斿洖鍊煎拰鍏朵粬榪斿洖淇℃伅鎵撳寘錛屽彂閫佸洖浠g悊銆備唬鐞嗚В鍖咃紝鍙栧嚭榪斿洖鍊間緵瀹㈡埛浣跨敤銆?br>               
    綾誨巶錛坈lass  factory錛?br>        COM閫氳繃綾誨巶鏉ュ垱寤哄璞★紝榪涚▼絀洪棿鍐呯殑姣忎竴涓狢OM綾婚兘鏈変竴涓被鍘備笌涔嬬浉瀵瑰簲銆傜被鍘備駭鐢熺殑鏄璞★紝涓嶆槸綾匯?br>        綾誨巶鏄竴涓壒孌奀OM綾匯?br>        涓涓噸瑕佺殑鎺ュ彛鏄?IClassFactory銆傚畠鍖呭惈涓や釜鍑芥暟錛欳reateInstance()鍜孡ockServer()銆?br>            瀹㈡埛閫氳繃璋冪敤CreateInstance鏉ュ垱寤篛LE綾葷殑瀹炰緥錛孡ockServer鏉ュ鍔犳暣涓湇鍔″櫒鐨勫紩鐢ㄨ鏁般?br>        姣忎竴涓狢OM綾誨湪婧愪唬鐮佷竴綰ч兘鏈夎嚜宸辯殑綾誨巶銆?br>            榪涚▼鍐呮湇鍔″櫒閫氳繃涓涓鍏堝畾涔夌殑鍑芥暟灝嗙被鍘傛彁渚涚粰瀹㈡埛錛?br>            榪涚▼澶栨湇鍔″櫒灝嗙被鍘傛敞鍐屽埌 Windows鐨勬敞鍐岃〃涓?br>           
    鍦ㄨ繘紼嬪唴鏈嶅姟鍣ㄦ彁渚涚被鍘?br>        閫氳繃瀵煎嚭鍑芥暟錛坋xported function錛夋潵鎻愪緵綾誨巶錛屽嚱鏁板悕涓猴細(xì)DLLGetClassObject()銆?br>            瀹㈡埛鍙互閫氳繃 CoGetClassObject() 鎴?CoCreateInstance() 鏉ュ垱寤轟竴涓?COM 瀵硅薄銆傚畠浠兘璋冪敤浜?jiǎn)DLLGetClassObject鏉ュ緱鍒扮浉搴擟OM綾葷殑綾誨巶鎺ュ彛鎸囬拡銆?br>        鐒跺悗鍙互璋冪敤綾誨巶鐨凜reateInstance() 鏉ュ垱寤轟竴涓被鐨勫疄渚嬪茍涓斿緱鍒頒竴涓帴鍙f寚閽堛?br>            STDAPI  DllGetClassObject ( REFCLSID rclsid, REFIID  riid,  LPVOID  FAR* ppv)
            瑕佸緱鍒扮殑綾誨巶鐨凜OM綾葷殑GUID鍊鹼紝絎笁涓弬鏁?鏄竴涓寚鍚戞帴鍙f寚閽堢殑鎸囬拡錛岀敤鏉ュ瓨鏀捐姹傜殑鎺ュ彛鎸囬拡鐨勫湴鏂廣?br>           
    鍦ㄨ繘紼嬪鏈嶅姟鍣ㄤ腑鎻愪緵綾誨巶錛?br>        鍦ㄨ繍琛屾椂鍦ㄦ敞鍐岃〃閲屾敞鍐岀被鍘傦紝CoRegisterClassObject()錛?br>            HRESULT CoRegisterClassObject ( REFCLSID clsid,           // 瑕佹敞鍐岀殑綾葷殑GUID
                        IUnknown *pUnk,                          //瀵硅薄鐨?IUnknown 鎸囬拡
                        DWORD  grfContext,              //鍙傛暟鐢ㄦ潵鏍囪瘑鏈嶅姟鍣ㄧ殑鐜鈥斺斿彲鎵ц鐨勬湇鍔″櫒浠g爜鏄竴涓狣LL銆佷竴涓湰鍦版湇鍔″櫒榪樻槸涓涓繙紼嬫湇鍔″櫒
                        DWORD  grfFlags,               //鐢ㄦ潵琛ㄧず瀹㈡埛浣跨敤浣曠鏂瑰紡璺熸湇鍔″櫒寤虹珛榪炴帴
                        LPDWORD  pdwRegister );     //鎸囧悜DWORD鐨勬寚閽堬紝鎵鎸囧悜鐨勫煎湪綾誨巶娉ㄥ唽鐨勬椂鍊欑敱COM鏉ュ~鍐欍傝鍊兼爣璇嗕簡(jiǎn)綾誨巶鐨勬敞鍐屼俊鎭紝鍙互閫氳繃
                                                                        瀹冪劧鍚庤皟鐢?CoRevokeClassObject() 鏉ュ彇娑堢被鍘傜殑娉ㄥ唽銆?br>                                                                       
    鍗歌澆榪涚▼鍐呮湇鍔″櫒
        璋冪敤COM涓殑 CoFreeUnusedLibraries() 鏉ュ疄鐜拌繖涓姛鑳斤紝璇ュ嚱鏁伴氳繃璋冪敤DLL鐨凞LLCanUnloadNow()鏉ヨ闂槸鍚﹁兘琚嵏杞姐?br>    鍗歌澆榪涚▼澶栨湇鍔″櫒
        榪涚▼澶栨湇鍔″櫒鏄嚜宸卞嵏杞借嚜宸憋紝
            · 褰撳鎴峰噺灝戞湇鍔″櫒鐨勫紩鐢ㄨ鏁幫紙閫氳繃璋冪敤IClassFactory::LockServer ( FALSE )錛岃屼笖澶栭儴娌℃湁瀵硅薄浜?jiǎn)銆?br>            · 褰撳鎴烽噴鏀炬渶鍚庝竴涓璞$殑鏈鍚庝竴涓帴鍙f寚閽堬紝騫朵笖鏈嶅姟鍣ㄧ殑閿佽鏁版槸0.
           


 



Euan 2010-03-15 23:28 鍙戣〃璇勮
]]>
銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?10. MFC鐨凞LL涓庣嚎紼?/title><link>http://www.shnenglu.com/Euan/archive/2010/03/15/109790.html</link><dc:creator>Euan</dc:creator><author>Euan</author><pubDate>Mon, 15 Mar 2010 15:27:00 GMT</pubDate><guid>http://www.shnenglu.com/Euan/archive/2010/03/15/109790.html</guid><wfw:comment>http://www.shnenglu.com/Euan/comments/109790.html</wfw:comment><comments>http://www.shnenglu.com/Euan/archive/2010/03/15/109790.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Euan/comments/commentRss/109790.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Euan/services/trackbacks/109790.html</trackback:ping><description><![CDATA[<p>2009-10-1</p> <p>========================================================<br>銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?10. MFC鐨凞LL涓庣嚎紼?br>========================================================</p> <p>---------------------<br>姒傚康錛?br>    妯″潡錛?nbsp; <br>        涓孌靛彲鎵ц鐨勭▼搴忥紙鍖呮嫭EXE鍜孌LL錛夛紝鍏剁▼搴忎唬鐮併佹暟鎹佽祫婧愯鍔犺澆鍒板唴瀛樹腑錛岀敱緋葷粺寤虹疆涓涓暟鎹粨鏋勬潵綆$悊瀹冿紝榪欏氨鏄竴涓ā鍧椼?br>    榪涚▼錛?br>        榪涚▼鏄竴鍫嗘嫢鏈夋潈錛坥wnership錛夌殑闆嗗悎錛岃繘鍦洪偅涓嫢鏈夊湴鍧絀洪棿錛屽姩鎬侀厤緗屾潵鐨勫唴瀛樸佹枃浠躲佺嚎紼嬪拰涓搴忓垪鐨勬ā鍧椼?br>    姒傝錛?br>    · DLL涓庣嚎紼嬬殑瀹炵幇渚濊禆浜庡唴閮?MFC 鐘舵佺被錛孧FC鐨勭姸鎬佸皢鏁版嵁鍒嗗埌涓嶅悓鐨勯昏緫鑼冨洿涓紝浠庤屼嬌寰楃嚎紼嬪拰 DLL 涓嶄細(xì)鐮翠細(xì)瀵規(guī)柟鐨勬暟鎹?<br>    · 鎵╁睍 DLL 浠呬粎鐢ㄦ潵鎵╁睍宸插瓨鍦ㄧ殑 MFC 搴旂敤紼嬪簭銆?br>    · MFC涓紝鎵╁睍 DLL 琚垱寤烘椂瑕佷嬌鐢?_AFXDLL鏍囧織銆?br>    · 鎵╁睍 DLL 鏈変竴浜涜祫婧愬拰鍏朵粬淇℃伅闇瑕佸湪榪愯鏃惰媯(gè)绱€侰DynLinkLibrary鏄畠鐨勮緟鍔╃被銆?br>    <br>    · 杈呭姪綰跨▼錛孶I綰跨▼ 閮芥槸鐢?_beginthreadex()鍒涘緩銆佷互_endthread()鏉ョ粨鏉熴?br>    · CWinThread::CreateThread鍒涘緩綰跨▼錛屽茍涓斾嬌鐢╛AfxThreadEntry()鏉ヤ負(fù)綰跨▼鎻愪緵鎵ц璺緞銆?br>    · 鏍稿績(jī)錛欳WinThread::Run()<br>--------------------<br>MFC鐘舵?/p> <p>3涓璏FC鐘舵佷俊鎭被鍨嬶細(xì)<br>    妯″潡鐘舵併佽繘紼嬬姸鎬併佺嚎紼嬬姸鎬?br>    win32涓紝涓涓ā鍧楀氨鏄嫭绔嬩簬搴旂敤紼嬪簭鍏朵粬閮ㄥ垎鑰屾搷浣滅殑鍙墽琛屼唬鐮併?br>    <br>    妯″潡鐘舵侊紝  鏃㈠彲浠ュ寘鍚湡姝g殑鍏ㄥ眬鐘舵侊紝涔熷彲浠ュ寘鍚繘紼嬪眬閮ㄦ垨鑰呯嚎紼嬪眬閮ㄧ殑鐘舵侊紝涓斿畠鍙互琚揩閫熷湴鍒囨崲銆?br>    鍙妸MFC鐘舵佺悊瑙f垚搴旂敤紼嬪簭涓嶅悓閮ㄥ垎鐨勫眬閮ㄦ暟鎹?br>        榪涚▼鐘舵佸寘鍚眬閮ㄤ簬榪涚▼鍜屾煇涓ā鍧楃殑鏁版嵁銆傛ā鍧楃殑鐘舵佷俊鎭寘鍚眬閮ㄤ簬璇ユā鍧楃殑鏁版嵁錛岀嚎紼嬬殑鐘舵佷俊鎭寘鍚眬閮ㄤ簬璇ョ嚎紼嬬殑鏁版嵁銆?br>        <br>    ------------------------------<br>    MFC榪涚▼鐘舵?nbsp;       <br>   <br>AFX_MODULE_PROCESS_STATE鐨勫畾涔夛紝   AFXSTAT_.H                  銆婃繁鍏ヨВ鏋怣FC銆婸301<br>    · m_pfnFilterToolTipMessage 鈥斺?涓涓嚱鏁版寚閽堬紝鎸囧悜鐢ㄤ簬榪囨護(hù)宸ュ叿鎻愮ず娑堟伅鐨勫嚱鏁般?br>    · CTypedSimpleList<CDynLinkLibrary*> m_libraryList 鈥斺?闄勫姞鐨凪FC鎵╁睍DLL閾捐〃<br>    · HINSTANCE m_appLangDLL 鈥斺?褰撳墠琚眬閮ㄥ寲鐨勮祫婧愮殑瀹炰緥鍙ユ焺銆?br>    · COccManager* m_pOccManager 鈥斺?鎸囧悜OLE鎺т歡綆$悊瀵硅薄鐨勬寚閽?br>    · CTypedSimpleList<COleControlLock*>  m_lockList 鈥斺?琚攣瀹氱殑 OLE 鎺т歡閾捐〃<br>    <br>    ------------------------------<br>    MFC妯″潡鐘舵?/p> <p>AFX_MODULE_STATE 瀹氫箟錛?nbsp;    AFXSTAT_.H            銆婃繁鍏ヨВ鏋怣FC銆?nbsp; P302<br>    · CWinApp*  m_pCurrentWinApp 鈥斺?鎸囧悜璇ユā鍧楃殑CWinApp瀵硅薄鐨勬寚閽?br>    · HINSTANCE  m_hCurrentInstanceHandle 鈥斺?妯″潡鐨勫疄渚嬪彞鏌?br>    · HINSTANCE  m_hCurrentResourceHandle 鈥斺?璧勬簮鐨勫疄渚嬪彞鏌?br>    · LPCTSTR  m_lpszCurrentAppName 鈥斺?褰撳墠搴旂敤紼嬪簭鐨勫悕縐?br>    · BYTE  m_bDLL  鈥斺?鎸囨槑璇ユā鍧楁槸鍚︽槸 DLL 鐨勪竴涓爣蹇椼?br>    · BYTE  m_bSystem 鈥斺?鎸囨槑璇ユā鍧楁槸鍚︽槸緋葷粺妯″潡鐨勪竴涓爣蹇?br>    · short  m_fRegisteredClasses 鈥斺?鐢ㄤ簬妯″潡鐨勫歡榪熸敞鍐岀被鐨勪綅鏍囪瘑銆?br>    · CRuntimeClass*  m_pClassInit 鈥斺?鎸囧悜絎竴涓被鐨?CRuntimeClass 淇℃伅鐨勬寚閽堬紙閫氬父鏄?m_classList鐨勫ご錛?br>    · CTypedSimpleList<CRuntimeClass*>  m_classList 鈥斺?妯″潡閲屽悇涓璞$殑 CRuntimeClass 淇℃伅閾捐〃<br>    · COleObjectFactory*  m_pFactoryInit 鈥斺?鎸囧悜絎竴涓?COleObjectFactory瀵硅薄鐨勬寚閽堬紙閫氬父鏄?m_factoryList 鐨勫ご錛?nbsp;    <br>    · CTypedSimpleList<COleObjectFactory*>  m_factoryList 鈥斺?妯″潡閲屽悇涓璞$殑 COleObjectFactory 瀵硅薄鐨勯摼琛?br>    · long m_nObjectCount 鈥斺?琚攣浣忕殑OLE瀵硅薄鐨勬暟鐩?br>    · BOOl  m_bUserCtrl 鈥斺?濡傛灉鐢ㄦ埛鏈夋帶鍒舵潈錛屽垯璁劇疆涓?TRUE錛屽惁鍒欎負(fù)FALSE<br>    · TCHAR  m_szUnregisterList 鈥斺?鏈娉ㄥ唽鐨勭被閾捐〃<br>    · WNDPROC  m_pfnAfxWndProc 鈥斺?鎸囧悜妯″潡鎵鏈夌殑 AfxWndProc 鐨勬寚閽?br>    · DWORD   m_dwVesion 鈥斺?妯″潡榪炴帴鎵浣跨敤鐨?MFC 鐗堟湰鍙?br>    · m_process 鈥斺?榪涚▼鐘舵佷俊鎭?nbsp; PROCESS_LOCAL( AFX_MODULE_PROCESS_STATE,  m_process )<br>    · m_thread 鈥斺?綰跨▼鐘舵佷俊鎭?nbsp;  THTEAD_LOCAL( AFX_MODULE_THREAD_STATE, m_thread )<br>    <br>    -------------------------------<br>    MFC 綰跨▼鐘舵佷俊鎭?nbsp;                 銆婃繁鍏ヨВ鏋怣FC銆婸305<br>    <br>_AFX_THREAD_STATE<br>    · AFX_MODULE_STATE*  m_pModuleState 鈥斺?鎸囧悜褰撳墠妯″潡鐘舵佺殑鎸囬拡<br>    · AFX_MODULE_STATE*  m_pPrevModuleState 鈥斺?鎸囧悜涓嬩竴涓ā鍧楃姸鎬佺殑鎸囬拡<br>    · void* m_pSafetyPoolBuffer 鈥斺?鎸囧悜瀹夊叏緙撳啿鍖虹殑鎸囬拡錛屽畠鏀寔寮哄.鐨勪復(fù)鏃跺璞″唴瀛樺垎閰?br>    · AFX_EXCEPTION_CONTEXT  m_exceptionContext 鈥斺?褰撳墠鐨勫紓甯哥幆澧冦?br>    · CWnd*  m_pWndInit 鈥斺?涓涓獥鍙f寚閽堬紝鎸囧悜鏈榪慼ook鐨勭獥鍙?br>    · CWnd*  m_pAlternateWndInit 鈥斺?鎸囧悜鏈榪戣hook鐨勫叕鐢ㄥ璇濇紿楀彛鐨勬寚閽?br>    · DWORD  m_dwPropStyle 鈥斺斿睘鎬ч〉鐨勯鏍?br>    · DWORD  m_dwPropExStyle 鈥斺?灞炴ч〉鐨勬墿灞曢鏍?br>    · HWND  m_hWndInit 鈥斺?m_pWndInit 鐨勫尮閰嶅彞鏌?br>    · BOOL  m_bDlgCreate 鈥斺?琛ㄦ槑鏌愪釜瀵硅瘽妗嗚鍒涘緩浜?jiǎn)锛孧FC涓哄璇濇緇樺埗涓庢櫘閫氱獥鍙d笉鍚岀殑鑳屾櫙棰滆壊<br>    · HHOOK  m_hHookOldSendMsg 鈥斺?鐢?:SetWindowsHookEx ( WH_CALLWNDPROC ) 榪斿洖鐨勫墠涓涓彞鏌勭殑鍙ユ焺<br>    · HHOOK  m_hHookOldCbtFilter 鈥斺?鐢?:SetWindowsHookEx ( WH_CBT )榪斿洖鐨勫墠涓鍙ュ茍鐨勫彞鏌勩?br>    · HHOOK  m_hHookOldMsgFilter 鈥斺?鐢?:SetWindowsHookEx ( WH_MSGFILTER 錛夎繑鍥炵殑鍓嶄竴涓彞鏌勭殑鍙ユ焺<br>    · MSG  m_lastSentMsg 鈥斺?鍙戦佺殑鏈鍚庝竴涓秷鎭?br>    · HWND  m_hTrackingWindow 鈥斺?褰撳墠璺熻釜紿楀彛鐨勫彞鏌?br>    · HMENU  m_hTrackingMenu 鈥斺?褰撳墠璺熻釜鑿滃崟鐨勫彞鏌?br>    · TCHAR  m_szTempClassName 鈥斺?鍦?AfxRegisterWndClass() 涓嬌鐢ㄧ殑緙撳啿鍖?br>    · HWND  m_hLockoutNotifyWindow 鈥斺?鍦ㄩ攣瀹氾紙娌℃湁OLE鎺т歡錛夌殑紿楀彛鍙ユ焺錛屽鏋滃瓨鍦ㄤ竴涓殑璇濄?br>    · BOOL  m_bInMsgFilter 鈥斺?琛ㄦ槑璇ョ嚎紼嬪湪涓涓秷鎭繃婊ゅ櫒涓殑鏍囧織銆?br>    · CView*  m_pRoutingView 鈥斺?鍦ㄥ皢娑堟伅鍙戦佺粰鏂囨。涔嬪墠錛岃鍥炬墍鍏堝皢鑷繁淇濆瓨鍒拌鍙橀噺涓?br>    · CFrameWnd*  m_bWaitForDataSource 鈥斺?涔嬪悕 ODBC 姝e湪絳夊緟鐨勬暟鎹?br>    · CToolTipCtrl*  m_pToolTip 鈥斺?鎸囧悜褰撳墠CToolTipCtrl鐨勬寚閽?br>    · CWnd*  m_pLastHit 鈥斺?鎸囧悜鎷ユ湁宸ュ叿鎻愮ず鎺т歡鐨勬渶鍚庝竴涓獥鍙g殑鎸囬拡<br>    · int  m_nLastHit 鈥斺?鏈鍚庣殑鐐瑰嚮嫻嬭瘯浠g爜錛堢敤浜庡伐鍏鋒彁紺虹偣鍑?yán)L祴璇曪級(jí)<br>    · TOOLINFO  m_lastInfo 鈥斺?鏈鍚庣殑宸ュ叿鎻愮ず TOOLINFO緇撴瀯<br>    · int  m_nLastStatus 鈥斺?鏈鍚庣殑嫻姩鐘舵佷唬鐮?br>    · CControlBar*  m_pLastStatus 鈥斺?鎸囧悜鏈鍚庣殑嫻姩鐘舵佹帶鍒舵潯鐨勬寚閽?br>    <br>    ----------------------------------------------<br>    MFC鐘舵佷箣闂寸殑鑱旂郴               銆婃繁鍏ヨВ鏋怣FC銆婸305<br>    <br>    褰揗FC闇瑕佸埌杈懼綋鍓嶇殑 _AFX_THREAD_STATE鏃訛紝璋冪敤 AfxGetThreadState() <br>    THREAD_LOCAL( _AFX_THREAD_STATE, _afxThreadState )<br>    榪欒浠g爜涓烘瘡涓嚎紼嬬殑 TLS 鍒涘緩涓涓悕涓?_afxThreadState 鐨?_AFX_THREAD_STATE 綾伙紝鍙氳繃璋冪敤 AfxGetThreadState錛堬級(jí)鏉ヨ闂?br>    _AFX_THREAD_STATE 璁板綍浜?jiǎn)鎸囧悜褰撳墠妯″潡鐘舵佺殑鎸囬拡錛屽悕涓?m_pModuleState銆傚彲閫氳繃璋冪敤 AfxGetModuleState()寰楀埌銆?br>        · 澶氭暟鎯呭喌浼?xì)寰楀?_afxThreadState.m_pModuleState 鐨?AFX_MODULE_STATE<br>        · 濡傛灉涓篘ULL錛屽皢鏈変竴涓叏灞鐨勮繘紼嬪眬閮ㄦā鍧楃姸鎬侊紝PROCESS_LOCAL( _AFX_BASE_MODULE_STATE,  _afxBaseModuleState )<br>    褰揗FC鏄竴涓狣LL鏃訛紝浼?xì)閫氳繃璋冪敤 AfxSetModuleState() 鏉ユ敼鍙樻ā鍧楃殑鐘舵併?/p> <p><br>=================<br>MFC鐨凞LL<br>    ---------------------------銆婃繁鍏ヨВ鏋怣FC銆婸307<br>    USRDLL   涓?nbsp; AFXDLL<br>    <br>    USRDLL錛?br>            鍙闈?rùn)鎬?#8220;綺樿創(chuàng)”鍒癉LL涓婏紝鍙互鍐岲LL浣跨敤MFC錛岃屼笉蹇呰姹備嬌鐢ㄨDLL鐨勫簲鐢ㄧ▼搴忎篃鏄敤MFC鍐欑殑銆?nbsp;           <br>    AFXDLL :<br>            鏄嬌鐢ㄤ簡(jiǎn)MFC鐨凞LL錛屽彧鑳界敤浜嶮FC紼嬪簭銆?/p> <p>    ---------------------------<br>    DLL 鐨勮祫婧愰棶棰?br>    <br>        DLL 閲屾湁 3 縐嶇被鍨嬬殑淇℃伅錛?nbsp;  <br>                    璧勬簮銆?nbsp;     闈?rùn)鎬佺殑CRuntimeClass鎸囬拡銆?nbsp;          OLE瀵硅薄鍘傦紙object factory錛?br>        MFC 鐨?DLL 鐗堟湰紼嬪簭璧風(fēng)偣鍦?DllMain()錛堝綋DLL琚杞芥椂璇ュ嚱鏁拌璋冪敤錛?br>        <br>            AfxInitExtensionModule( coreDLL, hInstance );<br>            CDynLinkLibrary*  pDLL  =  new  CDynLinkLibrary ( coreDLL,  TRUE ); <br>            <br>        瑁呰澆璧勬簮鏃訛紝閫氳繃璋冪敤 AfxFindResourceHandle() 鏉ュ疄鐜?br>            AfxInitExtensionModule( AFX_EXTENSION_MODULE& state,  HMODULE  hModule )<br>            {<br>            //only initialize once<br>                if ( state.bInitialized ){   //鑻ヨ妯″潡宸茬粡鍒濆鍖栵紝AfxInitLocalData()琚皟鐢ㄦ潵鏇存柊 TLS 浣跨敤鐨勬ā鍧楀彞鏌勩?br>                    AfxInitLocalData( hModule 錛夛紱<br>                    return TRUE;<br>                }<br>                state.bInitialized = TRUE;<br>                    // save the current HMODULE info for resource loading <br>                state.hModule  = hModule;<br>                state.hResource = hModule;<br>                    // save the start of the runtime class list<br>                AFX_MODULE_STATE* pModuleState  =  AfxGetModuleState();<br>                state.pFirstSharedClass  = pModuleState->m_classList.GetHead();<br>                pModuleState->m_classList.m_pHead  =  pModuleState->m_pClassInit;<br>                    //save the start of the class factory list<br>                state.pFirstSharedFactory  = pModuleState->m_factoryList.GetHead();<br>                pModuleState->m_factoryList.m_pHead = pModuleState->m_pFactoryInit;<br>                return TRUE;  <br>            }<br>            <br>        --------------------------------<br>        鍓栨瀽 CDynLinkLibrary                        銆婃繁鍏ヨВ鏋怣FC銆婸310<br>        class CDynLinkLibrary : public CCmdTarget<br>        {<br>            HMODULE  m_hModule;             //<br>            HMODULE  m_hResource;           //for  shared  resources<br>            CTypedSimpleList<CRuntimeClass* >  m_classList; <br>            CTypedSimpleList<COleObjectFactory*>  m_factoryList;<br>            BOOL   m_bSystem;                   // TRUE  only  for  MFC  DLLs<br>            <br>            CDynLinkLibrary*  m_pNextDLL;       //simple singly linked  list<br>                //implementation<br>            CDynLinkLibrary::CDynLinkLibrary ( AFX_EXTENSION_MODULE& state,  BOOL  bSystem ){<br>                m_factoryList.Construct( offsetof ( COleObjectFactory, m_pNextFactory ) );<br>                m_classList.Construct( offsetof ( CRuntimeClass, m_pNextClass ) );<br>                    //copy info from  AFX_EXTENSION_MODULE<br>                m_hResource  = state.hResource;<br>                m_classList.m_pHead  =  state.pFirstSharedClass;<br>                m_factoryList.m_pHead  =  state.pFirstSharedFactory;<br>                m_bSystem  =  bSystem;<br>                    //insert at the end of the list ( extensions will go in front of core  DLL )<br>                AFX_MODULE_PROCESS_STATE*  pState  =  AfxGetModuleProcessState();<br>                AfxLockGlobals ( CRIT_DYNLINKLIST );<br>                pState->m_libraryList.AddHead ( this );<br>                AfxUnlockGlobals ( CRIT_DYNLINKLIST );<br>            }<br>        }<br>        <br>        --------------------------------<br>        鍓栨瀽 AfxFindResourceHandle()                銆婃繁鍏ヨВ鏋怣FC銆婸311<br>            AfxFindResourceHandle()               "DLLINIT.CPP"<br>            <br>            棣栧厛錛屽鏋滃綋鍓嶆ā鍧椾笉鏄郴緇熸ā鍧楋紝鍦ㄥ綋鍓嶆ā鍧楃殑璧勬簮鍙ユ焺錛堢敱AfxGetResourceHandle() 鍑芥暟榪斿洖錛夐噷鏌ユ壘璧勬簮銆?br>            鎺ョ潃錛屽湪榪涚▼鐘舵?m_libraryList 閲岄亶鍘?CDynLinkLibrary 閾捐〃銆傝嫢鎵╁睍DLL涓嶆槸緋葷粺 DLL錛孎indResource() 琚皟鐢ㄣ?br>                      鐒跺悗鍦ㄨ榪涚▼鐘舵佹寚鍚戠殑涓庣壒瀹氳璦鐩稿叧鐨凞LL閲屽鎵捐淇℃伅銆?br>            鎺ョ潃錛屾鏌ュ綋鍓嶇殑妯″潡鏄惁鏄郴緇熸ā鍧楋紝璋冪敤FindResource() 鎼滅儲(chǔ)璧勬簮錛屾渶鍚庡啀嬈¢亶鍘?CDynLinkLibrary閾捐〃錛屽湪緋葷粺鎵╁睍DLL閲屾煡鎵捐璧勬簮<br>            鑻ユ病鏈夊彂鐜頒換浣曚笢瑗匡紝榪斿洖 AfxGetResourceHandle()錛屽嵆榪斿洖浜?jiǎn)杩浗E嬬殑褰撳墠璧勬簮鍙ユ焺銆?br>            </p> <p>        --------------------------------<br>        鎵╁睍 DLL 鍒濆鍖栦笌娓呴櫎<br>        <br>        AFXDLL 涓?瀹?br>            DECLARE_DYNAMIC錛?DLL鐗?鍜?闈濪LL鐗堟湰錛?nbsp; 錛圓FX.H錛?nbsp;     銆婃繁鍏ヨВ鏋怣FC銆婸312<br>            IMPLEMENT_DYNAMIC            錛圓FX.H錛?br>            <br>            DLL 鍜?闈濪LL涔嬮棿鐨勫樊鍒細(xì)<br>                MFC蹇呴』璋冪敤鑳借繑鍥為潤(rùn)鎬?CRuntimeClass鎴愬憳鍦板潃鐨勫嚱鏁幫紝鑰屼笉鏄洿鎺ュ瓨鍌ㄣ佽闂潤(rùn)鎬丆RuntimeClass鏁版嵁鎴愬憳鐨勫湴鍧銆?br>                <br>                <br>=========================<br>MFC 綰跨▼<br>    杈呭姪綰跨▼            UI 綰跨▼<br>    AfxBeginThread()<br>        杈呭姪綰跨▼錛氬皢涓涓?CWinThread瀵硅薄鍜屼竴涓寚閽堜紶閫掔粰鎺у埗鍑芥暟錛堟帶鍒跺嚱鏁拌礋璐e伐浣滅殑瀹屾垚錛?br>        UI 綰跨▼錛?nbsp; 鍒涘緩涓涓?CWinThread錛屽皢浠栫殑 CRuntimeClass 淇℃伅浼犻掔粰 AfxBeginThread()銆?br>        <br>    --------------------------<br>    MFC 鐨勮緟鍔╃嚎紼?nbsp;               <br>            AfxBeginThread(){<br>                CWinThread*  pThread = new CWinThread ( pfnThreadProc,  pParam );<br>                if ( !pThread->CreateThread ( dwCreateFlags | CREATE_SUSPENDED, nStackSize, lpSecurityAttrs ) ){<br>                    pThread->Delete();          return NULL;<br>                }<br>                VERIFY ( pThread->SetThreadPriority ( nPriority ) );<br>                if( !(dwCreateFlags & CREATE_SUSPENDED )<br>                    VERIFY ( pThread->ResumeThread() != (DWORD) - 1);<br>                return  pThread;<br>            }<br>    <br>           <br>=========================<br>CWinThread                                          銆婃繁鍏ヨВ鏋怣FC銆婸316<br>    <br>    鏁版嵁鎴愬憳錛?br>        · CWnd*  m_pMainWnd 鈥斺?鎸囧悜搴旂敤紼嬪簭涓葷獥鍙g殑鎸囬拡錛?CWinThread闇瑕佺敤璇ユ寚閽堟潵姝g‘鍦扮敤紼嬪簭鐨勪富紿楀彛銆?br>        · CWnd*  m_bActiveWnd 鈥斺?褰揙LE 鏈嶅姟鍣ㄥ湪鏌愪釜鍦版柟澶勪簬媧誨姩鐘舵佹椂錛岃鎸囬拡鎸囧悜鍖呭惈搴旂敤紼嬪簭鐨勪富紿楀彛銆?br>        · BOOL   m_bAutoDelete 鈥斺?褰撹鍙橀噺涓?TRUE鏃訛紝 CWinThread浼?xì)鍦ňU跨▼緇撴潫鏃跺垹闄よ嚜宸便?br>        · HANDLE  m_hThread 鈥斺?琚?CWinThread灝佽鐨刉in32綰跨▼鐨勫彞鏌?br>        · DWORD  m_hThreadID 鈥斺?琚獵WinThread 灝佽鐨勭嚎紼嬬殑 Win32 綰跨▼ ID銆?br>        · MSG  m_msgCur 鈥斺?緙撳啿褰撳墠姝h CWinThread 娑堟伅鍙戦佸叾鎵澶勭悊鐨勬秷鎭?br>        · LPVOID  m_pThreadParams 鈥斺?淇濆瓨pParam鍙傛暟錛屼粬浼?xì)鐟艟l紶閫掔粰杈呭姪鍑芥暟錛坵orker function錛夈?br>        · AFX_THREADPROC  m_pfnThreadProc 鈥斺?鎸囧悜杈呭姪鍑芥暟鐨勬寚閽?br>        · CPoint   m_ptCursorLast 鈥斺?鏈鍚庨紶鏍囩Щ鍔ㄦ秷鎭腑鐨?CPoint銆傝鐢ㄦ潵鍦?CWinThread 鐨勭┖闂叉椂鍒昏繃婊ゆ帀澶氫笌鐨勯紶鏍囩Щ鍔ㄤ俊鎭?br>        · UINT  m_nMsgLast 鈥斺?鐢ㄦ潵鎺㈡祴涓や釜榪炵畫鐨勬秷鎭?br>        <br>        · CommonConstruct() 鈥斺?渚涙瀯閫犲嚱鏁拌皟鐢紝浠呬粎灝嗘暟鎹垚鍛樿緗垚姝g‘鐨勯粯璁ゅ?br>        · Delete() 鈥斺?濡傛灉 m_bAutoDelete涓篢RUE錛屽垯璋冪敤鍒犻櫎鑷韓銆?br>        <br>    ----------------------.                                             銆婃繁鍏ヨВ鏋怣FC銆婸317<br>    綰跨▼鐨勫垱寤衡斺?nbsp;                  “THRDCORE.CPP”<br>    CWinThread::CreateThread() 絎竴閮ㄥ垎錛?nbsp;                      <br>        BOOL  CWinThread::CreateThread ( DWORD dwCreateFlags,  UINT nStackSize, LPSECURITY_ATTRIBUTES   lpSecurityAttrs ){<br>                //setup startup structure for thread initialization<br>            _AFX_THREAD_STARTUP  startup;<br>            memset ( &startup,  0, sizeof( startup) );<br>            startup.pThreadState = AfxGetThreadState();         //_AFX_THREAD_STATE<br>            startup.pThread = this;                     //鎸囧悜 CWinThread 鐨勫悗鍚戞寚閽?錛坆ack pointer錛?br>            startup.hEvent = ::CreateEvent ( NULL, TRUE, FALSE, NULL);     //綰跨▼琚垚鍔熷垱寤哄悗錛宧Event琚Е鍙?br>            startup.hEvent2 = ::CreateEvent ( NULL, TRUE, FALSE, NULL);   //綰跨▼琚噸鏂板惎鍔紝hEvent2 琚Е鍙?br>            startup.dwCreateFlags = dwCreateFlags;        //鎸囧畾綰跨▼鏄惁搴旇琚寕璧蜂互鍙?qiáng)鍏朵粬淇℃伅鐨勫垱寰忔爣蹇椼?br>                //**some event checking and cleanup omitted for brevity<br>                //create the thread (it may or may not start to run)<br>            m_hThread = (HANDLE) _beginthreadex ( lpSecurityAttrs, nStackSize, &_AfxThreadEntry,  &startup, <br>                                                 dwCreateFlags | CREATE_SUSPENDED,  (UINT* ) &m_nThreadID );<br>            if( m_hThread ==NULL)    <br>                return FALSE;<br>        }<br>        綰跨▼鍒涘緩涔嬪悗錛?br>                //CWinThread::CreateThread()  continued...<br>            鈶?ResumeThread();<br>            ::WaitForSingleObject ( startup.hEvent,  INFINITE );<br>            鈶?::CloseHandle ( startup.hEvent );<br>                //if created suspended , suspend it until resum thread wakes it up<br>            if( dwCreateFlags & CREATE_SUSPENDED )<br>                ::SuspendThread ( m_hThread );<br>            if( startup.bError )<br>                //**Error cleanup omitted - lots of frees and closes <g><br>                // allow thread to continue, once resumed (it may already be resumed)<br>                ::SetEvent ( startup.hEvent2 );<br>            return TRUE;<br>        <br>        涓涓渶鍒濊皟鐢–reateThread() 寰楀埌鐨勭嚎紼嬶紙鐖剁嚎紼嬶級(jí)錛屽彟涓涓鍦ㄥ辜紼氭湡鐨勭嚎紼嬨?br>            鍒扳憼鏃惰皟鐢?:ResumeThread( m_hThread ),榪欐槸鐖惰繘紼嬫殏鍋滐紝瀹冪瓑寰卂AFX_THREAD_START::hEvent銆?br>            騫肩鏈熺嚎紼嬪紑濮嬭繍琛岋紝寮濮嬬殑浣嶇疆鍦?_beginthreadex()璋冪敤鍛婅瘔鐨勪綅緗細(xì)_AfxThreadEntry()<br>    鈯欙箯鈯檅      _AfxThreadEntry 綆縐頒負(fù) “_ATE”         銆婃繁鍏ヨВ鏋怣FC銆婸319<br>        1銆乢ATE灝嗗畠鐨?_AFX_THREAD_STARTUP 鍙傛暟鐨?pThread 鍩熶繚瀛樺埌鐪熸鐨?CWinThread 鎸囬拡閲屻?br>        2銆佺劧鍚庤皟鐢?AfxGetThreadState()錛屽畠浼?xì)杩斿洖鐖毒U跨▼鐨勭姸鎬侊紝澶嶅埗澶ч儴鍒嗙埗綰跨▼鐨勭姸鎬佷俊鎭紝鐢╛AFX_THREAD_STARTUP鐨勫弬鏁版潵淇敼妯″潡鐘舵併?br>                鏂扮殑瀛愮嚎紼嬩粠鐖剁嚎紼嬮偅閲?#8221;緇ф壙“鍒頒簡(jiǎn)妯″潡鐘舵佷俊鎭?br>        3銆佸啀璋冪敤 AfxInitThread()錛岃鍑芥暟涓鴻綰跨▼鍒涘緩浜?jiǎn)涓涓秷鎭槦鍒椾互鍙?qiáng)涓浜涙秷鎭繃婊ゅ櫒銆?br>        4銆佸湪AfxInitThread()鎵ц瀹屾垚鍚庯紝_ATE鍒涘緩涓涓眬閮ㄧ殑 CWnd瀵硅薄錛屽茍灝嗗畠璐撮檮鍒板綋鍓嶇殑涓葷獥鍙i噷銆?br>                鍗沖皢瀹冭創(chuàng)闄勫埌 CWinApp::m_pMainWnd::m_hWnd錛岀劧鍚庝嬌寰?CWinThread::m_pMainWnd鎸囬拡鎸囧悜瀹冪殑鍦板潃銆?br>        5銆乭Event2鍙ユ焺琚粠 _AFX_STARTUP_THREAD鎸囬拡閲屾嫹璐濆嚭鏉ャ?br>        6銆佸噯澶囬氱煡鐖剁嚎紼嬪瓙綰跨▼宸插噯澶囧ソ錛屼俊鍙瘋杞崲鎴愭椂闂達(dá)紝浣垮緱鐖剁嚎紼嬮噷鐨?::WaitForSingleObject() 琚惎鍔ㄣ傜湡姝g殑鍑芥暟璋冪敤鏄?::SetEvent(startup->hEvent)<br>        7銆乢ATE璋冪敤 ::WaitForSingleObject( hEvent2, INFINITE ) 灝嗘柊鐨?鎴愪漢綰跨▼浼戠湢錛岀洿鍒扮埗綰跨▼鍙戝嚭鏈鍚庣殑淇″彿        <br>            榪欐椂錛屽湪璋冪敤瀹?:WaitForSingleObject()鍚庯紝鍥炲埌鐖剁嚎紼嬶紝鍗沖洖鍒扳憽銆?br>            鐖剁嚎紼嬭皟鐢?:CloseHandle() 涓哄畠鐨勫瓙濂蟲竻闄?hEventHandle錛岃嫢瀛愮嚎紼嬩互鏆傚仠鏂瑰紡琚皟鐢紝鍒欏湪瀛愮嚎紼嬭皟鐢?:SuspendThread()銆?br>        8銆乄aitForSingleObject()璋冪敤瀹屾垚鍚庯紝瀛愮嚎紼嬪悜瀹冪殑鐖剁嚎紼嬭鍐嶈錛屽茍鍏抽棴浜?hEvent2 璁板綍鐨勫彞鏌?br>        9銆佸鏋淐WinThread::m_pfnThreadProc闈炵┖錛屽瓙綰跨▼浼?xì)鎰忚瘑鍒拌嚜宸辨?杈呭姪綰跨▼錛屽茍涓旈氳繃鎺у埗浼犻掔粰 m_pfnThreadProc鏉ュ紑濮嬪伐浣?br>        10銆佽嫢m_pfnthreadproc涓虹┖錛屽垯涓轟竴涓猆I 綰跨▼銆?br>        <br>            _AfxThreadEntry() 涓笌 UI 鏈夊叧鐨勯儴鍒?nbsp;         "THRDCORE.CPP"<br>                    //Initialization and synchronization with mom before here.<br>                if ( pThread->m_pfnThreadProc != NULL )<br>                    nResult = pThread->ExitInstance();<br>                else if ( ! pThread->InitInstance() )         // InitInstance() 琚獵WinThread鐨勬淳鐢熺被閲嶈澆<br>                    nResult = pThread->ExitInsance();<br>                else<br>                    nResult = pThread->Run();             // 閫氬父鎯呭喌璋冪敤 CWinThread::Run()<br>                    //cleanup and shutdown the thread<br>                threadWnd.Detach();                             //灝嗗眬閮ㄧ殑 CWnd 涓葷獥鍙e璞″垎紱誨嚭鏉?br>                AfxEndThread( nResult );                        //鏈緇堣皟鐢?_endthreadex().<br>                return 0;           //not reached<br>    ----------------<br>    MFC   UI 綰跨▼                                                                銆婃繁鍏ヨВ鏋怣FC銆婸320</p> <p>        杈呭姪綰跨▼浠呴渶鍚?CWinThread 鎻愪緵涓涓寚鍚戞煇涓嚱鏁扮殑鎸囬拡錛?br>        UI 綰跨▼ 闇瑕佷粠CWinThread 媧劇敓銆?br>            · ExitInstance() 鈥斺?褰撶嚎紼嬬粨鏉熸椂鎵ц涓浜涙竻鐞嗗伐浣溿?br>            · InitInstance() 鈥斺?鎵ц綰跨▼瀹炰緥鐨勫垵濮嬪寲宸ヤ綔銆?br>            · OnIdle() 鈥斺?鎵ц涓庣嚎紼嬫湁鍏崇殑絀洪棽鏃剁殑澶勭悊宸ヤ綔銆?br>            · PreTranslateMessage() 鈥斺?娑堟伅榪囨護(hù)鍣?br>            · Run() 鈥斺?娑堟伅娉碉紙闈濵FC娑堟伅鐨勫驚鐜鐞嗭級(jí)<br>        CWinApp 鏄竴涓猆I綰跨▼<br>                    <br>    -----------------------------<br>    CWinThread::Run()                        “THRDCORE.CPP”<br>   <br>    int CWinThread::Run(){<br>        BOOL bIdle = TRUE;<br>        LONG  lIdleCount = 0;<br>        for( ; ; ){<br>                //phase1: check to see if we can do idle work<br>            while (bIdle && ! ::PeekMessage ( &m_msgCur, NULL, NULL, NULL, PM_NOREMOVE ) ){<br>                if ( ! OnIdle ( lIdleCount ++ ) )<br>                    bIdle = FALSE;                      // assume "no idle " state<br>            }<br>                //phase 2: pump messages while available<br>            do  {<br>                  if ( !PumpMessage() )<br>                      return ExitInstance();<br>                  if ( IsIdleMessage ( &m_msgCur ) ){<br>                      bIdle = FALSE;<br>                      lIdleCount = 0;<br>                  }<br>            }while (::PeekMessage(&m_msgCur, NULL, NULL, NULL, PM_NOREMOVE ) );<br>        }<br>    }<br>        閫氳繃bIdle鏍囧織 鍜?LONG鍙橀噺 lIdleCount 榪炴帴涓や釜闃舵銆?br>    · 闃舵涓 鈥斺?while寰幆錛屽綋綰跨▼鐨勬秷鎭槦鍒楅噷娌℃湁浠諱綍娑堟伅鏃訛紝瀹冨鍦ㄩ棽緗姸鎬併?br>    · 闃舵浜?鈥斺?do-while 寰幆錛屽綋鏈夋秷鎭渶瑕佽鍒嗗彂鏃訛紝瀹冭繘琛屾秷鎭殑鍒嗗彂銆?br>    <br>    <br>        鈼?nbsp; 闃舵涓錛?絀洪棽澶勭悊<br>        閫氳繃璋冪敤OnIdle() 鏉ュ憡璇夌敤鎴鋒病鏈夋墽琛屼換浣曟搷浣滐紝綰跨▼鍙互鍋氫竴浜涙竻鐞嗗伐浣滄垨鍏朵粬銆傞棽緗搷浣滃畬鎴愬悗錛岃繑鍥?0 錛?br>        OnIdle()鐨勫弬鏁扮敤鏉ユ寚紺虹嚎紼嬪凡緇忔湁澶氶暱鏃墮棿澶勫湪闈炴椿鍔ㄧ姸鎬佷簡(jiǎn)錛岃繖鏍鳳紝鍙互瀵圭┖闂插鐞嗗仛涓浜涗紭鍏堟帓搴忓伐浣溿?br>        <br>    CWinThread::OnIdle()                            “THRDCORE.CPP”<br>    <br>    BOOL CWinThread::OnIdle ( LONG lCount )<br>    {<br>            if ( lCount <= 0 ) {<br>                    //send  WM_DILEUPDATECMDUI  to the main window<br>                    //send  WM_IDLEUPDATECMDUI  to all  frame  windows<br>            }<br>            else if ( lCount >= 0 錛墈<br>                    //Call AfxLockTempMaps / AfxUnlockTempMaps to free maps, DLLS, etc...<br>            }<br>            return  lCount < 0;     //nothing more to do if lCount >= 0<br>    }<br>        鑻ヨ皟鐢?OnIdle( -1 )錛屽己鍒舵墽琛屼竴嬈?UI 鏇存柊錛?br>    <br>        鈼?nbsp; 闃舵浜?錛?娑堟伅鐨勫垎鍙?br>        <br>            do-while 寰幆涓紝璋冪敤 PumpMessage() 鍒嗗彂娑堟伅錛岀劧鍚庤皟鐢?IsIdleMessage() 鏉ョ‘璁ゅ綋鍓嶆鍦ㄨ澶勭悊鐨勬秷鎭槸鍚︽槸絀洪棽娑堟伅銆?/p> <p> </p> <p><br> </p> <img src ="http://www.shnenglu.com/Euan/aggbug/109790.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Euan/" target="_blank">Euan</a> 2010-03-15 23:27 <a href="http://www.shnenglu.com/Euan/archive/2010/03/15/109790.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?9.MFC鐨勫寮哄瀷鐢ㄦ埛鐣岄潰綾?/title><link>http://www.shnenglu.com/Euan/archive/2010/03/15/109789.html</link><dc:creator>Euan</dc:creator><author>Euan</author><pubDate>Mon, 15 Mar 2010 15:26:00 GMT</pubDate><guid>http://www.shnenglu.com/Euan/archive/2010/03/15/109789.html</guid><wfw:comment>http://www.shnenglu.com/Euan/comments/109789.html</wfw:comment><comments>http://www.shnenglu.com/Euan/archive/2010/03/15/109789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Euan/comments/commentRss/109789.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Euan/services/trackbacks/109789.html</trackback:ping><description><![CDATA[<p>2009-9-8</p> <p>========================================================<br>銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?9.MFC鐨勫寮哄瀷鐢ㄦ埛鐣岄潰綾?br>========================================================</p> <p>----------------------------<br>CSplitterWnd錛?MFC鍒嗗壊紿楀彛         銆婃繁鍏ヨВ鏋怣FC銆婸249</p> <p>    浣跨敤 CSplitterWnd<br>        鍒涘緩鍔ㄦ佸垎鍓茬獥鍙?br>        鈶?鍦ㄥ瓙妗嗘灦鐨勬淳鐢熺被涓姞涓婁竴涓?CSplitterWnd 鏁版嵁鎴愬憳銆?br>        鈶?鍦–MyChildFrame::OnCreateClient() 澶勭悊紼嬪簭錛屾坊鍔犲 CSplitterWnd::Create() 鐨勮皟鐢ㄣ?br>            Create() 鐨勭涓涓弬鏁版寚鍚戠埗妗嗘灦鐨勬寚閽堬紝絎簩涓拰絎笁涓垎鍒寚瀹氫簡(jiǎn)鏈澶ц鏁板拰鏈澶у垪鏁般?br>                            絎洓涓弬鏁版寚瀹氫簡(jiǎn)鎵鍏佽鐨勬渶灝忕獥鏍煎ぇ灝忥紝絎簲涓弬鏁版寚鍚?CCreateContext 鐨勬寚閽堛?br>        鈶?灝嗘鏋剁獥鍙g殑 RUNTIME_CLASS 娑堟伅浼犻掔粰 CDocTemplate 鏋勯犲嚱鏁幫細(xì)<br>            CMultiDocTemplate* pDocTemplate =<br>                new CMultiDocTemplate( IDR_MYAPPTYPE, RUNTIME_CLASS(CMyDocClass ), RUNTIME_CLASS( CMyChildFrameClass ),<br>                                  RUNTIME_CLASS錛圕MyViewClass錛夛級(jí)錛?br>            AddDocTemplate錛坧DocTemplate錛夛紱</p> <p>        鍒涘緩闈?rùn)鎬佸垎鍓茬獥鍙o紝鐢?CreateStatic() 浠f浛 Create()銆傝皟鐢–SplitterWnd::CreateView() 鏉ュ垱寤烘柊鐨勭獥鏍箋?br>        <br> *************************       <br>    CSplitterWnd 鍐呴儴瀹炵幇<br>    <br>    灝佽鐨勬暟鎹被鍨?br>        · ESplitType 鈥斺?瀹氫箟瑕佺敾鍑虹殑鍒嗗壊鍣ㄧ殑綾誨瀷錛屽睘浜庢灇涓劇被鍨嬨傜被鍨嬫湁 鍒嗗壊妗嗐佸垎鍓叉潯銆佸垎鍓茬劍鐐逛互鍙?qiáng)鍒嗗壊杈圭晫銆?br>        · CRowColInfo 鈥斺?璁板綍琛屾垨鍒楃殑鏈灝忓昂瀵搞佺悊鎯沖昂瀵稿拰褰撳墠灝哄銆?br>    鍒涘緩/甯冨眬鏁版嵁鎴愬憳<br>        · m_pDynamicViewClass 鈥斺?鎸囧悜鐢?CSplitterWnd 鍔ㄦ佸垱寤虹殑瑙嗗浘錛堢獥鏍鹼級(jí)鐨凜RuntimeClass 淇℃伅鐨勬寚閽堛侰reate() 鎴朇reateView()涓畾涔?br>        · m_nMaxRows / m_nMaxCols 鈥斺?璋冪敤 Create() 鍜?CreateStatic() 鏃跺埗瀹氱殑鏈澶ц鏁板拰鍒楁暟銆?br>        · m_nRows / m_nCols 鈥斺?褰撳墠鍦?CSplitterWnd 閲屾樉紺虹殑琛屾暟鍜屽垪鏁般?br>        · m_bHasHScroll / m_bHasVScroll 鈥斺?琛ㄦ槑琛屾粴鍔ㄦ潯鎴栧垪婊氬姩鏉?鏄惁宸茬粡鍒涘緩鐨勬爣璁般?br>        · m_pColInfo 鈥斺?鏄疌RowInfo鐨勬暟緇勶紝姣忎釜鍏冪礌瀵瑰簲 CSplitterWnd 鐨勪竴鍒椼傞潤(rùn)鎬佸垎鍓蹭腑錛岃繖涓煎浐瀹氥?br>        · m_pRowInfo 鈥斺?鏄?CRowColInfo 鐨勬暟緇勶紝姣忎釜鍏冪礌瀵瑰簲CSplitterWnd 鐨勪竴琛屻?br>    淇グ鐨勬暟鎹垚鍛?br>        鍦ㄦ瀯閫犲嚱鏁頒腑鍒濆鍖栵紝<br>        · m_cxSplitte / m_cySplitter 鈥斺?鍒嗗壊妗嗗拰鍒嗗壊鍣ㄧ殑瀹藉害鍜岄珮搴︺?br>        · m_cxBorderShare / m_cyBorderShare 鈥斺?濡傛灉鍒嗗壊紿楀彛姝e湪鐢誨垎鍓茬獥鍙g殑杈圭晫錛屽間負(fù)1.<br>        · m_cxSplitterGap / m_cySplitterGap 鈥斺?鍒嗗壊妗?鍒嗗壊鏉″拰婊氬姩鏉?杈圭晫涔嬮棿鐨勮窛紱匯傚間負(fù)6.<br>        · m_cxBorder / m_cyBorder 鈥斺?鍒嗗壊杈圭晫鐨勮竟鐣屽搴︺傚間負(fù)0.<br>    璺熻釜鏁版嵁鎴愬憳<br>        鐢ㄤ簬鐐瑰嚮嫻嬭瘯鍜岃窡韙?br>        · m_bTracking 鈥斺?濡傛灉涓虹湡錛屽垯鐢ㄦ埛姝e湪鎷栧姩涓涓垎鍓叉潯銆?br>        · m_bTracking2 鈥斺?濡傛灉涓虹湡錛岀敤鎴鋒鍦ㄦ嫋鍔ㄤ袱涓垎鍓叉潯銆?br>        · m_ptTrackOffset 鈥斺?鐐瑰嚮嫻嬭瘯涓殑“閫夊彇”灝哄銆傚厑璁哥敤鎴鋒湁鎵鍋忓樊銆?br>        · m_rectLimit 鈥斺?璺熻釜鏃剁獥鏍肩殑澶у皬錛岀敤鏉ョ‘瀹氳璺熻釜鐨勫垎鍓叉潯鐨勯珮搴︺?br>        · m_rectTracker 鈥斺?璺熻釜鏃剁敤鏉ョ敾鍒嗗壊鏉$殑鐭╁艦銆?br>        · m_rectTracker2 鈥斺?璺熻釜鏃剁敤鏉ョ敾絎簩涓垎鍓叉潯鐨勭煩褰?br>        · m_htTrack 鈥斺?琚?CSplitterWnd 鐨勭偣鍑昏窡韙満鍒惰緗垚涓涓灇涓懼鹼紝鐢ㄦ潵鎻忚堪鍒嗗壊紿楀彛鐨勫摢涓儴鍒嗚鐐瑰嚮浜?jiǎn)銆?br>    閫氱敤鎴愬憳鍑芥暟<br>        · CreateCommon() 鈥斺?褰揅reate() 鍜?CreateStatic() 鍒濆鍖栧畬 CSplitterWnd 鐨勫姩鎬佹垚鍛樻垨闈?rùn)鎬佹垚鍛樻椂浼?xì)璋冪敤杩欎釜鍑芥暟銆?br>        · CreateScrollBarCtrl() 鈥斺?鍒涘緩甯︽湁鎸囧畾椋庢牸鍜屾爣紺虹鐨勬粴鍔ㄦ潯銆?br>        · DoScroll() 鈥斺?瀵規(guī)粴鍔ㄦ潯娑堟伅浣滃嚭鍙嶅簲銆?DoScroll() 鑳藉鍚屾閫傚綋鐨勭獥鏍箋?br>        · DoScrollBy() 鈥斺?浠ュ埗瀹氱殑鏁伴噺婊氬姩鐩稿簲鐨勭獥鏍箋?br>        · DoKeyboardSplit() 鈥斺?鍦ㄧ▼搴忛噷璋冪敤璇ュ嚱鏁頒細(xì)浣垮緱紿楀彛琚垎鍓層?br>        · CanActivateNext() 鈥斺?鐢ㄦ潵紜畾涓嬩竴涓獥鏍兼槸鍚﹁兘琚縺媧匯傚嵆鏄惁鑳藉緱鍒扮劍鐐癸紝琚獵View綾昏皟鐢?br>        · ActivateNext() 鈥斺?嬋媧諱笅涓涓獥鏍箋傞氬父鍦ㄤ竴涓獥鏍艱鍒犻櫎鏃惰皟鐢?br>    甯冨眬鎴愬憳鍑芥暟<br>        · RecalcLayout() 鈥斺?緇存姢鎵鏈夊垎鍓茬獥鍙g殑浣嶇疆錛屽綋涓涓獥鏍艱鍒涘緩/鍒犻櫎鏃訛紝琚皟鐢ㄣ?br>        · TrackRowSize() 鈥斺?鏇存柊鎸囧畾琛岀殑 m_pRowInfo 鏁扮粍淇℃伅銆傚悓鏃剁‘瀹氭槸鍚︽湁瓚沖鐨勭┖闂存潵瀛樺偍璇ヨ銆?br>        · TrackColumnSize() 鈥斺?<br>        · GetSizingParent() 鈥斺?鎼滅儲(chǔ)澶у皬鍙彉鐨勭埗紿楀彛<br>    緇樼敾鎴愬憳鍑芥暟<br>        · DrawAllSplitBars() 鈥斺?“椹卞姩”鍒嗗壊紿楀彛鐨勭粯鐢昏繘紼嬶紝涓烘瘡涓渶瑕佺粯鐢葷殑緇勪歡璋冪敤 OnDrawSplitter.<br>        · OnDrawSplitter() 鈥斺?涓哄垎鍓茬獥鍙g殑姣忎釜緇勪歡榪涜緇樼敾錛屼負(fù)铏氬嚱鏁般?br>        · OnPaint() 鈥斺?瀵筗M_PAINT娑堟伅浣滃嚭鍝嶅簲<br>    鐐瑰嚮嫻嬭瘯鎴愬憳鍑芥暟<br>        · HitTest() 鈥斺?閫夊彇鏌愪釜鐐癸紝榪斿洖榪欎釜鐐圭殑鐐瑰嚮嫻嬭瘯鍊箋?br>        · GetInsideRect() 鈥斺?綾誨悓GetClientRect()錛岃冭檻浜?jiǎn)鍏变韩鐨勬粴鍔ㄦ潯銆?br>        · GetHitRect() 鈥斺?涓烘煇涓鎸囧畾鐨勫垎鍓茬獥鍙g粍浠舵绱㈢偣鍑葷煩褰€?br>        · SetSplitCursor() 鈥斺?浣跨敤鐐瑰嚮嫻嬭瘯鏉ョ‘瀹氳鏄劇ず鍝竴縐嶅厜鏍囥?br>    璺熻釜鎴愬憳鍑芥暟<br>        · OnNcCreate() 鈥斺?CSplitterWnd 澶勭悊WM_NCCREATE 娑堟伅錛屾墍浠ュ畠鍙互縐昏蛋 WS_EX_CLIENTEDGE 鐨勬墿灞曢鏍間綅銆?br>        · OnPaint() 鈥斺?鐢誨垎鍓茬獥鍙g殑鍚勪釜緇勪歡銆?br>        · OnDisplayChange() 鈥斺?褰撶敤鎴鋒敼鍙樻樉紺哄櫒鐨勫垎杈ㄧ巼鏃惰儗璋冪敤錛岃皟鐢≧ecalcLayout() 鏉ユ洿鏂板垎鍓茬獥鍙c?br>        · OnSize() 鈥斺?褰撶敤鎴鋒敼鍙樼獥鍙eぇ灝忔椂 璋冪敤 RecalcLayout()銆?br>        · OnMouseMove() 鈥斺?鍦ㄥ垎鍓茬獥鍙g粍浠朵笂鎵ц鐐瑰嚮嫻嬭瘯銆?br>**************************<br>    CSplitteWnd 鐨勫垵濮嬪寲<br>        CSPlitterWnd::CreateCommon()<br>            鈶?璋冩暣濂介鏍兼爣璁般?br>            鈶?璋冪敤 AfxDeferRegisterClass()錛孋Wnd::CreateEx()銆?br>            鈶?涓?m_pColInfo 鍜?m_pRowInfo 鏁扮粍鍒嗛厤絀洪棿錛屽茍榪涜鍒濆鍖栵紝灝?m_nMaxCols/Rows 浣滀負(fù)鏁扮粍鐨勫ぇ灝忋?br>                CreateCommon() 鍦ㄥ驚鐜噷涓嬈¤闂瓹RowColInfo鏁扮粍錛屽仛濡備笅鎿嶄綔<br>                    1. nMinSize 鍜?nIdealSize 閮借璁劇疆鎴愬弬鏁?sizeMin鐨勫箋?br>                    2. nCurSize 琚垵濮嬪寲涓?-1錛岃鏄庡綋紿楁牸鐨勫昂瀵歌鍒濆鍖栵紙RecalcLayout錛夋椂錛岃鍊煎簲璇ヨ璁劇疆銆?br>            鈶?鍒濆鍖栧畬CrowColInfo 鐨勮鍒楁暟緇勫悗錛岃皟鐢?SetScrollStyle() 灝?m_bHasH/VScroll 榪涜鍒濆鍖栵紝鐒跺悗榪斿洖TRUE<br>      <br>        CSplitterWnd::CreateView()<br>            鈶?灝唖izeInit鍙傛暟瀛樺偍鍦?CRowColInfo鐩稿簲鐨勬暟緇勪笅鏍囬噷錛岃緗竴涓眬閮ㄦ爣璁?bSendInitialUpdate 鍊間負(fù)FALSE銆?br>            鈶?鍒涘緩涓涓眬閮ㄧ殑CCreateContext(),灝介噺灝嗘瘡涓厓绱犲垵濮嬪寲涓烘瘮杈冨畬鏁寸殑鍊箋傝皟鐢?GetActivePane() 鏉ョ‘瀹?m_pLastViewCView鎸囬拡<br>                涓鏃reateView() 鏈変簡(jiǎn)m_pLastView錛屽氨鍙互閫氳繃璋冪敤 GetDocument() 鏉ョ‘瀹?CCreateContext 鍏朵粬鍩熺殑鍊鹼紝<br>                鐒跺悗璋冪敤 CDocument::GetDocTemplate()銆傚湪鎵懼埌鎵鏈夎繖浜涘厓绱犲悗錛宲Context鎸囧悜濂逛滑錛屽皢bSendInitialUpadte璁句負(fù) TRUE銆?br>            鈶?璋冪敤 CreateObject() 涓?CRuntimeClass 淇℃伅鍒涘緩涓涓獥鏍煎璞°傝緗浼犻掑埌 Create() 鐨勫弬鏁?椋庢牸鍜屽畾浣嶇煩褰€?br>            <br></p> <p> </p> <p> </p> <p> </p> <img src ="http://www.shnenglu.com/Euan/aggbug/109789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Euan/" target="_blank">Euan</a> 2010-03-15 23:26 <a href="http://www.shnenglu.com/Euan/archive/2010/03/15/109789.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?8.MFC鐨勬枃妗?瑙嗗浘緇撴瀯 鎷撳睍http://www.shnenglu.com/Euan/archive/2010/03/15/109788.htmlEuanEuanMon, 15 Mar 2010 15:25:00 GMThttp://www.shnenglu.com/Euan/archive/2010/03/15/109788.htmlhttp://www.shnenglu.com/Euan/comments/109788.htmlhttp://www.shnenglu.com/Euan/archive/2010/03/15/109788.html#Feedback0http://www.shnenglu.com/Euan/comments/commentRss/109788.htmlhttp://www.shnenglu.com/Euan/services/trackbacks/109788.html2009-9-7

========================================================
銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?8.MFC鐨勬枃妗?瑙嗗浘緇撴瀯 鎷撳睍
========================================================

----------------------------
CMirrorFile              銆婃繁鍏ヨВ鏋怣FC銆?P221

    CMirrorFile::Open()    錛圖OCCORE.CPP錛?br>            絎竴閮ㄥ垎錛氬厛媯(gè)鏌?modeCreate錛岀湅璋冪敤鑰呮槸鎯沖垱寤轟竴涓柊鏂囦歡榪樻槸鎯寵繛鎺ュ湪宸叉湁鏂囦歡鍚庨潰銆?br>                    鐒跺悗璋冪敤CFile::GetStatus()錛岃嫢鏂囦歡闈炵┖錛岃繑鍥炰竴涓潪闆剁殑鏁幫紱
                    鑻ユ枃浠跺瓨鍦紝Open()鎺ョ潃浼?xì)璋冪敤GetDiskFreeSpace()錛岀‘瀹氶┍鍔ㄥ櫒鏈夊灝戝瓧鑺傚彲浠ョ敤銆傚皢緇撴灉鍜屽凡鏈夋枃浠跺ぇ灝忕殑涓ゅ嶈繘琛屾瘮杈冦?nbsp;  
                    鑻ュぇ浜庡悗鑰咃紝鍒涘緩涓涓復(fù)鏃舵枃浠訛紝鏂囦歡鍚嶅瓨鍌ㄥ湪 m_strMirrorName 涓?br>            絎簩閮ㄥ垎褰?m_strMirrorName 闈炵┖鏃舵墽琛屻?
                    璋冪敤 CFile::Open() 鎵撳紑闀滃儚鏂囦歡錛岀劧鍚庡皢鏂囦歡鐨勬椂闂村拰鏂囦歡鏉冮檺浠庢簮鏂囦歡鎷瘋礉緇欓暅鍍忔枃浠躲?br>                    鑻ユ墽琛屼簡(jiǎn)絎簩閮ㄥ垎錛孫pen() 榪斿洖TRUE錛岃嫢娌℃湁琚墽琛岋紝浼?xì)璋冪?CFile::Open()錛?榪斿洖璋冪敤緇撴灉銆?br>            錛堣嫢鏈夊啓鎿嶄綔姝e湪鎵ц鎴栬呮湁鏂囦歡琚鐩栵紝CMirrorFile::Open() 灝辨墦寮涓涓拰鎸囧畾鏂囦歡涓嶅悓鐨勬枃浠躲?br>           
    CMirrorFile::Close()   
            鍏堝湪 m_strName 瀛樺偍鏂囦歡鐨勫悕瀛楋紝鍦ㄨ皟鐢–File::Close() 涔嬪悗錛屾鏌ユ槸鍚︿嬌鐢ㄤ簡(jiǎn)闀滃儚鏂囦歡錛岃嫢浣跨敤浜?jiǎn)锛孫pen()浼?xì)鍒犻櫎鎸囧?nbsp;       鏂囦歡錛屽皢鏂囦歡鎷瘋礉涓烘寚瀹氭枃浠躲?br>                   
         鍗矯MirrorFile 閫氳繃淇濆瓨鍘熸湁鏂囦歡鍜屽涓存椂鏂囦歡榪涜鍐欐搷浣滄潵淇濇姢浣犵殑鏂囨。銆?br>         榪欐牱錛岃嫢鍐欐搷浣滃嚭鐜伴棶棰橈紝婧愭枃浠朵篃鏄畨鍏ㄧ殑  銆?br>         CMirrorFile 榪樹細(xì)紜繚婧愭枃浠剁殑瀹夊叏鎬т互    鍙?qiáng)鏂囦欢鍒涘晦Z俊鎭槸鍚﹁兘琚紜湴鎷瘋礉
        
        
---------------------------
CView 鎵撳嵃                      銆婃繁鍏ヨВ鏋怣FC銆?P223 - 235


---------------------------
CView鐨勬淳鐢熺被錛?CScrollView
   
    璋冪敤SetScrollSizes() 璁?CScrollView 鐭ラ亾浣犵殑“閫昏緫瑙嗗浘”鐨勫ぇ灝忥紝鑾峰緱澶у皬淇℃伅鍚庯紝鎿嶇旱浼犻掔粰 OnDraw() 鐨凞C錛屼粠鑰屾敮鎸佹粴鍔?br>   
    CScrollView 濡備綍榪愪綔錛?br>        CScrollView ( VIEWSCRL.CPP )
       
        · m_nMapMode 鈥斺?鍦?SetScrollSizes() 涓紝鍙互涓哄簲鐢ㄧ▼搴忔寚瀹氫竴涓槧灝勬ā寮忋傞粯璁や負(fù)MM_NONE錛孋ScrollView瀹氫箟涓猴紙MM_SCALETOFIT錛夈?br>        · m_totalLog 鈥斺?閫昏緫鍧愭爣涓鍥劇殑澶у皬錛岃繖涓奸氳繃 SetScrollSizes() 鎴愬憳鍑芥暟浼犻掔粰 CScrollView銆?br>        · m_totalDev 鈥斺?璁懼鍧愭爣涓鍥劇殑澶у皬銆?br>        · m_pageDev 鈥斺?璁懼鍧愭爣涓竴涓〉鐨勫ぇ灝忋?br>        · m_lineDev 鈥斺?璁懼涓竴鏉$嚎鐨勫ぇ灝忋?br>        · m_bCenter 鈥斺?CPreviewView 浣跨敤榪欎釜鏁版嵁鎴愬憳榪涘叆紿楀彛涓殑瑙嗗浘銆?br>       
        · CenterOnPoint() 鈥斺?灝嗚鍥鵑泦涓簬涓鐐癸紝鐢?CPreviewView 璋冪敤
        · ScrollToDevicePosition() 鈥斺?璐熻矗婊氬姩瑙嗗浘銆傞氳繃璋冪敤::SetScrollPos() 鍜?::CSrollWindow() 鏇存柊婊氬姩鏉★紝鏉ュ畬鎴愯鍥劇殑婊氬姩鏉°?br>        · UpdateBars() 鈥斺?CScrollView 鍦ㄥ垵濮嬪寲鐨勬椂鍊欏拰紿楀彛澶у皬鍙戠敓鍙樺寲鐨勬椂鍊欒皟鐢ㄣ傝矗浠繪槸鏍規(guī)嵁 GetScrollBarState() 鐨勮繑鍥炰俊鎭殣钘忋佹樉紺恒佸垵濮嬪寲婊氬姩鏉°?br>        · GetTrueClientSize() 鈥斺?鐢ㄦ潵紜畾鐢ㄦ埛瑙嗗浘鏄惁瓚沖澶э紙鏄惁闇瑕佹粴鍔ㄦ潯錛夛紝鍙湁 UpdateBars 鎵嶄細(xì)璋冪敤榪欎釜鍑芥暟銆?br>        · GetScrollBarSizes() 鈥斺?紜畾婊氬姩鏉$殑瀹藉害鍜岄珮搴︼紝鑰冭檻浜?jiǎn)绐楀彛鐨勯鏍煎拰杈规鐨勫搴︺?br>        · GetScrollBarState() 鈥斺?鑾峰彇 CScrollView 鎵闇瑕佺殑鍏充簬瑙嗗浘鐨勭姸鎬併?br>        · CalcWindowRect() 鈥斺?璁$畻紿楀彛鐭╁艦鐨勫ぇ灝忥紝鑰冭檻婊氬姩鏉″拰鍏朵粬紿楀彛楗扮墿鐨勫ぇ灝忋?br>        · OnPrepareDC() 鈥斺?CScrollView 鍜?ONVScroll() 浜や簰鐨勫叧閿?br>        · OnScroll() 鈥斺?OnHScroll() 鍜?OnVScroll涓や釜娑堟伅澶勭悊鍑芥暟閮借皟鐢ㄤ簡(jiǎn)榪欎釜鍑芥暟銆傛牴鎹〉闈㈠ぇ灝忓拰琛屽ぇ灝忕‘瀹氳婊氬姩鐨勯噺銆傚啀璋冪敤 OnScrollBy()
        · OnScrollBy() 鈥斺?媯(gè)鏌ラ渶瑕佹粴鍔ㄧ殑閲忔槸鍚﹁秴鍑轟簡(jiǎn)婊氬姩鏉$殑鑼冨洿鍜岃鍥劇殑閫昏緫澶у皬銆傝嫢娌℃湁錛岃皟鐢?::SetScrollPos() 縐誨姩婊氬姩鏉★紝鍦ㄨ皟鐢?::ScrollWindow().
        · OnSize() 鈥斺?鑻?CScrollView 涓嶆槸澶勪簬“scale-to-fit”妯″紡涓嬶紝OnSize() 璋冪敤 UpdateBars()錛涘惁鍒欙紝璋冪敤 SetScaleToFitSize()銆?br>        · OnHScroll() 鈥斺?璋冪敤 OnScroll() 鐨勬秷鎭鐞嗗嚱鏁般?br>        · OnVScroll() 鈥斺?璋冪敤 OnScroll() 鐨勬秷鎭鐞嗗嚱鏁般?br>       
        CScrollView::SetScrollSizes()                 錛圴IEWSCRL.cpp)   銆婃繁鍏ヨВ鏋怣FC銆婸239
            鈶? 灝?m_nMapMode 鍒濆鍖栦負(fù)鎻愪緵鐨勬柊鏄犲皠妯″紡錛?nbsp; m_totalLog 鐨勫垵濮嬪寲鍊兼槸sizeTotal 鍙傛暟銆?br>            鈶? 鍦ㄦ爤涓婂垱寤轟竴涓?CWindowDC錛屽茍涓斿湪璁劇疆浜?jiǎn)鏄牉畡妯″紡涔嬪悗锛屼娇鐢―C 鏉ヨ綆楄鍥懼ぇ灝忋侀〉闈㈠ぇ灝忓拰琛屽ぇ灝忕殑璁懼鍧愭爣銆?br>            鈶? 灝嗛昏緫鍧愭爣杞寲涓鴻澶囧潗鏍囧悗錛屾鏌ョ‘淇濈敤鎴鋒彁渚涗簡(jiǎn)涓涓潪榛樿鐨勫鹼紝鑻ヤ負(fù)榛樿鍊?錛岄〉闈㈠ぇ灝忚涓鴻鍥懼ぇ灝忕殑1/10錛岃涓洪〉鐨?/10鎴栬鍥劇殑1/100銆?br>            鈶? 鑻ラ渶瑕侊紝璋冪敤 UpdateBars() 鍜?Invalidate()銆傝緗粴鍔ㄦ潯錛岃嫢淇敼浜?jiǎn)鏄牉畡妯″紡锛岄噸鐢汇?br>       
        CScrollView::OnPrepareDC()                    鍦ㄨ皟鐢?OnDraw()涔嬪墠璋冪敤
            鈶? 璁劇疆鏄犲皠妯″紡錛岃嫢鍦?#8220;scale-to-fit”妯″紡涓嬶紝妯″紡璁劇疆涓?ANISOTROPIC錛岀劧鍚庡紿楀彛鍜岃鍥劇鍙f搷浣滐紝鐭ラ亾瑙嗗浘鐨勫ぇ灝忓拰瀹㈡埛紿楀彛鍖歸厤銆?br>                    鑻ヤ笉鏄紝璋冪敤 SetMapMode()錛?鍙傛暟鏄敤鎴烽氳繃 SetScrollSizes() 鎸囧畾鐨勬槧灝勬ā寮忋?br>            鈶? 鍦ㄦ爤涓婂垱寤轟竴涓?CPoint ptVpOrg錛坅ssume  no shift for printing錛夛紝鍒濆鍖栦負(fù) 0,0銆?鑻ヨ鍥句笉鍦ㄦ墦鍗幫紝 ptVpOrg = -GetDeviceScrollPosition()
            鈶? 璋冪敤 CDC::SetViewportOrg( ptVpOrg )銆傜劧鍚庤皟鐢?CView::OnPrepareDC()銆?br>           
-------------------------------------
CFormView
   
    鍏堢敤璧勬簮緙栬緫鍣ㄥ垱寤轟竴涓璇濇妯℃澘錛岀劧鍚庡垱寤轟竴涓狢FormView 鐨勬淳鐢熺被錛岀劧鍚庡皢瀹冨拰瀵硅瘽妗嗘ā鏉跨粦瀹氾紙閫氳繃灝嗘ā鏉跨殑璧勬簮ID 浼犻掔粰 CFormView 鏋勯犲嚱鏁幫級(jí)
   
        錛圴IEWFORM.CPP)         銆婃繁鍏ヨВ鏋怣FC銆?nbsp; P242
        · m_lpszTemplateName 鈥斺?瀵硅瘽妗嗘ā鏉胯祫婧愮殑鍚嶅瓧
        · m_pCreateContext 鈥斺?鎸囧悜 CCreateContext 鐨勬寚閽堛侰FormView涓嶇洿鎺ヤ嬌鐢紝浼?xì)鍐?OnCreate() 鍑芥暟涓皢瀹冧紶閫佺粰妗嗘灦銆?br>        · m_hWndFocus 鈥斺?鍦?OnSetFocus() 涓紝CFormView灝嗙劍鐐硅緗負(fù)紿楀彛鍙ユ焺錛?OnActivateView()錛孫nActivateFrame()銆?br>        · OnDraw() 鈥斺?浠涔堥兘涓嶅仛錛學(xué)indows鎺т歡閮戒細(xì)閲嶇敾鑷繁銆?br>        · PreTranslateMessage() 鈥斺?nbsp; 瀹屾垚涓浜涜礬鐢辯殑浠誨姟錛屽皢鎺т歡銆佽鍥懼拰紿楀彛鐨勬秷鎭佸線姝g‘鐨勭洰鐨勫湴
        · SaveFocusControl() 鈥斺?灝?m_hWndFocus 璁劇疆涓?::GetFocus() 鐨勮繑鍥炵粨鏋滐紝鍗沖綋鍓嶅浜庣劍鐐圭殑鎺т歡銆?br>        · OnActivateFrame() 鈥斺?褰撹鍥捐紱佺敤鏃訛紝璋冪敤 SaveFocusControl() 紜繚褰撶劍鐐瑰洖鏉ユ槸錛岀劍鐐圭殑鎺т歡浠嶆湁鎺у埗銆?br>        · OnActivateView 鈥斺?璁劇疆 m_hWndFocus 鍙橀噺
        · OnCreate() 鈥斺?灝唌_pCreateContext 浼犻掔粰 LPCREATESTRUCT 緇撴瀯鎸囬拡鐨?lpCreateParams 鍩熴?br>        · OnSetFocus() 鈥斺?鑻?m_hWndFocus 鎸囧悜涓涓悎娉曠獥鍙o紝OnSetFocus()浼?xì)灏嗙劍鐐硅湄?fù)榪欎釜鎺т歡銆傚惁鍒欏皢鐒︾偣璁句負(fù)婧愮獥鍙c?br>       
        CFormView::Create()
            鈶? 鍦╩_pCreateContext 涓瓨鍌?CCreateContext 鍙傛暟錛岃繖鏍峰氨鍙互鍐嶈皟鐢?OnCreate() 鏃朵紶鍏ャ傜劧鍚庣‘淇?Windows閫氱敤鎺т歡閮芥槸娉ㄥ唽榪囩殑銆?br>            鈶? 璋冪敤PreCreateWindow 鏉ョ‘瀹氱敤鎴鋒寚瀹氱殑鎵╁睍椋庢牸錛屽湪璋冪敤 CWnd::CreateDlg()銆傝繖涓嚱鏁頒粠搴旂敤紼嬪簭鐨勮祫婧愪腑瑁呰澆瀵硅瘽妗嗘ā鏉匡紝
                騫惰皟鐢–Wnd::CreateDlgIndirect()銆侰reateDlg() 鍒涘緩涓涓潪妯℃佺殑瀵硅瘽妗嗐?br>            鈶? 灝唌_pCreateContext 璁劇疆涓?NULL錛屽啀淇敼紿楀彛鐨勬爣鍑嗛鏍煎拰鎵╁睍椋庢牸銆傚皢紿楀彛鎺т歡鐨勬爣紺虹璁劇疆涓?nID 鍙傛暟銆?br>                鍐嶈皟鐢?SetScrollSizes() 鏉ュ垵濮嬪寲 ScrollView錛岄噰鐢ㄧ殑鏄犲皠妯″紡涓?MM_TEXT銆傚氨鍒涘緩浜?jiǎn)涓涓拰瀵硅瘽妗嗘ā鏉夸竴鏍峰ぇ鐨勯昏緫瑙嗗浘銆?br>            鈶? 灝嗚鍥劇殑澶у皬鍜?rect 鍙傛暟鐨勫煎尮閰嶏紝鍐嶅湪 PreCreateWindow() 涓皟鐢ㄦ寚瀹氫簡(jiǎn) WS_VISIBLE錛屽氨璋冪敤 ShowWindow()銆?br>                CFormView::OnInitialUpdate()璋冪敤浜?UpdateData(FALSE) 鏉ュ垵濮嬪寲紿椾綋涓殑鎺т歡銆?DDX/DDV灝辮涓篊FormView鏄竴涓璇濇銆?br>   
--------------------------------
CCtrlView                                 銆婃繁鍏ヨВ鏋怣FC銆?P244

    CCtrlView 媧劇敓浠ヤ笅綾伙細(xì) CEditView銆丆ListView銆丆TreeView銆丆RichEditView
   
        · m_strClass 鈥斺?鍖呭惈浜?jiǎn)鎺т欢鐨劷H楀彛綾葷殑鍚嶅瓧錛岄氬父鏄?#8220;viewized”銆傚湪鏋勯犲嚱鏁頒腑璁劇疆銆?br>        · m_dwDefaultStyle 鈥斺?瑙嗗浘綾葷殑榛樿椋庢牸銆傞氳繃鏋勯犲嚱鏁頒紶鍏ャ?br>        · OnDraw() 鈥斺?浠庝笉琚皟鐢紝璋冪敤浜?ASSERT錛團(tuán)ALSE錛夋潵紜繚涓嶈璋冪敤銆?br>        · PreCreateWindow() 鈥斺?璁劇疆CREATESTRUCT 鐨?lpszClass 鍩燂紝璁劇疆鎴?m_strClass 鎴愬憳鏁版嵁錛岃繖鏍峰氨鍒涘緩浜?jiǎn)鎺т欢銆?br>                                            榪樺 CREATESTRUCT 鐨勯鏍煎煙鎿嶄綔錛屼互鍙嶆槧瀛樺偍鍦?m_dwDefaultStyle 涓殑鍊箋?br>        · OnPaint() 鈥斺?璋冪敤 Default()銆侱efault() 浼?xì)灏嗗墠涓涓秷鎭紙WM_PAINT錛夊彂閫佺粰DefWindowProc()銆?br>       
    CTreeView                             錛圴IEWCMN.CPP錛孉FXCVIEW.INL錛?br>        · GetTreeCtrl() 鈥斺?榪斿洖涓涓?CTreeCtrl 寮曠敤錛岀被鐨勪嬌鐢ㄨ呭彲浠ョ敤榪欎釜寮曠敤鐩存帴璋冪敤 CTreeCtrl錛屽鏍?wèi)鎺т欢鎿嶄綔銆?br>        · RemoveImageList() 鈥斺?涓涓唴閮ㄨ緟鍔╁嚱鏁幫紝灝嗘帶浠剁殑鍥懼儚閾捐〃娓呯┖銆傝繖涓緟鍔╁嚱鏁頒細(xì)鍐?OnDestroy() 涓璋冪敤
        · OnDestroy() 鈥斺?娓呯┖ LSVIL_NORMAL 鍜?LVSIL_STATE 涓や釜鍥懼儚閾捐〃錛岃皟鐢?RemoveImageList()銆?br>       

 

 



Euan 2010-03-15 23:25 鍙戣〃璇勮
]]>
銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?7.MFC鐨勬枃妗?瑙嗗浘緇撴瀯http://www.shnenglu.com/Euan/archive/2010/03/15/109787.htmlEuanEuanMon, 15 Mar 2010 15:24:00 GMThttp://www.shnenglu.com/Euan/archive/2010/03/15/109787.htmlhttp://www.shnenglu.com/Euan/comments/109787.htmlhttp://www.shnenglu.com/Euan/archive/2010/03/15/109787.html#Feedback0http://www.shnenglu.com/Euan/comments/commentRss/109787.htmlhttp://www.shnenglu.com/Euan/services/trackbacks/109787.html2009-9-3

========================================================
銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?7.MFC鐨勬枃妗?瑙嗗浘緇撴瀯
========================================================

鏂囨。/瑙嗗浘鐩鎬簰渚濊禆鍏崇郴
    · CWinApp鍖呭惈涓涓?CDocManager 鎸囬拡銆?br>    · CDocManager 緇存姢涓涓枃妗fā鏉塊摼琛紝欏誨湪 CWinApp::IniInstance()涓?鍒涘緩騫跺姞鍏ヨ繖浜涙ā鏉褲?br>    · 鏂囨。妯℃澘灝嗚繖 3 涓被緇戝畾鍦ㄤ竴璧鳳細(xì) CView / CDocument / CFrameWnd銆傝繖浜涚被閮芥牴鎹紶閫掔粰鏂囨。妯℃澘鏋勯犲嚱鏁扮殑CRuntimeClass淇℃伅鍒涘緩
    · MDI 涓撴湁鐨勬枃妗fā鏉跨淮鎶や竴涓墦寮鏂囨。閾捐〃錛岃?SDI 涓撴湁鐨勬枃妗fā鏉垮彧鏈変竴涓寚鍚戞墦寮鏂囨。鐨勬寚閽堛?br>    · 鏂囨。緇存姢涓涓墦寮瑙嗗浘鐨勯摼琛ㄣ備嬌鐢ㄨ繖涓摼琛ㄤ笌瑙嗗浘閫氫俊銆佹洿鏂拌鍥俱?br>    · 鏂囨。鏈変竴涓寚閽堟寚鍚戝畠浠殑鏂囨。妯℃澘銆傜敤榪欎釜鎸囬拡璁劇疆鏍囬錛岃繘琛屽懡浠よ礬鐢遍夋嫨錛屽湪琚垹闄ゆ椂閫氱煡鏂囨。妯℃澘
    · 妗嗘灦鏈変竴涓寚閽堟寚鍚戝綋鍓嶇殑媧昏穬瑙嗗浘
    · 琚垱寤烘椂錛屾鏋剁瓑鍒頒竴涓?CCreateContext 緇撴瀯錛屽寘鍚簡(jiǎn)鍦ㄦ枃妗fā鏉夸腑鍙互鎵懼埌鐨凜RuntimeClass淇℃伅鍜屼竴涓寚鍚戞枃妗g殑鎸囬拡銆?br>    · 瑙嗗浘鏈変竴涓寚閽堟寚鍚戝畠鐨勬枃妗c傚綋璇ヨ鍥捐鍒犻櫎鏃訛紝鐢ㄨ鎸囬拡閫氱煡鏂囨。銆?br>    · 瑙嗗浘鍙互閫氳繃璋冪敤 CView::GetParentFrame() 鑾峰緱瀹冪殑妗嗘灦紿楀彛銆?br>    · 濡傛灉鏂囨。瑕佽闂畠鐨勬墍鏈夎鍥劇殑妗嗘灦錛屽彲浠ラ亶鍘嗗畠鐨勮鍥鵑摼琛紝騫惰皟鐢?CView::GetParentFrame().

    · CDocTemplate 鈥斺?鍦?CWinApp 涓垱寤猴紝淇濆瓨鍦?CWinApp::m_pDocManage涓?br>    · CDocManager 鈥斺?鍦–WinApp::InitInstance() 涓垱寤?br>    · CFrameWnd 鈥斺?鍦?CDocTemplate::CreateNewFrame() 涓垱寤?br>    · CDocument 鈥斺?鍦?CDocTemplate::CreateNewDocument() 涓垱寤?br>    · CView 鈥斺?閫氳繃 CFrameWnd::OnCreate() 鍒涘緩
                                                         
     ID_FILE_OPEN   →   CWinApp::OnFileOpen()                      CWinApp::OnFileNew()     ←   ID_FILE_NEW    
          鍛戒護(hù)                                 ↓                                                         ↓                                
                                          鑾峰彇鏂囦歡鍚?nbsp;                                        涓涓枃妗fā鏉匡紵  →鍚?#8594;        浠庣敤鎴瘋幏鍙栨枃妗g被鍨?br>                                                 ↓                                                          ↓                                               ↓
                                     浣跨敤鏂囦歡鎷撳睍鍚嶏紝閫夋嫨鏂囨。妯℃澘               鏄?nbsp;                                           ↓ 
                                                   ↓                                                         ↓                                            ↓
                                                    ------------------------------閫夋嫨鐨勬ā鏉?------------------------------
         
         
                   閫夋嫨妯℃澘
                        ↓                                                               → →→鎵撳紑錛?→→Yes→→  CMyDoc::OnOpenDocument()   →
     Construct document  object: CMyDoc                          ↑            ↓                                               ↓                                      ↓
                        ↓                                                               ↑            ↓                                               ↓                                      ↓                         
     Construct frame window object : CMainFrame             ↑              →→→→→→→CMyDoc::OnNewDocument()            ↓
                        ↓                                                               ↑                                                             ↓                                     ↓
          CframeWnd::Create()                                              ↑                                                     鏂囨。鍑嗗濂?nbsp;  ←←←←←←                              
     CFrameWnd::OnCreateClient()                                    ↑
                        ↓                                                               ↑                                                                                                                   
             Create CMyView            →→→→→→→→→→→→                             閫夋嫨妯℃澘涔嬪悗鐨勬帶鍒舵祦紼?br>         
         
           CWinApp::OnFileOpen()                                             CWinApp::OnFileNew()    
                         ↓                                                                                ↓
          CDocManager::OnFileOpen()                                   CDocManager::OnFileNew()
                                               ↓                                          ↓
                                           CDocTemplate::OpenDocumentFile()
                                           CDocTemplate::CreateNewDocument()
                                           CDocTemplate::CreateNewFrame()
                                                             WM_CREATE
                                                    CFrameWnd::OnCreate()
                                                CFrameWnd::OnCreateHelper()
                                                CFrameWnd::OnCreateClient()
                                                CFrameWnd::CreateView()
                                                CMyDocument::OnOpenDocument()
                                         [if file was specified to OpenDocumentFile()]
                                                CMyDocument::OnNewDocument()       
                                        鍒涘緩鏂囨。/瑙嗗浘浣撶郴涓墍鏈夊璞¤繃紼嬩腑璋冪敤鐨勫嚱鏁?br>         
         
-----------
浣撶郴緇撴瀯

    鏂囨。涓庤鍥?br>                    1錛夋枃妗o紱   2錛夎鍥撅紱   3錛夋枃妗?瑙嗗浘妗嗘灦錛?nbsp;  4錛夋枃妗fā鐗?br>    鏂囨。
        鐢盋Document綾諱綋鐜幫紝媧劇敓鑷狢CmdTarget錛屽叿鏈塁Object鎻愪緵鐨勬墍鏈夋敮鎸侊紝涓斿彲浠ユ帴鍙楀懡浠ゆ秷鎭紝鏀寔緇勪歡瀵硅薄妯″瀷錛圕OM錛夋帴鍙e拰 OLE 鑷姩鍖栥?br>    瑙嗗浘
       
    鏂囨。錛忚鍥炬鏋?br>    鏂囨。妯℃澘                             銆婃繁鍏ヨВ鏋怣FC銆?P 198
        灝嗘暣涓満鍒剁粦瀹氬湪涓璧楓傝繖3涓粍浠剁敱 CDocTemplate 鐨勭被綆$悊銆?br>        CDocTemplate鏄竴涓娊璞″熀綾伙紝瀹氫箟浜?jiǎn)澶勭悊鏂囨。銆佹鏋跺拰瑙嗗浘鐨勫熀鏈搷浣溿?br>        CSingleDocTemplate錛?nbsp; 4涓弬鏁扳憼涓涓祫婧怚D錛屸憽榪愯鏃剁殑CDocument媧劇敓綾伙紱鈶?榪愯鏃剁殑璇曞浘妗嗘灦錛?鈶?榪愯鏃剁殑鏂囨。瑙嗗浘銆?br>                    璧勬簮ID錛氣憼紿楀彛鏍囬錛涒憽鏂囨。鍚嶇О錛涒憿褰撳垱寤轟竴涓柊鏂囨。鏃朵嬌鐢ㄧ殑鏂囨。綾誨瀷鎻忚堪絎︼紱鈶e鏍囧噯鐨勬墦寮鏂囦歡瀵硅瘽妗嗕腑鏂囦歡綾誨瀷鐨勬弿榪扮
                                 鈶ゆ枃妗f墿灞曞悕榪囨護(hù)鍣紱 鈶?鏂囦歡綆$悊鍣ㄤ嬌鐢ㄧ殑鏂囦歡綾誨瀷鎻忚堪絎︼紱 鈶?鍦╓indows娉ㄥ唽琛ㄤ腑娉ㄥ唽鐨?ProgID銆?br>        SMultiDocTemplage
                    鍙互鏀寔涓緇勬枃妗g殑閾捐〃錛岃孋SingleDocTemplate鍙兘鏀寔涓縐嶆枃妗?br>                   
    CWinApp鐨勮鑹?br>        鏂囨。妯℃澘鐢?CWinApp 瀵硅薄綆$悊銆?br>       
---------------
鏂囨。/瑙嗗浘緇撴瀯鍐呭箷                    銆婃繁鍏ヨВ鏋怣FC銆婸 199
    ------------------------------------
    CWinApp 綆$悊鏂囨。妯℃澘錛屾枃妗fā鏉跨鐞?妗嗘灦/瑙嗗浘/鏂囨。銆?br>   
    CWinApp / CDocTemplate 鎺ュ彛錛?CDocManager
        · CPtrList  m_templateList 鈥斺?緇存姢涓涓枃妗fā鏉垮垪琛ㄧ殑鎸囬拡銆?閫氳繃GetFirstDocTemplatePosition()鍜孏etNextDocTemplate()鏉ラ亶鍘嗘ā鏉垮垪琛ㄣ?br>       
        CDocManager::OnFileNew() 
            璐熻矗鍒涘緩涓涓柊鐨勬枃妗fā鏉?br>            · 鈶燨nFileNew() 媯(gè)鏌?m_templateList 涓槸鏄惁鏈夊浜庝竴涓枃妗fā鏉匡紝鑻ユ槸錛屽垯鍒涘緩涓涓?CNewTypeDlg 瀵硅瘽妗嗭紝鍒楀嚭涓涓枃妗i摼琛ㄤ互渚涚敤鎴烽夋嫨銆?br>            · 鈶?璋冪敤CDocTemplate::OpenDocumentFile()錛?br>                tag錛欳NewTypeDlg鐨勬瀯閫犲嚱鏁拌鍏ヤ竴涓寚鍚戞枃妗fā鏉挎寚閽堥摼琛ㄧ殑鎸囬拡錛屽嵆 m_templateList銆傚湪DoModal() 涔嬪悗錛孫nFileNew()浠?br>                        CNewTypeDlg::m_pSelectdeTemplate 涓緱鍒伴変腑鐨勫璇濇妯℃澘銆?br>           
            CNewTypeDlg   錛圖OCMGR.CPP)
                CNewTypeDlg::OnInitDialog()
                    · 鈶狅紝 璋冪敤GetDlgItem() 寰楀埌涓涓寚鍚?CListBox 鎸囬拡錛屽茍灝嗕箣綾誨瀷杞崲鎴?CListBox 鎸囬拡銆?br>                    · 鈶★紝寰楀埌鎸囬拡鍚庯紝閬嶅巻瀹冪殑鏂囨。妯℃澘閾捐〃錛岄亶鍘嗘椂錛岄氳繃璋冪敤CDocTemplate::GetDocString()寰楀埌鏂囨。綾誨瀷鐨勫瓧絎︿覆鐗堟湰錛?br>                            OnInitDialog鑾峰彇姣忎釜鏂囨。鐨勮繖涓瓧絎︿覆騫跺姞鍏ラ摼琛紝鍐嶈皟鐢?CListBox::SetItemDataPtr() 灝嗚繖涓枃妗fā鏉挎寚閽堥檮鍔犲埌榪欓」涓娿?br>                    · 鈶紝榪斿洖鍒癈Dialog::OnInitDialog()銆?br>                        tag:鍦–NewType::OnOK()涓紝褰撶敤鎴烽夋嫨浠庨摼琛ㄤ腑閫夋嫨浜?jiǎn)涓欏瑰茍鎸変笅OK鎸夐挳鏃訛紝 CNewType::OnOK() 浠庨噺琛ㄤ腑寰楀埌琚変腑鐨勯」錛屽茍璋冪敤
                              CListBox::SetItemDataPtr() 鑾峰緱鎸囧悜璇ユ枃妗fā鏉跨殑涓涓寚閽堛?OnOK() 灝嗚繖涓閫変腑鐨勬ā鏉挎寚閽堟斁鍦?pSelectedTemplate 涓紝榪欐牱錛?br>                              DoModal() 榪斿洖鍚庡氨鍙互鑾峰彇榪欎釜鎸囬拡
    ----------------------------------------                         
    CDocTemplate錛?nbsp; CDocument銆丆View 鍜?CFrameWnd 綆$悊鍣?br>   
        · m_nIDResource 鈥斺?瀛樺偍浼犵粰 CDocTemplate 鏋勯犲嚱鏁扮殑絎竴涓弬鏁幫紝鏄竴涓祫婧怚D錛?br>        · m_pDocClass 鈥斺?鎸囧悜璇ユ枃妗fā鏉跨殑CDocument錛堟垨媧劇敓綾伙級(jí)鐨凜RuntimeClass緇撴瀯錛屽湪鏋勯犲嚱鏁頒腑璁懼畾
        · m_pFrameClass 鈥斺?鎸囧悜璇ユ枃妗fā鏉跨殑 CFrameWnd(鎴栨淳鐢熺被錛夌殑CRuntimeClass 緇撴瀯銆傚湪鏋勯犲嚱鏁頒腑璁懼畾
        · m_pViewClass 鈥斺?鎸囧悜璇ユ枃妗fā鏉跨殑CView 錛堟垨媧劇敓綾伙級(jí)鐨凜RuntimeClass緇撴瀯錛屽湪鏋勯犲嚱鏁頒腑璁懼畾銆?br>        · m_strDocStrings 鈥斺?涓涓狢String錛屽寘鍚敤鏉ュ畾涔変笌姣忎釜鏂囨。妯℃澘鑱旂郴鐨?涓瓧絎︿覆鐨勫瓧絎︿覆琛ㄨ祫婧愩傚湪LoadTemplate()涓垵濮嬪寲銆?br>       
        鍒涘緩鏂扮殑 鏂囨。/瑙嗗浘/妗嗘灦
            CDocTemplate::CreateNewDocument()           錛圖OCTEMPL.CPP)   銆婃繁鍏ヨВ鏋怣FC銆婸205
                · 棣栧厛錛岄氳繃CRuntimeClass 鎸囬拡鐨勬暟鎹垚鍛?m_pDocClass 璋冪敤 CRuntimeClass::CreateObject() 鍒涘緩涓涓柊鐨勬枃妗?br>                · 鍦╬Document 涓繚瀛樹簡(jiǎn) 鏂扮殑 CDocument(鎴栨淳鐢熺被 ) 鎸囬拡涔嬪悗錛岄獙璇?CreateObject 鏄惁宸茬粡宸ヤ綔錛岃嫢澶辮觸錛岃繑鍥濶ULL銆?br>                    鑻ユ垚鍔燂紝璋冪敤 AddDocument() 灝嗚鏂囨。鍔犲埌鎵撳紑鏂囨。閾捐〃涓?CreateNewDocument() 榪斿洖鎸囧悜鏂版枃妗g殑鎸囬拡銆?br>           
            CDocTemplate::CreateNewFrame()
                · 棣栧厛錛屽~鍏呬竴涓狢CreateContext錛堝瓨鏀懼垱寤哄悇縐嶆枃妗?瑙嗗浘緇撴瀯鍏冪礌鎵闇鐨勫叧閿俊鎭級(jí)銆?br>                        1>. m_pNewViewClass 鈥斺?涓涓?CRuntimeClass 鎸囬拡錛岀敤鏉ュ垱寤鴻鍥?br>                        2>. m_pCurrentDoc 鈥斺?鎸囧悜褰撳墠鏂囨。瀵硅薄鐨勬寚閽?br>                        3>. m_pCurrentFrame  鈥斺?鎸囧悜褰撳墠妗嗘灦瀵硅薄鐨勬寚閽?br>                        4>. m_pNewDocTemplate 鈥斺?濡傛灉鏈夊涓枃妗o紝鎸囧悜鏈鍚庝竴涓紱
                        5>. m_pLastView 鈥斺?濡傛灉鏈夊涓鍥撅紝鎸囧悜鏈鍚庝竴涓鍥俱?br>                · 閫氳繃m_pFrameClass 涓殑 CRuntimeClass 緇撴瀯璋冪敤 CRuntimeClass::CreateObject() 鍒涘緩涓涓鏋訛紝鍐嶈皟鐢?LoadFrame()瑁呭叆
                  榪欎釜妗嗘灦鐨勮祫婧愶紝鏍規(guī)嵁榪欎簺鍊煎垱寤鴻妗嗘灦銆?鏈鍚庯紝CreateNewFrame()榪斿洖涓涓寚鍚戞柊妗嗘灦鐨勬寚閽堛?nbsp;
   
            CSingleDocTemplate         銆婃繁鍏ヨВ鏋怣FC銆婸 207
                    錛?CDocument* m_pOnlyDoc;
                        AddDocument() 灝?m_pOnlyDoc 璁劇疆鎴愬弬鏁幫紱
               
            CMultiDocTemplate
                     :  AddDocument() 閫氳繃璋冪敤 m_docList.AddTail( pDocument ) 灝嗘柊鏂囨。鍔犲叆鑷繁鐨勯摼琛ㄤ腑銆?br>                        CPtrList  m_docList;        
                        int m_nUntitledCount;  //璁板綍娌℃湁鏍囬鐨勭獥鍙f暟
           
            CMultiDocTemplate::OpenDocumentFile()
                    · 璋冪敤CreateNewDocument() 鍒涘緩涓涓柊鐨勭┖鏂囨。錛堜竴涓狢Document媧劇敓瀵硅薄錛夛紝鐒跺悗閫氳繃 CreateNewFrame() 鍒涘緩涓涓柊鐨勬鏋訛紝
                    · 鑻ュ弬鏁?lpszPathName 涓篘ULL錛?鍒橭penDocumentFile() 鐭ラ亾瑕佸垱寤虹殑浜嬩竴涓┖鐨勬柊鏂囨。錛岃皟鐢⊿etDefaultTitle()瀹屾垚榪欎釜鍔熻兘銆?br>                        榪欎釜鍑芥暟涓烘柊鏂囨。紜鍚嶇О[浣跨敤Untitled涓巑_nUntitledCount涓湭鍛藉悕璁℃暟鐨勭粍鍚圿錛岀劧鍚庨氳繃鏂版枃妗f寚閽堣皟鐢–Document::SetTitle錛堬級(jí)
                        璁劇疆鏂版枃妗e悕瀛楋紝緇勫悗錛孫penDocumentFile()璋冪敤 OnOpenDocumentFile()錛屽茍灝嗘湭鍛藉悕璁℃暟鐨勬暟鎹垚鍛樺姞1.
                    · 鑻pszPathName 涓嶇瓑浜嶯ULL錛屽垯 OpenDocumentFile() 灝濊瘯鎵撳紑鎸囧畾鐨勬枃妗o紝棣栧厛錛孫penDocumentFile() 鏄劇ず涓涓瓑寰呭厜鏍囷紝鐒跺悗
                        璋冪敤CDocument::OnOpenDocumentFile()錛屽皢鏂囨。鍚嶄紶鍏ヤ綔涓哄弬鏁般傝嫢璋冪敤澶辮觸錛屽垯閿姣佹柊鍒涘緩鐨勫璇濇錛岃繑鍥炰竴涓狽ULL銆傝嫢璋冪敤鎴愬姛錛?br>                        鍒橭penDocumentFile() 璋冪敤 CDocument::SetPathName() 鏇存柊CDocument 鐨勮礬寰勩?br>                    ·涓嶇lpszPathName鐨勭姸鎬佹椂璇存槑錛孫penDocumentFile() 鏈鍚庤皟鐢?CDocTemplate::InitializeUpdateFrame()錛屽啀璋冪敤            
                        CFrameWnd::InitialUpdateFrame(),  騫朵紶閫掍竴涓寚鍚戞柊鏂囨。鐨勬寚閽堛?br>                       
    ****///---------------------------------------------
    CFrameWnd           錛圵INFRM.CPP)
       
        CFrameWnd 鍜?CView 鐨勫垱寤?nbsp;                      銆婃繁鍏ヨВ鏋怣FC銆婸208
            瑙嗗浘鐨勫垱寤猴細(xì)CFrameWnd::CreateView     
                鍦ㄦ枃妗fā鏉垮湪CreateNewFrame() 涓垱寤烘鏋舵椂錛學(xué)indows鍙戝嚭涓涓?WM_CREATE錛岃繘琛屽涓嬭皟鐢?br>                            OnCreate ->  OnCreateHelper()  -> OnCreateClient()  ->  CreateView() 
            CreateView() 浣跨敤 CCreateContext::m_pNewViewClass 涓瓨鍌ㄧ殑 CRuntimeClass 鍒涘緩涓涓鍥撅紝鍒涘緩瀹屾垚鍚庯紝璋冪敤 CWnd::Create()瀹屾垚鍒涘緩宸ヤ綔銆?br>           
        CFrameWnd::InitialUpdateFrame()
            浣挎鏋朵腑鐨勬墍鏈夎鍥鵑兘琚洿鏂般?br>            · 棣栧厛錛孖nitialUpdateFrame() 鑾峰緱涓涓椿璺冭鍥劇殑鎸囬拡錛屽茍瀛樻斁鍦?pView涓紝
            · 鑻?bMakeVisible 鍙傛暟涓篢RUE錛?鍒橧nitialUpdateFrame() 鍙戝嚭 WM_INITIALUPDATE 緇欎粬鎵鏈夊悗浠o紝榪欎釜娑堟伅琚槧灝勫埌 CView::OnInitialUpadte()銆?br>                鍙戦佹秷鎭悗錛岄氳繃CView::OnActiveView() 嬋媧昏鍥俱?br>               
               
    ****///---------------------------------------------
    CDocument              錛圓FXWIN.H錛?br>       
        · m_strTitle 鈥斺?鏂囨。鍚嶏紝閫氳繃 SetTitle()璁劇疆錛屼繚瀛樻椂鐢ㄥ畠鏉ヨ瀹氭鏋剁獥鍙g殑鏍囬鍜屾枃浠剁殑鍚嶅瓧
        · m_strPathName 鈥斺?褰撳墠鏂囨。鐨勮礬寰勶紙鍖呮嫭鏂囦歡鍚嶏級(jí)銆傜敤 SetPathname() 璁劇疆錛屾槸瀵筂RU鑿滃崟鐨勮ˉ鍏咃紝淇濆瓨鏂囦歡鏃剁敤鍒般?br>        · m_pDocTemplate 鈥斺?鎸囧悜鏂囨。鐨勬枃妗fā鏉跨殑鎸囬拡銆?CDocTemplate::AddDocument()涓緗紝閫氳繃CDocTemplate::GetDocTemplate()璁塊棶
        · m_viewList 鈥斺?璁板綍鎵鏈夊湪璇ユ枃妗d笅鎵撳紑鐨勬墍鏈夎鍥劇殑鎸囬拡銆?nbsp; 鏂囨。鏀瑰彉鏃訛紝閫氳繃榪欎釜鎸囬拡閫氱煡瑙嗗浘銆?br>                                   瑙嗗浘閫氳繃AddView()鍔犲叆鍒癿_viewList涓紝RemoveView()鍒犻櫎銆?br>                                   GetFirstViewPosition() 鍜?GetNextView() 鏉ラ亶鍘?br>        · m_bModified 鈥斺?“淇敼”鏍囧織浣嶏紝琚慨鏀瑰氨璁句負(fù) 1銆備負(fù)1鏄鏋跺湪鐢ㄦ埛鍏抽棴鏂囨。鏃舵彁紺恒?nbsp; IsModified()   SetModifiedFlag()
        · m_bAutoDelete 鈥斺?琚鏋惰緗負(fù) TRUE鏃訛紝鎵鏈夎鍥懼叧闂椂璇ユ枃妗e璞¤琚垹闄ゃ傚彲璁句負(fù) FALSE錛屾枃妗e湪娌℃湁浠諱綍鎵撳紑瑙嗗浘鏃朵粛浼?xì)淇濈?br>        · DisconnectViews() 鈥斺?璇ユ垚鍛樺嚱鏁伴亶鍘?m_viewlist 涓繚瀛樼殑瑙嗗浘閾捐〃錛屽茍灝?CView::m_pDocument 鎸囬拡璁劇疆涓?NULL錛屼粠鑰屽皢鎵鏈夎鍥句粠鏂囨。涓婃柇寮銆?br>        · DoSave() 鈥斺?CDocument鎴愬憳 OnFileSaveAs() 鍜?OnFileSave() 鍦ㄦ彁紺鴻緭鍏ユ枃浠跺悕鎴栭獙璇佹枃浠跺悕鍚庯紝鏈緇堥兘璋冪敤 DoSave()錛孌oSave璋冪敤浜?OnSaveDocument()
        · DoFileSave() 鈥斺?鍏堟鏌ユ枃妗h琚瓨鍌ㄥ埌鐨勬枃浠剁殑涓浜涙ц川錛屽湪璋冪敤 DoSave()銆?br>        · UpdateFrameCounts() 鈥斺?璁℃暟涓鴻鏂囨。鐨勬墍鏈夎鍥炬墦寮鐨勬鏋訛紝騫舵牴鎹柊鐨勬妧鏈氱煡鏇存柊瀹冧滑鐨勭獥鍙f爣棰樸?br>        · SendInitialUpdate() 鈥斺?閬嶅巻瑙嗗浘閾捐〃騫惰皟鐢?CView::OnInitialUpdate()銆?br>       
    鍒涘緩鏂囨。錛?nbsp;            銆婃繁鍏ヨВ鏋怣FC銆婸213
        ->  鍒涘緩涓涓┖鐨勬枃妗o紝浼?xì)璋冪?CDocument::OnNewDocument()銆?br>                棣栧厛璋冪敤DeleteContents() 娓呯┖鏂囨。錛堥粯璁や粈涔堥兘涓嶅仛錛夛紝鐒跺悗璁劇疆淇敼鏍囧織浣嶄負(fù) FALSE錛屽茍紜繚 m_strPathName涓虹┖
               
        ->  CDocument::OnOpenDocument() 浠庝竴涓枃浠跺垱寤烘枃妗?br>                鈶? 棣栧厛璋冪敤 CDocument::GetFile() 鎵撳紑涓涓枃浠訛紝璇ュ嚱鏁扮敤緇欏嚭鐨勬枃浠跺悕璋冪敤 CFile::Open()銆傝嫢鎵撳紑鎴愬姛錛孫nOpenDocument()璋冪敤DeleteContents()
            涓烘枃浠剁殑鍙戝簭鍒楀寲錛坉e-serialization錛変綔鍑嗗錛堜粠姘鎬箙瀛樺偍璁懼璇誨叆涓涓柊鐨勬枃妗o級(jí)銆傝皟鐢⊿etModified()銆?鑻ュ簭鍒楀寲澶辮觸錛屾枃妗h鏍囪涓?#8220;宸蹭慨鏀?#8221;銆?br>                鈶? 鏍規(guī)嵁pFile 鍒涘緩涓涓?CArchive錛屽茍灝嗚繖涓?CArchive 浼犻掔粰 CDocument::Serialize()銆?鑻ュ彂搴忓垪鍖栨垚鍔燂紝鍏抽棴妗f騫墮噴鏀炬枃浠?br>                鈶? 鏈鍚庯紝鍏抽棴淇敼鏍囧織浣嶅茍榪斿洖TRUE
               
    淇濆瓨鏂囨。錛?br>        CDocument::OnSaveDocument()
            閫氳繃GetFile()鎵撳紑涓涓枃浠訛紝浣跨敤鏍囧織鎸囧畾鏂囦歡鏄墦寮鐢ㄦ潵淇濆瓨鐨勶紙CFile:: mode ReadWrite|CFile::modeCreate錛夈?br>            鍒涘緩CArchive錛屽茍灝嗕箣搴婂簳緇?Serialize() 鎴愬憳鍑芥暟銆?br>            鑻ユ垚鍔熷簭鍒楀寲錛屽叧闂瑿Archive錛屾爣蹇椾綅璁劇疆鎴?FALSE錛岃繑鍥濼RUE銆?br>           
    涓庤鍥鵑氫俊錛?br>        m_viewlist 鏄?CDocument 涓庢鍦?#8220;瑙?#8221;榪欎釜鏂囨。鐨勮鍥捐繘琛屼氦浜掔殑涓粙銆?br>            錛堥渶瑕佷氦浜掔殑鐘跺喌錛?br>            1. 閫氱煡瑙嗗浘鏂囨。琚攢姣併?nbsp; CDocument鏋愭瀯鍑芥暟璋冪敤 DisconnectView()
            2. 浠庤鍥懼嚭鍙戯紝閫氳繃璋冪敤CView::GetParentFrame() 璁塊棶妗嗘灦錛?br>            3. 閫氱煡瑙嗗浘鏂囨。琚慨鏀廣侀渶瑕佹洿鏂幫紝 UpdateAllViews錛堬級(jí)瀹屾垚榪欎釜鍔熻兘
           
        CDocument::UpdateAllViews()
            棣栧厛璋冪敤 GetFirstViewPosition() 鑾峰緱 m_viewlist鐨勭涓涓鍥撅紱
            鐒跺悗錛岄亶鍘嗘暣涓鍥鵑摼琛紝闄ゅ彂閫佽呯殑瑙嗗浘澶栬皟鐢?CView::OnUpdate()銆?br>           
                       
    ****///---------------------------------------------
    CView                           錛圓FXWIN.H錛?br>   
        CView 緇樺浘
            CView::OnPaint()
                · 棣栧厛鍒涘緩涓涓狢PaintDC錛屽寘鍚閲嶇敾鐨勫尯鍩燂紝
                · 灝嗚繖涓?paint DC 浼犻掔粰 OnPrepareDC()錛屾渶鍚庡皢 paint DC 浼犵粰 OnDraw()銆?br>                    tag錛氶粯璁ょ殑 OnPrepareDC() 鍜?OnDraw() 瀹炵幇涓嶅仛浠諱綍浜嬶紝
                       



Euan 2010-03-15 23:24 鍙戣〃璇勮
]]>
銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?6.MFC娑堟伅澶勭悊銆佹秷鎭槧灝?/title><link>http://www.shnenglu.com/Euan/archive/2010/03/15/109786.html</link><dc:creator>Euan</dc:creator><author>Euan</author><pubDate>Mon, 15 Mar 2010 15:14:00 GMT</pubDate><guid>http://www.shnenglu.com/Euan/archive/2010/03/15/109786.html</guid><wfw:comment>http://www.shnenglu.com/Euan/comments/109786.html</wfw:comment><comments>http://www.shnenglu.com/Euan/archive/2010/03/15/109786.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Euan/comments/commentRss/109786.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Euan/services/trackbacks/109786.html</trackback:ping><description><![CDATA[<p>2009-9-2 <br>======================<br>銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?6.MFC娑堟伅澶勭悊銆佹秷鎭槧灝?br>======================</p> <p><br>    CCmdTarget鍜屾秷鎭槧灝勮〃<br>    -紿楀彛娑堟伅<br>        3涓儴鍒嗭細(xì)1錛変竴涓棤絎﹀彿鏁存暟錛屽寘鍚簡(jiǎn)娑堟伅鐨勫疄闄呭唴瀹癸紱 2錛塛PARAM鈥斺?涓涓?瀛楄妭鐨勫弬鏁幫紱3錛塋PARAM鈥斺?涓涓?瀛楄妭鐨勫弬鏁?br>        <br>    MFC娑堟伅鏄犲皠<br>        CCmdTarget綾?br>        娑堟伅鏄犲皠琛ㄦ暟鎹粨鏋勶細(xì)<br>                AFX_MSGMAP_ENTRY錛岃〃紺烘秷鎭槧灝勮〃鐨勫疄闄呭叆鍙o細(xì)<br>                struct AFX_MSGMAP_ENTRY{<br>                    UINT nMessage;          //琛ㄧずWindows娑堟伅銆?br>                    UINT nCode;               //琛ㄧず鎺т歡浠g爜鎴朩M_NOTIFY浠g爜<br>                    UINT nID;                    //浜х敓娑堟伅鐨勬帶浠禝D<br>                    UINT nLastID;              //<br>                    UINT nSig;                   //琛ㄧず鐢ㄤ簬澶勭悊娑堟伅鐨勫嚱鏁扮殑絳懼悕錛坰ignature錛?br>                    AFX_PMSG pfn;           //鎸囧悜澶勭悊娑堟伅鐨勫嚱鏁?br>                };<br>                <br>                typedef  void  (CCmdTarget::*AFX_PMSG) (void);<br>                <br>                struct AFX_MSGMAP{<br>                    const AFX_MSGMAP*  pBaseMap;                //鎸囧悜鍙︿竴涓狝FX_MSGMAP緇撴瀯鐨勬寚閽堬紙鍩虹被鐨勬秷鎭槧灝勮〃錛?br>                    const AFX_MSGMAP_ENTRY*  lpEntries;        //<br>                };<br>                娑堟伅鏄犲皠琛ㄥ熀鏈笂灝辨槸AFX_MSGMAP_ENTRY緇撴瀯鏁扮粍銆?br>                <br>        娑堟伅鏄犲皠瀹?br>            DECLARE_MESSAGE_MAP銆?nbsp; BEGIN_MESSAGE_ MAP   鍜?nbsp;  END_MESSAGE_MAP.<br>            鍦ㄧ被瀹氫箟涓嬌鐢―ECLARE_MESSAGE_MAP鎰忓懗鐫鍦ㄧ被涓畾涔変簡(jiǎn)3縐嶄笢瑗匡細(xì)<br>                1錛変竴涓悕涓篲messageEntries 鐨?AFX_MSGMAP_ENTRY 緇撴瀯鏁扮粍錛?nbsp;       錛堥潤(rùn)鎬佹垚鍛橈級(jí)<br>                2錛変竴涓悕涓簃essageMap 鐨?AFX_MSGMAP;                                    錛堥潤(rùn)鎬佹垚鍛橈級(jí)<br>                3錛変竴涓幏寰楃被鐨勬秷鎭槧灝勮〃鐨勫嚱鏁幫紙GetMessageMap()錛夈?br>            #define BEGIN_MESSAGE_MAP(theClass, baseClass) \<br>                PTM_WARNING_DISABLE \<br>                    const AFX_MSGMAP* theClass::GetMessageMap() const \      <br>                            { return GetThisMessageMap(); } \<br>                    const AFX_MSGMAP* PASCAL theClass::GetThisMessageMap() \<br>                        { \<br>                            typedef theClass ThisClass;   \<br>                            typedef baseClass TheBaseClass;   \<br>                            static const AFX_MSGMAP_ENTRY _messageEntries[] =  \<br>                        {<br>                瀹忎駭鐢熶竴涓狦etMessageMap()鍑芥暟錛岃鍑芥暟榪斿洖綾葷殑娑堟伅鏄犲皠琛ㄦ寚閽堛傛鏋剁▼搴忕敤GetMessageMap()鏉ヨ幏寰楃被鐨勬秷鎭槧灝勮〃銆?br>                鐒跺悗瀹忎駭鐢熷~鍏匒FX_MSGMAP緇撴瀯鐨勪唬鐮併傜涓涓煙鎸囧悜鍩虹被鐨勬秷鎭槧灝勮〃錛屽悓鏃跺垱寤轟竴鏉″埌鏍瑰璞$殑閾捐〃銆?br>            絎簩涓煙鏄寚鍚戠被鑷繁鐨勭涓涓秷鎭槧灝勮〃鐨勫叆鍙c?br>                鏈鍚庯紝瀹忎駭鐢熷疄闄呯殑娑堟伅琛紝娑堟伅琛ㄥ疄闄呬笂灝辨槸AFX_MSGMAP_ENTRY緇撴瀯鐨勮〃銆?br>            #define END_MESSAGE_MAP() \<br>                {0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \<br>                ; <br>                <br>        MFC濡備綍浣跨敤娑堟伅鏄犲皠琛?br>                <br>    ---------------------------------------             <br>    Command Routing錛堝懡浠や紶閫掞級(jí)<br>        鈻?鑻ユ槸涓鑸殑 Windows娑堟伅錛圵M_xxx錛夛紝涓瀹氱敱媧劇敓綾繪祦鍚戝熀綾?br>        鈻?鑻ユ槸鍛戒護(hù)娑堟伅 WM_COMMAND<br>                Frame紿楀彛錛?View    →  Frame紿楀彛鏈韓  →  CWinApp瀵硅薄<br>                                      ↓<br>                                    View錛?nbsp; View鏈韓 →  Document<br>                                                                            ↓            <br>                                                                     Document錛?nbsp; Document鏈韓→ DocumentTemplate<br>            </p> <p> </p> <p> </p> <img src ="http://www.shnenglu.com/Euan/aggbug/109786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Euan/" target="_blank">Euan</a> 2010-03-15 23:14 <a href="http://www.shnenglu.com/Euan/archive/2010/03/15/109786.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?5.瀵硅瘽妗嗗拰鎺т歡綾?/title><link>http://www.shnenglu.com/Euan/archive/2010/03/15/109783.html</link><dc:creator>Euan</dc:creator><author>Euan</author><pubDate>Mon, 15 Mar 2010 15:09:00 GMT</pubDate><guid>http://www.shnenglu.com/Euan/archive/2010/03/15/109783.html</guid><wfw:comment>http://www.shnenglu.com/Euan/comments/109783.html</wfw:comment><comments>http://www.shnenglu.com/Euan/archive/2010/03/15/109783.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Euan/comments/commentRss/109783.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Euan/services/trackbacks/109783.html</trackback:ping><description><![CDATA[<p>2009-9-2 </p> <p>===========================<br>銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?5.瀵硅瘽妗嗗拰鎺т歡綾?br>===========================</p> <p>CDialog錛?妯℃丮FC瀵硅瘽妗嗐鍜屻闈炴ā鎬丮FC瀵硅瘽妗?br>--------------------------------------------------------------------------    <br>    妯℃佸璇濇<br>        浠嶤Dialog媧劇敓涓涓湰鍦板璞★紝璋冪敤 DoModal() 鍒濆鍖栥佸垱寤恒佹樉紺哄茍閿姣佸璇濇<br>        <br>    闈炴ā鎬佸璇濇<br>        浠庡爢涓婂埄鐢╪ew 鎿嶄綔絎﹀垱寤猴紝鏄劇ず璋冪敤Create(錛?鎴愬憳鍑芥暟鏉ユ樉紺哄璇濇錛?閿姣?DestroyWindow()<br>        <br>    瀵硅瘽妗嗘搷浣?br>        NextDlgCtrl() 銆丳revDlgCtrl() 鎴?GotoDlgCtrl() ,閬嶅巻瀵硅瘽妗嗕腑鐨勬帶浠?nbsp;   <br>--------------------------------------------------------------------------</p> <p>                        Win32 API<br>                · CreateDialog() 鈥斺?浠庢ā鏉胯祫婧愬垱寤轟竴涓潪妯℃佺殑瀵硅瘽妗嗐?br>                · CreateDialogIndirect() 鈥斺?浠庢ā鏉挎寚閽堝垱寤轟竴涓潪妯℃佺殑瀵硅瘽妗嗐?br>                · DialogBox() 鈥斺?浠庢ā鏉胯祫婧愬垱寤轟竴涓ā鎬佺殑瀵硅瘽妗嗐?br>                · DialogBoxIndirect() 鈥斺?浠庢ā鏉挎寚閽堝垱寤轟竴涓ā鎬佺殑瀵硅瘽妗嗐?br>        CDialog鍙姷鐢–reateDialogIndirect()錛岃嚜宸卞疄鐜頒簡(jiǎn)妯℃佸寲銆?br>--------------------------------------------------------------------------<br>        <br>    CDialog鐨勪竴浜涙暟鎹垚鍛?br>        · m_nIDHelp 鈥斺?鎸夐挳鐨勮緟鍔㊣D錛岀敱妯℃澘ID紜畾<br>        · m_lpszTemplateName 鈥斺?璧勬簮妯℃澘鐨勫悕瀛椼傝嫢鎸囧畾浜?jiǎn)ID錛宮_lpszTemplateName灝辨槸MAKELONG錛?錛孖D錛?<br>        · m_hDialogTemplate 鈥斺?涓鏃﹁杞戒箣鍚庯紝鏄祫婧愭ā鏉垮彞鏌勩?br>        · m_lpDialogInit 鈥斺?涓涓寚鍚戠敤鏉ュ垵濮嬪寲瀵硅瘽妗嗙殑鏁版嵁鐨勬寚閽堛傜敤鏉ュ垵濮嬪寲瀵硅瘽妗嗙殑鏁版嵁鏄粠璧勬簮鏂囦歡涓杞界殑錛岄氳繃涓涓祫婧怚D涓庡璇濇鐩歌仈緋匯?br>        · m_pParentWnd 鈥斺?涓涓寚鍚戠埗紿楀彛鎴栦富紿楀彛鐨凜Wnd鎸囬拡銆?br>        · m_hWndTop 鈥斺?鏈欏跺眰鐨勭埗紿楀彛<br>        · m_pOccDialogInfo 鈥斺?瀛樺偍OLE鎺т歡鎵闇瑕佺殑淇℃伅銆?br>        <br>    CDialog鐨勪竴浜涙垚鍛樺嚱鏁?br>        · virtual PreTranslateMessage() 鈥斺?涓虹壒孌婃儏鍐佃繃婊ゆ秷鎭紝濡傚伐鍏鋒彁紺哄拰SHIFT-F1鐜甯姪<br>        · virtual OnCmdMsg() 鈥斺?nbsp; 灝嗗懡浠ゆ秷鎭礬鐢辯粰鎵鏈夎呭拰褰撳墠鐨?CWinThread 瀵硅薄銆傚拷鐣ユ帶浠墮氱煡<br>        · virtual CheckAutoCenter() 鈥斺?媯(gè)鏌ョ敤鎴鋒槸鍚﹀凡緇忔寚瀹氫簡(jiǎn)瀵硅瘽妗嗚嚜鍔ㄤ綅浜庝腑蹇?br>        · virtual SetOccDialogInfo  鈥斺?鐢ㄤ簬璁劇疆 m_pOccDialogInfo銆?br>        · virtual PreInitDialog() 鈥斺?鍦╓M_INITDIALOG(OnInitDialog() )涔嬪墠琚皟鐢ㄣ?br>        · PreModal() 鈥斺?閫氳繃鍑嗗灝嗚嚜宸辯矘璐村埌宸插垱寤虹殑瀵硅瘽妗嗙獥鍙d笂錛屼負(fù)DoModal()閫昏緫鍑嗗CDialog<br>        · PostModal 鈥斺?鍦―oModal()閫昏緫涔嬪悗灝咰Dialog鍒嗙銆?br>-------------<br>    CDialog鐨勬瀯閫犲嚱鏁?br>        DLGCORE.CPP<br>        <br>    DoModal()       銆婃繁鍏ヨВ鏋怣FC銆?P155<br>        澶勭悊瀵瑰崕妗嗙殑鍒涘緩銆佹樉紺哄拰閿姣?br>        · 棣栧厛杞藉叆瀵硅瘽妗嗚祫婧愶細(xì) 浠庤祫婧愭枃浠朵腑鏌ユ壘銆佽澆鍏ュ茍閿佸畾瀵硅瘽妗嗘ā鐗堛傛棤娉曞畾浣嶈祫婧愭椂錛岃繑鍥?1.<br>        · 鍑嗗鍒涘緩瀵硅瘽妗嗭細(xì) 鍏堣皟鐢≒reModal() 鏉ユ墽琛屽畨鍏ㄦ鏌ュ茍鏈璇濇鏌ユ壘鎵闇鐨勭埗鍙ユ焺錛岃皟鐢–Wnd::GetSageOwner()鏉ュ畬鎴愯繖浜涳紝騫跺皢緇撴灉瀛樺叆m_hWnd涓?br>                                鐒跺悗璋冪敤EnableWindow錛坔WndParent,FALSE錛夋潵璁插璇濇鐨勭埗紿楀彛紱佺敤錛屽己鍒跺疄鐜頒簡(jiǎn)妯℃佸寲銆?br>        · 鍒涘緩騫舵樉紺哄璇濇錛?br>                        鍏堥氳繃璋冪敤AfxHookWindowCreate() 灝嗕竴涓狹FC瀵硅薄綺樿創(chuàng)鍒板璇濇涓紝<br>                        鐒跺悗璋冪敤 CWnd::CreateDlgIndirect()錛岃鍑芥暟浼?xì)鍋氫竴浜涢敊璇鏌ワ紝鐒跺悗璁劇疆瀵硅瘽妗嗗瓧浣擄紝鍐嶇敤 WF_CONTINUEMODAL <br>                瀵?CWnd::m_nFlags鎴愬憳鍋?OR 鎿嶄綔錛岀劧鍚庤皟鐢?::CreateDialogIndirect()錛屽弬鏁版槸瀵硅瘽妗嗘ā鐗堛佺埗紿楀彛鍙ユ焺 鍜?AfxDlgProc()<br>                錛堜綔涓哄璇濇榪囩▼錛夈傝繑鍥濼RUE鎴朏ALSE銆?br>                        璋冪敤CWnd::RunModalLoop() 澶勭悊娑堟伅鐩磋嚦鐢ㄦ埛鎸変笅 ”OK“鎴?#8221;Cancel“錛孫nOK() 鍜?OnCancel() 璋冪敤 EndDialog錛堬級(jí)錛孍ndDialog() 璋冪敤<br>                CWnd::EndModalLoop()錛岃繖鏍峰氨緇撴潫浜?jiǎn)loop澶勭悊榪囩▼錛屾帶鍒舵祦杞粰DoModal()銆?br>                        璋冪敤 SetWindowPos() 闅愯棌鐩墠宸茬粡姝繪帀鐨勫璇濇錛屽啀璋冪敤 EnableWindow錛坔WndParent,TRUE錛夋潵嬋媧葷埗紿楀彛銆?br>        · 鏀跺熬錛?br>                璋冪敤DestroyWindow()鏉ラ攢姣乄indows瀵硅瘽妗嗗璞★紝鐒跺悗璋冪敤PostModal() 灝嗙涓姝ヤ腑綺樿創(chuàng)鍒癢indows瀵硅薄鐨凜++瀵硅薄鍒嗙錛岃緗甿_hWndTop涓篘ULL<br>                <br>    CDialog鎺т歡鐨勫垵濮嬪寲<br>        WM_INITDIALOG<br>            WM_INITDIALOG鏄犲皠鍒癈DIalog::HandleInitDialog().HandleInitDialog()鎵цOLE鎺т歡鐨勪竴浜涘垵濮嬪寲錛屼粠鑰岃皟鐢–Dialog::OnInitDialog()銆?br>            OnInitDialog()璋冪敤CWnd::ExecuteDlgInit()錛岀敱鍚庤呭畬鎴愭渶緇堝璇濇鐨勫垵濮嬪寲銆?br>            <br>----------------------------------------------------------------------------------------------------------------<br>    DDX/DDV錛?CDialog鏁版嵁浜ゆ崲涓庨獙璇?nbsp;              P160<br>    <br>        CDataExchange 鎴愬憳鍑芥暟<br>            · 鏋勯犲嚱鏁?鈥斺?浼犲叆涓涓璇濇鎸囬拡鍜?bSaveAndValidate鐨勫垵濮嬪寲璁劇疆銆?br>            · PrepareCtrl() 鈥斺?涓篋DX/DDV鍑嗗涓涓潪緙栬緫鎺т歡銆傞氬父榪欎釜鍑芥暟浼?xì)璋冪敤鍐呴儴瀵硅瘽妗嗘寚閽?m_pDlgWnd 鐨?GetDlgItem() 鏂規(guī)硶<br>            · PrepareEditCtrl() 鈥斺?涓篋DX/DDV 鍑嗗涓涓紪杈戞帶浠躲傞鍏堣皟鐢≒repareCtrl(),鐒跺悗灝唌_bEditLastControl璁劇疆涓篢RUE<br>            . Fail() 鈥斺?濡傛灉楠岃瘉澶辮觸灝辮皟鐢ㄨ繖涓嚱鏁般傚皢鐒︾偣璁劇疆鍒板墠涓涓帶浠訛紝騫舵姏鍑篊UserException寮傚父銆?br>            · PrepareOleCtrl() 鈥斺?涓篋DX/DDV 鍑嗗涓涓狾LE鎺т歡銆?br>            <br>            · m_bSaveAndValidate 鈥斺?鎸囧畾浜?jiǎn)DDX鐨勬柟鍚戯紝浠ュ強(qiáng)鏄惁搴旇鍋?DDV 錛孎ALSE鏃訛紝鏁版嵁浠庢垚鍛樺彉閲忔祦鍒版帶浠躲?br>            · m_pDlgWnd 鈥斺?涓涓寚鍚戝璇濇鐨凜Wnd鎸囬拡錛屽畠鍖呭惈浜?jiǎn)闇瑕佷氦鎹㈠拰楠岃瘉鐨勬帶浠躲傝繖涓奸氳繃CDataExchange鏋勯犲嚱鏁頒紶鍏ャ?br>            · m_hWndLastControl 鈥斺?璁板綍浜?jiǎn)鍓嶄竴涓帶浠剁殑鍙ユ焺銆?br>            · m_bEditLastControl 鈥斺?涓涓狟oolean鍙橀噺錛屾寚瀹氫簡(jiǎn)鍓嶄竴涓帶浠舵槸鍚︽槸緙栬緫鍣ㄣ?br>            <br>        DDX_Text()<br>            鈶?鍏堣皟鐢?PrepareEditCtrl() 鎴?PrepareCtrl()銆?br>            鈶?鐒跺悗DDX_Text() 媯(gè)鏌?Boolean 鍙橀噺 m_bSaveAndValidate鐨勫鹼紝<br>            鈶?鑻ユ爣蹇椾負(fù)TRUE錛堟暟鎹粠鎺т歡嫻佸悜鎴愬憳鍙橀噺錛夛紝璋冪敤 Win32API(濡?::GetWindowText()錛夛紝浠庣紪杈戞帶浠惰幏寰楀瓧絎︿覆錛屽皢瀛楃涓叉斁鍦?value"涓?br>                鑻ヤ負(fù)FALSE錛岃皟鐢?AfxSetWindowText錛?錛屼嬌鐢–String鍙傛暟鐨勫唴瀹規(guī)洿鏂扮紪杈戞帶浠躲?br>                <br>        DDV_MaxChars()<br>                媯(gè)鏌?CDataExchange::m_bSaveAndValidate 鏍囧織錛岀‘淇濅負(fù) TRUE錛堝嵆鐜板湪姝e湪榪涜楠岃瘉錛夈傜劧鍚庢牴鎹寚瀹氱殑澶у皬媯(gè)鏌ュ瓧絎︿覆鐨勯暱搴︺?br>            <br>------------------------------------------------------------------------------------------------<br>    CWnd::UpdateData()<br>        鈶?#183; 棣栧厛鍒涘緩涓涓狢DataExchange瀹炰緥錛屽皢 this 浣滀負(fù)CDialog鎸囬拡浼犲叆錛屽茍緇х畫浼犲叆bSaveAndValidate 鏍囧織錛圤nDialogInit()璋冪敤鏃朵負(fù)FALSE…錛夈?br>        鈶?#183; UpadteData() 浼?xì)闃诲褰撳墠绾拷E嬶紝浣跨嚎紼嬩笉鑳芥帴鏀舵帶浠剁殑娑堟伅銆?br>        鈶?#183; 鏈湴Boolean鍙橀噺 bOK鐢ㄦ潵瀛樺偍 DDX/DDV 浠g爜鐨勮繑鍥炲箋備竴鏃pdateData() 灝?bOK璁劇疆涓?FALSE錛屽畠浼?xì)璋冪敤浣犵殑CDialog媧劇敓綾葷殑DoDataExchange鏂規(guī)硶錛?br>            鍚屾椂灝咰DataExchange瀹炰緥浣滀負(fù)鍙傛暟浼犲叆銆?bOK琚緗負(fù)TRUE錛?榪欎釜鍊兼渶緇堣繑鍥炵粰 OnUpdate()錛岃〃紺哄綋鍓嶄氦鎹㈠拰楠岃瘉娌℃湁閿欒銆?br>        鈶?#183; 鍑虹幇CUserException寮傚父鏃訛紝璋冪敤榪欏潡浠g爜錛宐OK琚緗負(fù)FALSE錛屾渶緇圲pdateData浼?xì)杩斿?錛?br>        鈶?#183; 濡傛灉DDX/DDV澶勭悊榪囩▼涓病鏈変換浣曞紓甯告姏鍑猴紝浼?xì)鎶ュ憡宸簿l忓彂鐢熺殑涓緋誨垪閿欒錛屼篃鏈夊彲鑳藉鑷磋繑鍥濬ALSE銆?br>        鈶?#183; 閲嶇疆閫氱煡紿楀彛錛屼粠鑰屾寜甯歌鏂規(guī)硶澶勭悊鎺т歡閫氱煡錛屾渶緇堣繑鍥濬ALSE 鎴?TRUE錛堜緷璧栦簬DoDataExchange()鐨勮繑鍥炲?錛夈?/p> <p>========================================================================<br>    MFC鍏敤瀵硅瘽妗?br>    CColorDialog             璁╃敤鎴烽夋嫨涓縐嶉鑹?br>    CFileDialog                鐢ㄤ簬鎵撳紑鍜屼繚瀛樻枃浠?br>    CFindReplaceDialog   鍏佽鐢ㄦ埛鏌ユ壘鍜屾浛浠i」<br>    CFontDialog              鎻愪緵浜?jiǎn)閫夋嫨瀛椾綋鐨勫璇濇<br>    CPrintDialog              璁╃敤鎴烽夋嫨鎵撳嵃鏈恒侀〉鏁般佹墦鍗版柟鍚?br>    <br>----------------------------------------------------------------------------------<br>    灞炴ч〉<br>        CPropertySheet         CPropertyPage<br>        <br>        1銆佸垱寤哄涓璇濇妯℃澘錛屼嬌妯℃澘鎻忚堪浣犳兂瑕佺殑灞炴ч〉涓竷緗殑鎺т歡鍜屽竷灞銆?br>        2銆佷負(fù)姣忎釜瀵硅瘽妗嗘ā鏉垮垱寤篊PropertyPage鐨勪竴涓淳鐢熺被錛屽湪綾諱腑澧炲姞鎴愬憳鍙橀噺鏉ュ瓨鍌ㄥ睘鎬ч〉鐨勭姸鎬併?br>        3a銆佸浜庝竴涓ā鎬佺殑灞炴ч〉錛屽彧瑕佸垱寤哄畠鐨凜PropertySheet瀹炰緥錛岀劧鍚庤皟鐢–PropertySheet::AddPage()灝嗗墠涓ゆ鍒涘緩鐨勫崟涓睘鎬ч〉鍔犲叆鍒板睘鎬ч〉涓?br>               鍐嶈皟鐢–Dialog::DoModal()鏉ユ樉紺哄睘鎬ч〉銆?br>        3b銆佸鏋滃垱寤轟竴涓潪妯℃佺殑灞炴ч〉錛屽垯鍒涘緩鐨凜PropertySheet媧劇敓綾婚』澧炲姞涓浜涗笢瑗夸竴杈硅兘澶熷叧闂璇濇錛孧FC涓嶄細(xì)鑷姩澧炲姞OK/Apply/Cancel<br>               鐒跺悗鍒涘緩浣犵殑CPropertySheet媧劇敓綾葷殑涓涓疄渚嬶紝騫惰皟鐢ㄥ畠鐨凜reate()鏉ユ樉紺洪潪妯℃佸睘鎬ч〉銆?br>               <br>        浣跨敤灞炴ч〉鍏敤鎺т歡<br>            棣栧厛錛屽~鍐橮ROPSHEETHEADER緇撴瀯鐨勪竴浜涘煙錛岀劧鍚庤皟鐢?::PropertyPage()錛屼互璇ョ粨鏋勪負(fù)鍙傛暟錛岃礋璐e垱寤哄睘鎬ч〉銆?br>            鍒涘緩瀹屾垚鍚庯紝灞炴ч〉鍙戦?WM_NOTIFY 娑堟伅錛?br>                · PSN_APPLY 鈥斺?Apply 鎸夐挳琚寜涓?br>                · PSN_WIXZBACK 鈥斺?鍦ㄥ悜瀵兼ā寮忎笅錛岀敤鎴鋒寜涓嬩簡(jiǎn) Previous 鎸夐挳<br>                · PSN_WIZNEXT 鈥斺?鍦ㄥ悜瀵兼ā寮忎笅錛岀敤鎴鋒寜涓嬩簡(jiǎn) Next 鎸夐挳<br>                · PSN_WIZFINISH 鈥斺?鍦ㄥ悜瀵兼ā寮忎笅錛岀敤鎴鋒寜涓嬩簡(jiǎn) Finish 鎸夐挳<br>            鑻ユ兂鍝嶅簲鍒氭彁鍒扮殑閫氱煡錛屽彲鎯沖睘鎬ч〉鎺т歡鍙戦佹秷鎭?br>                · PSM_SETTILTLE 鈥斺?璁劇疆灞炴ч〉鐨勬爣棰?br>                · PSM_ADDPAGE 鈥斺?鍦ㄥ睘鎬ч〉涓鍔犱竴涓崟欏點(diǎn)傛秷鎭殑 lParam鍙傛暟鏄竴涓寚鍚戝凡鍒涘緩鐨勫睘鎬у崟欏碉紙鐢盋reatePropertySheetPage()鍒涘緩錛夌殑鍙ユ焺<br>                · PSM_REMOVEPAGE 鈥斺?鍦ㄥ睘鎬ч〉涓垹闄や竴涓睘鎬у崟欏點(diǎn)?br>    <br>        CPropertySheet 鍐呭箷<br>            · CommonConstruct() 鈥斺?涓嶅悓鐨凜PropertySheet鏋勯犲嚱鏁版帴鍙楃殑鍙傛暟浼犻掔粰 CommonConstruct()銆?棣栧厛璁劇疆浜?jiǎn)m_psh鎵鎸囧悜鐨?PSH_PROPSHEETPAGE <br>                                    緇撴瀯鐨?dwFlags 鍩燂紝鐒跺悗鍒濆鍖栦簡(jiǎn) m_psh 鎵鎸囧悜緇撴瀯鐨勫嚑涓叾浠栧煙銆?騫跺皢 m_bStacked 璁劇疆涓篢RUE錛宮_bModeless璁句負(fù)FALSE銆?br>            · EnableStackedTabs() 鈥斺?灝咰PropertySheet璁劇疆涓?#8220;stacked”妯″紡鑰屼笉鏄?#8220;scrolled”妯″紡銆傚彧淇敼浜?m_bStacked 鎴愬憳鍙橀噺銆?br>            · BuildPropPageArray() 鈥斺?璐熻矗灝?m_pages 鏁扮粍杞寲鎴?PROPSHEETPAGE 緇撴瀯銆?br>            · OnInitDialog() 鈥斺?nbsp; 1銆佽嫢涓嶆槸鍑轟簬 鍚戝 妯″紡錛屽皢鏁翠釜灞炴ч〉浼犻掑嚭鍘伙紝浠ュ厤鎺т歡緇戝湪涓璧楓?br>                                             2銆佹牴鎹?m_bStacked 鐨勫間慨鏀規(guī)爣絳劇殑椋庢牸銆傞氳繃璋冪敤 EnableStackedTabs() 瀹屾垚銆?br>                                             3銆佽嫢灞炴ч〉涓洪潪妯℃侊紝涔熶笉澶勪簬 鍚戝  鐘舵侊紝OnInitDialog()灝卞垹闄ゆ爣鍑嗘寜閽?br>                                             4銆佽皟鐢?CWnd::CenterWindow()錛屾槸灞炴ч〉鍑轟簬紿楀彛姝d腑澶?br>            · m_pages 鈥斺?涓涓寚閽堟暟緇勶紝鏄?CPtrArray 鐨勫疄渚嬶紝淇濆瓨浜?jiǎn)鎸囧悜灞炴ч〉鐨勬墍鏈?CPropertyPage 綾葷殑鎸囬拡銆?br>            · m_strCaption 鈥斺?灞炴ч〉鐨勮鏄?br>            · m_pParentWnd 鈥斺?鎸囧悜鐖剁獥鍙g殑鎸囬拡<br>            · m_bStacked 鈥斺?涓涓狟oolean 鍙橀噺錛岃褰曚簡(jiǎn)鐢ㄦ埛鎸囧畾鐨勬爣絳鵑鏍兼槸“stacked”榪樻槸“scrolled”銆?br>            · m_bModeless 鈥斺?涓涓狟oolean鍙橀噺錛?璁板綍鐢ㄦ埛甯屾湜灞炴ч〉鏄ā鎬佽繕鏄潪妯℃併?br>            <br>            CPropertySheet::DoModal()             (DLGPROP.CPP)<br>                棣栧厛錛岃皟鐢?AfxDeferRegisterClass()錛屽鑷碝FC璋冪敤 InitCommonControls()鍑芥暟錛岃鍑芥暟鍒濆鍖栦簡(jiǎn)Windows 閫氱敤鎺т歡 DLL銆?br>                鐒跺悗璋冪敤 BuildPropPageArray(),<br>                鐒跺悗紱佺敤涓葷獥鍙o紝寮哄埗瀹炵幇妯℃佸寲錛岃皟鐢?::PropertySheet() 鏉ュ垱寤哄茍鏄劇ず鍏敤灞炴ч〉鎺т歡銆?br>                鍐嶈皟鐢?CWnd::RunModalLoop() 鍦ㄦā鎬佸寲紿楀彛涓鐞嗘秷鎭車銆傚畬鎴愬悗錛岄攢姣佺獥鍙o紝嬋媧葷埗紿楀彛錛岀劧鍚庤繑鍥?RunModalLoop() 鐨勮繑鍥炲箋?br>                   tag: 鐩村埌 DoModal()錛堝浜庢ā鎬佸睘鎬ч〉錛夋垨Create() (瀵逛簬闈炴ā鎬佸睘鎬ч〉錛夎璋冪敤錛岀被閮戒笉鑳芥槧灝勫埌涓涓猈indows紿楀彛鍙ユ焺銆?br>                          鍦?:PropertySheet() 琚皟鐢ㄥ悗錛學(xué)indows紿楀彛鍙ユ焺鎵嶈鍒涘緩錛屽茍鍜?MFC CPropertySheet 瀵硅薄緇戝畾鍦ㄤ竴璧楓?br>           <br>            CPropertySheet::AddPage()       <br>                棣栧厛錛屽湪鍐呴儴鍙橀噺 m_pages錛堝睘鎬у崟欏墊寚閽堟暟緇勶級(jí)涓繚鎸佷簡(jiǎn)CPropertyPage鎸囬拡銆?br>                媯(gè)鏌?m_hWnd闈炵┖鍚庯紝璋冪敤 ::CreatePropertySheetPage()錛屽茍鍙戦?PSM_ADDPAGE 娑堟伅緇欏睘鎬ч〉鎺т歡錛屼粠鑰岃瀹冨皢鍒涘緩鐨勫睘鎬у崟欏靛姞鍏ャ?br>                <br>            CPropertySheet::BuildPropPageArray()<br>                    棣栧厛錛屽垹闄や簡(jiǎn) m_psh.ppsp 鍩熸墍鎸囧悜鐨勬暟緇勶紝騫跺皢瀹冭緗負(fù)NULL錛屼負(fù)鏂版暟緇勪繚鐣欐帶浠訛紝鏂扮殑鏁扮粍鏉ヨ嚜鍐呴儴 CPtrArray 鏁扮粍 m_pages銆?br>                    鐒跺悗錛屼負(fù)鏈湴鍙橀噺 ppsp鍒嗛厤浜?jiǎn)涓涓柊鏁扮粍錛堟暟緇勫熀綾誨瀷鏄?PROPSHEETPAGES錛夛紝騫跺皢 m_psh.ppsp 鎸囧悜鍚屼竴鍧楀唴瀛樸?br>                    閬嶅巻 m_pages鏁扮粍涓殑鎵鏈?CPropertyPage銆傚浜庢瘡涓錛屽畠?yōu)畣CPropertyPage 鐨勫唴閮?PROPSHEETPAGE 緇撴瀯鎷瘋礉鍒?PROPSHEETHEADER 鏁扮粍<br>                ppsp涓傛嫹璐濈粨鏉熷悗錛岃皟鐢╛ChangePropPageFont() 鏉ヤ慨鏀規(guī)墍鏈夋帶浠剁殑瀛椾綋錛屽弬鏁版槸涓涓寚鍚戝璇濇妯$増鐨勬寚閽堬紝榪欐牱鎺т歡鍜屽睘鎬ч〉浣跨敤鐩稿悓鐨勫瓧浣撱?br>                    鎵鏈夐〉閮芥斁鍏ヤ簡(jiǎn) m_psh.ppsp錛屽氨鏇存柊 m_psh.nPages 榪欎釜鍗曢〉璁℃暟錛屼互渚垮拰 m_pages 鐨勫ぇ灝忕浉鍖歸厤銆?br>            <br>            CProperSheet 閫氱煡<br>                CPropertySheet 灝嗗嚑涓睘鎬ч〉鎺т歡閫氱煡鏄犲皠涓哄彲瑕嗙洊鐨勫洖璋冨嚱鏁?/p> <p><br>================================================================<br>MFC鎺т歡綾?br>    <br>    · AFXWIN2.INL 鈥斺?鎵鏈夋帶浠剁被鐨勫唴宓屽嚱鏁?br>    · WINCTRL1.CPP 鈥斺?CStatic 銆?CButton 銆?CListBox 銆丆ComboBox銆丆Edit鍜?CScrollBar<br>    · WINCTRL2.CPP 鈥斺?CDragListBox銆?br>    · WINCTRL3.CPP 鈥斺?CCheckListBox<br>    · WINBTN.CPP 鈥斺?CBitmapButton</p> <p> </p> <p> </p> <img src ="http://www.shnenglu.com/Euan/aggbug/109783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Euan/" target="_blank">Euan</a> 2010-03-15 23:09 <a href="http://www.shnenglu.com/Euan/archive/2010/03/15/109783.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?4. CObjecthttp://www.shnenglu.com/Euan/archive/2010/03/15/109782.htmlEuanEuanMon, 15 Mar 2010 15:05:00 GMThttp://www.shnenglu.com/Euan/archive/2010/03/15/109782.htmlhttp://www.shnenglu.com/Euan/comments/109782.htmlhttp://www.shnenglu.com/Euan/archive/2010/03/15/109782.html#Feedback0http://www.shnenglu.com/Euan/comments/commentRss/109782.htmlhttp://www.shnenglu.com/Euan/services/trackbacks/109782.html2009-9-2

===========================
銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?4.  CObject
===========================
 
    榪愯鏃剁被鐨勪俊鎭?br>   
        CObject鐨凴TCI錛坮un-time class information錛岃繍琛屾椂綾葷殑淇℃伅錛夌壒鎬т嬌寮鍙戜漢鍛樺湪榪愯鏃跺彲浠ョ‘瀹氬叧浜庣被鐨勪俊鎭?br>        DECLARE_DYNAMIC       /    IMPLEMENT_DYNAMIC
        DECLARE_DYNCREATE    /    IMPLEMENT_DYNCREATE
        DECLARE_SERIAL             /    IMPLEMENT_SERIAL
       
        灝嗚繖浜涘畯鍔犲叆鍒癈Object鐨勬淳鐢熺被涓紝灝卞彲浠ヨ皟鐢↖sKindOf()鏉ユ祴璇曡繖涓被鐨勭被鍨嬶紝IsKindOf鏈変竴涓弬鏁幫紝璇ュ弬鏁版湁鍙︿竴涓畯RUNTIME_CLASS鍒涘緩銆?br>--------------------------------------------------------------------------
    RTCI濡備綍榪愪綔                                     銆婃繁鍏ヨВ鏋怣FC銆?P114
   
                    #define _DECLARE_DYNAMIC(class_name) \
                    public: \
                    static CRuntimeClass class##class_name; \           //鍒涘緩涓涓潤(rùn)鎬佹垚鍛樺彉閲?br>                    virtual CRuntimeClass* GetRuntimeClass() const; \                //榪斿洖姝g‘鐨勮繍琛屾椂綾諱俊鎭?br>            “##”鍛婅瘔棰勫鐞嗗櫒灝嗘搷浣滅鍙充晶鐨勯儴鍒嗗拰宸︿晶鐨勯儴鍒嗚繛鎺ュ湪涓璧楓?br>       
                    #define IMPLEMENT_DYNAMIC(class_name, base_class_name) \
                            IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, NULL, NULL)
                    #define _IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, \
                            class_name::CreateObject, &_init_##class_name) \
                            AFX_CLASSINIT _init_##class_name(RUNTIME_CLASS(class_name)); \
                            CArchive& AFXAPI operator>>(CArchive& ar, class_name* &pOb) \
                            { pOb = (class_name*) ar.ReadObject(RUNTIME_CLASS(class_name)); \
                            return ar; }
              "#"瀛楃涓插寲鐨勫畯錛屽皢鍙充晶鐨勯儴鍒嗚漿鍖栨垚鐢ㄥ紩鍙峰寘鎷殑瀛楃涓層?br>              1.    鍒濆鍖栦簡(jiǎn)闈?rùn)鎬丆RuntimeClass鏁版嵁鎴愬憳鍙橀噺 class##class_name
              2.    鍒涘緩浜?jiǎn)涓涓潤(rùn)鎬丄FX_CLASSINIT緇撴瀯銆?br>                    struct AFX_CLASSINIT{ AFX_CLASSINIT ( CRuntimeClass* pNewClass ); };
              3.    IMPLEMENT_DYNAMIC瀹忎細(xì)鐢熸垚榪欎釜瑕嗙洊鎴愬憳鍑芥暟GetRuntimeClass()銆?br>                    GetRuntimeClass90浼?xì)杩斿洖闈?rùn)鎬丆RuntimeClass鎴愬憳鍙橀噺class##class_name鐨勫湴鍧
--------------------------------------------------------------------------               
    CRuntimeClass綾?br>   
        · LPCSTR m_lpszClassName 鈥斺?綾葷殑鍚嶅瓧銆傚湪搴忓垪鍖栬繃紼嬩腑錛屼綔涓虹被鐘舵佺殑涓閮ㄥ垎琚啓鍏ヨ鍑恒?br>        · UINT m_wSchema 鈥斺?涔熸槸绱殑涓涓姸鎬併?nbsp;  緇欏嚭綾葷殑鐗堟湰淇℃伅
        · void Store( CArchive& ar) const  鈥斺?CArchive::WriteClass()璋冪敤榪欎釜鍑芥暟鏉ュ啓鍑哄叧浜庣被鐨凜RuntimeClass緇撴瀯淇℃伅
        · static CRuntimeClass* Load ( CArchive& ar, UINT* pwSchemaNum);   鈥斺?CArchive::ReadClass() 璋冪敤Load()鏉ヨ鍏ョ敱Store()鍐欏叆鐨凜RuntimeClass淇℃伅銆?br>        · int m_nObjectSize;
        · CRuntimeClass* m_pNextClass;   鈥斺旂淮鎶や竴涓凡鍒涘緩鐨勫璞$殑綆鍗曢摼琛?br>        · m_pBaseClass 鈥斺?淇濆瓨涓涓寚鍚戝熀綾葷殑CRuntimeClass緇撴瀯鐨勬寚閽堛侷sKindOf鍜孖sDerivedFrom()鐢ㄥ畠鏉ョ‘瀹氬璞$殑“澶氭佺被鍨?.
        · m_pfnCreateObject 鈥斺?鐢ㄤ簬鍔ㄦ佸垱寤恒侱ECLARE/IMPLEMENT_DYNCREATE 瀹忎細(xì)灝嗚繖涓垚鍛樺嚱鏁扮殑鎸囬拡鎸囧悜CMyClass::CreateObject()鎴愬憳鍑芥暟銆?br>                    璋冪敤CRuntimeClass::CreateObject()鏃訛紝瀹冧細(xì)閫氳繃m_pfnCreateObject璋冪敤CMyClass::CreateObject()鏉ヨ繑鍥炰竴涓柊鐨凜MyClass銆?br>                                     --------------------------------------
         
                    #define RUNTIME_CLASS(class_name) (&class_name::class##class_name)
              RUNTIME_CLASS瀹忚緣榪斿洖闈?rùn)鎬丆RuntimeClass鎴愬憳鏁版嵁錛孌ECLARE_DYNAMIC浼?xì)灏咰RuntimeClass鎴愬憳鍙橀噺鏀劇疆鍦ㄤ綘鐨勭被涓紙綾諱技浜嶨etRuntimeClass()錛?br> --------------------------------------------------------------------------                              
    鍔ㄦ佸垱寤?br>   
                    鍦–Object媧劇敓綾諱腑澧炲姞瀵瑰姩鎬佸垱寤虹殑鏀寔錛岃浣跨敤DECLARE_DYNCREATE 鍜?IMPLEMENT_DYNCREATE 瀹忥紝榪欎簺瀹忓湪DECLARE_DYNAMIC 瀹忓拰        
            IMPLEMENT_DYNAMIC 瀹忕殑鍩虹涓婂垱寤猴紝涓嶇敤鍦ㄧ被涓悓鏃朵嬌鐢ㄨ繖涓ょ瀹忋?br>                    鍔犲叆榪欎簺瀹忓悗錛岃皟鐢–RuntimeClass 鐨勬垚鍛樺嚱鏁?CreateObject() 鍒涘緩瀵硅薄
                   
                    CRuntimeClass::CreateObject()
                        棣栧厛榪涜媯(gè)鏌ワ紝紜畾鐢ㄦ埛鏄惁鎸囧畾浜?jiǎn)姝<嫯鐨勫畯锛岀劧鍚庤皟鐢?CRuntimeClass::m_pfnCreateObject 鎴愬憳鍙橀噺鎸囧悜鐨勫嚱鏁?br> --------------------------------------------------------------------------      
    MFC涓殑鎸佺畫鎬э紙serialization錛?nbsp;                        銆婃繁鍏ヨВ鏋怣FC銆?P119
   
                鎸佺畫鎬ф寚瀛樺偍瀵硅薄錛屽茍鍦ㄤ箣鍚庣殑鏌愪釜鏃跺埢鎭㈠瀵硅薄鐨勮兘鍔涖?br>        CArchive
                · m_nMode 鈥斺?鍒惰浜?jiǎn)鏂囨。鏄惁鍦ㄨd拰鍐欍傝繕鍙互鐢ㄥ畠鍦ㄥ垹闄ょ殑鏃跺欏叧闂埛鏂?br>                · IsLoading()銆両sStoring()銆両sByteSwapping() 鍜?IsBufferEmpty() 鈥斺?鐢ㄦ潵紜畾CArchive瀵硅薄鐨勭姸鎬?br>                · 鎿嶄綔絎?鈥斺?CArchive涓?CObject媧劇敓綾匯乄indows鏁版嵁綾誨瀷鍜孋++綾誨瀷瀹氫箟浜?jiǎn)鎻掑叆鍜屾彁鍙栨搷浣溄W︺?br>                · Map鎴愬憳 鈥斺?榪涜鍐欐搷浣滄椂錛孋Archive緇存姢浜?jiǎn)涓涓槧灝勮〃錛屼互渚胯兘榪呴熻闂埌綾諱技瀵硅薄鐨勭被淇℃伅銆傝繕鍒╃敤榪欎釜鏄犲皠琛ㄦ潵紜繚瀵逛竴涓壒瀹氱殑綾誨彧鍐欎竴嬈?br>                    CRuntimeClass淇℃伅錛岀劧鍚庡湪搴忓垪鍖栨祦涓紩鐢ㄨ繖涓俊鎭傝鎿嶄綔鏃訛紝CArchive浼?xì)缁存姢宸簿l忓垱寤虹殑瀵硅薄鐨勬暟緇勶紝騫跺湪鏁扮粍涓瓨鍌ㄩ偅浜涘凡緇忚鍑虹殑
                    CRuntimeClass緇撴瀯淇℃伅銆傝繖鏍鳳紝姣忓綋CArchive鏌ユ壘涓涓啓鍏ュ埌搴忓垪鍖栨祦鐨勫紩鐢ㄦ椂錛岄兘鍙互鏌ユ壘璇ユ暟緇勩?br>                · 綾繪垚鍛樺嚱鏁?鈥斺?WriteClass()銆丷eadClass() 鍜?SerializeClass()絳夋垚鍛樺嚱鏁扮敤鏉ュ簭鍒楀寲CRuntimeClass緇撴瀯淇℃伅銆?br>       
        CArchive 鎿嶄綔絎﹀疄鐜?br>                _AFX_INLINE CArchive& CArchive::operator<<(WORD w){
                        if ( m_lpBufCur + sizeof( WORD 錛?> m_lpBufMax )
                                Flush();
                        *(WORD* ) m_lpBufCur = w;
                        m_lpBufCur += sizeof(WORD);
                        return *this;
                }
                _AFX_INLINE  CArchive&  CArchive::operator>>(WORD& w){
                        if( m_lpBufCur + sizeof( WORD ) > m_lpBufMax)
                                FillBuffer( sizeof(WORD)  -  (UINT) ( m_lpBufMax - m_lpBufCur) );
                        w = *( WORD* ) m_lpBufCur;
                        m_lpBufCur += sizeof( WORD);
                        return *this;
                }
               
        鐢ㄦ埛閫夋嫨鏂囨。瑕佸啓鍏ョ殑鏂囦歡鐨勫悕瀛楋細(xì)
            CDocument::OnSaveDocument()   //浠ュ瓨鍌ㄦā寮忓垱寤轟簡(jiǎn)涓涓狢Archive瀵硅薄錛岀劧鍚庡皢瀹冭創(chuàng)鍒扮敱瀵硅瘽妗嗭紙pFile錛夋墦寮鐨勬枃浠跺悗闈€傜劧鍚庯紝OnSaveDocument() 璋冪敤鏂?nbsp;           [doccore.cpp]                                          妗g殑Serialize() 鏂規(guī)硶錛屾渶鍚庡叧闂枃妗?br>                CArchive::CArchive()              //2-5錛屾鏌ユ枃妗f槸鍚︽槸閫氳繃IsStoring() 鏂規(guī)硶淇濆瓨錛屼負(fù)鍐欐搷浣滆皟鐢ㄦ彃鍏ョ鎿嶄綔
                CMyDocument::Serialize()      //
                    CArchive::IsStoring()                  
                    operator<<(CArchive&, CObject* )
                        CArchive::WriteObject()    //6-8錛?鎻掑叆鎿嶄綔絎﹁皟鐢–Archive::WriteObject() 鍑芥暟錛?br>                            CArchive::WriteClass()   //璇ュ嚱鏁板張璋冪敤WriteClass()
                            CMyClass::Serialize()         //錛岀劧鍚庡簭鍒楀寲CMyDocument瀵硅薄
                                   CArchive::IsStoring()
                                   CArchive::operator<<(WORD)
                                   CArchive::operator<<(DWORD)
                                   operator<<(CArchive& , point)
                                        CArchive::Write()
                CArchive::Close()                     
      瀵瑰悓涓瀵硅薄璇繪搷浣滐細(xì)
            CDocument::OnOpenDocument() 
            [doccore.cpp]                                       
                CArchive::CArchive()           
                CMyDocument::Serialize()      //
                    CArchive::IsStoring()  (FALSE)           
                    operator >> (CArchive&, CMyClass* )
                        CArchive::ReadObject()  
                        CMyClass::Serialize()       
                                CArchive::IsStoring()
                                CArchive::operator>>(WORD)
                                CArchive::operator>>(DWORD)
                                operator>>(CArchive& , point)
                                    CArchive::Read()
                CArchive::Close()                     

        鑻ユ暟鎹ぇ浜?6KB錛孲etLoadParams() 鍜孲etStoreParams() 鍙府鍔╂彁楂樺簭鍒楀寲鎬ц兘銆?br>       
    Serializable蹇呰鏉′歡                             銆婃繁鍏ユ祬鍑篗FC銆婸394
        1銆丏ECLARE_SERIAL 銆両MPLEMENT_SERIAL銆?br>        2銆佹淳鐢熻嚜 CObject錛屾敼鍐?Serialize铏氬嚱鏁?br>        3銆佸姞涓婁竴涓猟efault鏋勯犲嚱鏁?br>       
--------------------------------------------------------------------------
    CObject瀵硅瘖鏂殑鏀寔                                 
        TRACE瀹?br>                綾諱技浜巔rintf鐨勮緭鍑恒?br>                    錛堣皟鐢ㄤ簡(jiǎn)鍏ㄥ眬鍑芥暟::AfxTrace()錛圖UMPOUT.CPP)錛夈婃繁鍏ヨВ鏋怣FC銆婸133-136
        瀵硅薄杞偍
                Dump() 鍑芥暟錛岃皟鐢ㄦ墦鍗扮被鐨勭姸鎬併?br>                    錛圤BJCORE.CPP錛孋Object::Dump() 鍙槸杞嚭浜?jiǎn)绫诲悕锛堝瓨鍌ㄥ湪CRuntimeClass綾諱腑錛夊拰this鎸囬拡鐨勫湴鍧錛?br>               
    榪愯鏃舵鏌?nbsp;  
        鏂█
                ASSERT瀹?br>                AFX.H
                    #define ASSERT(f)\
                            do\
                                    {\
                                    if(!(f)&AfxAssertFailedLine(THIS_FILE, __LINE__))\
                                    AfxDebugBreak();\
                            }while(0)\                           
        瀵硅薄鍚堟硶鎬ф鏌?br>                AssertValid()       (CBJCORE.CPP){ASSERT(this!=NULL);}
                    #define ASSERT_VALID(pOb) (::AfxAssertValidObject(pOb, THIS_FILE, __LINE__)
                   
    鍐呭瓨璇婃柇
        媯(gè)嫻嬪唴瀛樻硠闇?br>                浣跨敤CMemoryState 綾葷殑 Checkpoint()灝嗚媯(gè)嫻嬬殑鍖哄煙鍖呰璧鋒潵錛屾潵媯(gè)嫻嬪唴瀛樻硠闇茬殑鐘跺喌銆?br>                鐒跺悗浣跨敤Difference()鏉ユ瘮杈冧袱涓柇鐐癸紝鏌ョ湅涓や釜璋冪敤Checkpoint()涔嬮棿涔嬮棿鏄惁鏈夋硠婕忋?br>               
                    CMemoryState璁板綍鐨勬瘡涓凡鍒嗛厤鐨勫唴瀛樺潡鏄互涓嬪嚑涓箣涓
                        · freeBlock 鈥斺?鐢變簬浣跨敤 delayFreeMemDF 鑰屽鑷撮噴鏀捐寤惰繜鐨勫潡
                        · objectBlock 鈥斺?淇濈暀鐨勬垨鑰呭凡緇忔硠婕忕殑 CObject 瀵硅薄鐨勬暟閲忋?br>                        · bitBlock 鈥斺?宸插垎閰嶅唴瀛樼殑闈?CObject 瀵硅薄鐨勪釜鏁般?br>                        · crtBlock 鈥斺?宸插垎閰嶇殑 C 榪愯鏃跺潡鐨勪釜鏁般?br>                        · ignoredBlock 鈥斺?MFC媯(gè)鏌ユ墍蹇界暐鐨勫潡鐨勪釜鏁般?br>                    CMemoryState灝嗗垎閰嶇殑嬈℃暟淇濆瓨鍦╩_lCounts鏁扮粍涓紝宸插垎閰嶇殑鍚勭綾誨瀷鐨勫ぇ灝忓瓨鏀懼湪m_lSizes鎴愬憳鏁扮粍涓?br>                    m_lHighWaterCount  鎴愬憳鍑芥暟瀛樺偍浜?jiǎn)鏈澶у垎閰嶆暟錛?br>                    m_lTotalCount 璁板綍浜?jiǎn)鍒嗛厤鐨勬繪鏁般?br>                    m_memState 鍜?m_pBlockHeader 鎴愬憳鍙橀噺閮芥寚鍚戜簡(jiǎn)涓涓唴瀛樺潡閾捐〃鐨勫ご鑺傜偣銆?br>                        銆婃繁鍏ヨВ鏋怣FC銆婸140-143
                       
        媯(gè)嫻嬫渶澶у唴瀛樹嬌鐢?br>                閫氳繃鍦╝fxMemDF鍏ㄥ眬鍙橀噺涓儜瀹舵寜浣嶆垨錛圤R錛夌殑鏋氫婦鍊糳elayFreeMemDF錛屽彲浠ュ仠姝嬌鐢ㄥ唴瀛橀噴鏀懼嚱鏁般?br>                濡?afxMemDF  |= delayFreeMemDF;    緇熻紼嬪簭浣跨敤浜?jiǎn)澶氬ぇ鍐呭瓨銆?br>        媯(gè)鏌ュ唴瀛?br>                鑻ユ兂媯(gè)嫻嬫墍鏈夌殑鍐呭瓨鍒嗛厤鎯呭喌鍜岄噴鏀炬儏鍐碉紝鍙涓巆heckAlwaysMemDF鐨勫艱繘琛屾垨鎿嶄綔銆?br>                濡?afxMemDF  |= checkAlwaysMemDF.
                妗嗘灦灝變細(xì)鍦ㄥ垎閰嶅拰閲婃斁鍐呭瓨鏄嫻嬪唴瀛樸?br>        鍐呭瓨緇熻
                DumpStatistics()
               
    杞偍鎵鏈夊璞?br>        DumpAllObjectsSince()錛岃漿鍌ㄦ墍鏈夋硠闇插璞$殑琛屻佸湴鍧銆佸ぇ灝忋?/p>

    AFX杈呭姪鍑芥暟
            AfxDoForAllObjects() 鍜?AfxDoForAllClasses()
        AfxDoForAllObjects()
            涓や釜鍙傛暟錛屼竴涓焊綆變竴涓嚱鏁扮殑鎸囬拡錛屽彟涓涓槸void* 鎸囬拡銆?br>            閬嶅巻鍐呭瓨瀵硅薄閾捐〃錛屽皢浠栦滑浣滀負(fù)CObject鎸囬拡浼犻掔粰鐢ㄦ埛鎻愪緵鐨勫嚱鏁?br>           
        AfxDoForAllClasses()
            鍙亶鍘咰RuntimeClass緇撴瀯

 

 



Euan 2010-03-15 23:05 鍙戣〃璇勮
]]>
銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?3. MFC瀹炵敤綾?/title><link>http://www.shnenglu.com/Euan/archive/2010/03/15/109781.html</link><dc:creator>Euan</dc:creator><author>Euan</author><pubDate>Mon, 15 Mar 2010 15:04:00 GMT</pubDate><guid>http://www.shnenglu.com/Euan/archive/2010/03/15/109781.html</guid><wfw:comment>http://www.shnenglu.com/Euan/comments/109781.html</wfw:comment><comments>http://www.shnenglu.com/Euan/archive/2010/03/15/109781.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Euan/comments/commentRss/109781.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Euan/services/trackbacks/109781.html</trackback:ping><description><![CDATA[<p>2009-9-2 <br>===========================<br>銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?3. MFC瀹炵敤綾?br>===========================<br>    <br>    綾籆String<br>        · Find() 鈥斺?鏌ユ壘瀛愪覆鎴栧瓧絎︺?br>        · FindOneOf( char * ) 鈥斺?鏌ユ壘鍙傛暟瀛楃涓蹭腑鍑虹幇鐨勭涓涓瓧絎?br>        · ReverseFind() 鈥斺?浠庡瓧絎︿覆鐨勫彸绔紑濮嬪悜宸︽煡鎵俱?br>        · Format() 鈥斺?鍙傛暟綾誨悓printf銆?br>                          char name[20] = "Bob"; int age = 21;<br>                          printf( "Hello %s, you are %d years old\n", name, age );<br>                                Hello Bob, you are 21 years old<br>                         %s 琛ㄧず, "鍦ㄨ繖閲屾彃鍏ラ涓弬鏁?涓涓瓧絎︿覆." %d 琛ㄧず絎簩涓弬鏁?涓涓暣鏁?搴旇鏀劇疆鍦ㄩ偅閲? 涓嶅悓鐨?%-codes"琛ㄧず涓嶅悓鐨勫彉閲忕被鍨? 涔熷彲浠ラ檺鍒跺彉閲忕殑闀垮害.<br>                            %c 瀛楃                                            %d 甯︾鍙鋒暣鏁?nbsp;                     %i 甯︾鍙鋒暣鏁?nbsp;                            %e 縐戝璁℃暟娉? 浣跨敤灝忓啓"e" <br>                            %E 縐戝璁℃暟娉? 浣跨敤澶у啓"E"               %f 嫻偣鏁?nbsp;                            %g 浣跨敤%e鎴?f涓緝鐭殑涓涓?<br>                            %G 浣跨敤%E鎴?f涓緝鐭殑涓涓?nbsp;           %o 鍏繘鍒?nbsp;                            %s 涓涓插瓧絎?<br>                            %u 鏃犵鍙鋒暣鏁?nbsp;                                 %x 鏃犵鍙峰崄鍏繘鍒舵暟, 鐢ㄥ皬鍐欏瓧姣?nbsp;                                      %X 鏃犵鍙峰崄鍏繘鍒舵暟, 鐢ㄥぇ鍐欏瓧姣?<br>                            %p 涓涓寚閽?nbsp;                                    %n 鍙傛暟搴旇鏄竴涓寚鍚戜竴涓暣鏁扮殑鎸囬拡<br>                            鎸囧悜鐨勬槸瀛楃鏁版斁緗殑浣嶇疆<br>                             <br>                            涓涓綅浜庝竴涓?鍜屾牸寮忓寲鍛戒護(hù)闂寸殑鏁存暟鎷呭綋鐫涓涓渶灝忓瓧孌靛搴﹁鏄庣,騫朵笖鍔犱笂瓚沖澶氱殑絀烘牸鎴?浣胯緭鍑?guó)檭鲥闀? <br>                            濡傛灉浣犳兂濉厖0,鍦ㄦ渶灝忓瓧孌靛搴﹁鏄庣鍓嶆斁緗?. 浣犲彲浠ヤ嬌鐢ㄤ竴涓簿搴︿慨楗扮,瀹冨彲浠ユ牴鎹嬌鐢ㄧ殑鏍煎紡浠g爜鑰屾湁涓嶅悓鐨勫惈涔? </p> <p>                            鐢?e, %E鍜?%f,綺懼害淇グ絎﹁浣犳寚瀹氭兂瑕佺殑灝忔暟浣嶆暟. 渚嬪, <br>                                %12.6f<br>                            灝嗕細(xì)鑷沖皯鏄劇ず12浣嶆暟瀛?騫跺甫鏈?浣嶅皬鏁扮殑嫻偣鏁? <br>                            鐢?g鍜?%G, 綺懼害淇グ絎﹀喅瀹氭樉紺虹殑鏈夋晥鏁扮殑浣嶆暟鏈澶у? <br>                            鐢?s,綺懼害淇グ絎︾畝鍗曠殑琛ㄧず涓涓渶澶х殑鏈澶ч暱搴? 浠ヨˉ鍏呭彞鐐瑰墠鐨勬渶灝忓瓧孌甸暱搴? <br>    <br>    涓浜涚畝鍗曠被錛?br>        鍊肩殑綾誨瀷                            緇撴瀯                                                 婧愭枃浠?br>        CPoint                              POINT(struct tagPoint)                     afxwin1.inl<br>        CRect                                RECT(struct tagRECT)                       afxwin1.inl, wingdix.cpp<br>        CSize                                 SIZE(struct tagSIZE)                         afxwin1.inl<br>        CTime                               time_t operations                             afx.inl,  timecore.cpp<br>        CTimeSpan                       time_t  math                                     afx.inl,  timecore.cpp<br>        <br>    MFC闆嗗悎綾?br>        鏁扮粍array銆?閾捐〃list 銆?鏄犲皠琛╩ap<br>        <br>        C*Array           *= Byte    /DWord     /Uint(unsigned int)     /Ob(CObject)     /String       /Word<br>        C*List              *= Ob(OCObject* )     /Ptr(void*)    / String                 <br>        CMap*            *=PtrToPtr     /StringToOb     /StringToPtr        /StringToString     /WordToOb       /WordToPtr<br>        <br>        <br>    CFile瀹舵棌錛?MFC瀵規(guī)枃浠剁殑璁塊棶<br>        CFile<br>            · AfxFullPath 鈥斺?灝嗕竴涓枃浠惰礬寰勮漿鍖栨垚緇濆璺緞銆?br>            · AfxGetRoot 鈥斺?瑙f瀽涓涓猆NC(Uniform Nameing Convention)璺緞鎴栦竴涓棫寮忚礬寰勶紝寰楀埌鍗鋒爣鍚嶃?br>            · AfxComparePath 鈥斺?姣旇緝涓や釜璺緞鏄惁涓鏍楓?br>            · AfxGetFileTitle 鈥斺?浠庤礬寰勪腑瑙f瀽鍑烘枃浠跺悕銆?br>            <br>        CStdio File 錛堟敮鎸佹枃浠剁紦鍐詫級(jí)<br>            ReadString()                WriteString()<br>              <br>        CMemFile<br>        <br>        <br>    CException<br>        · CArchiveException 鈥斺?搴忓垪鍖栧紓甯搞?br>        · CDaoException 鈥斺?DAO(鏁版嵁璁塊棶瀵硅薄錛夊紓甯搞?br>        · CDBException 鈥斺?鏁版嵁搴撳紓甯?br>        · CFileException 鈥斺?鏂囦歡寮傚父<br>        · CMemoryException 鈥斺?鍐呭瓨寮傚父<br>        · CNotSupportedException 鈥斺?鏌愪簺鍐呭涓嶆敮鎸?br>        · COleDispatchException 鈥斺?OLE鍒嗗彂錛堣嚜鍔ㄥ寲錛夊紓甯?br>        · COleException 鈥斺?OLE寮傚父<br>        · CResourceException 鈥斺?Windows璧勬簮闂<br>        · CUserException 鈥斺?鐢ㄦ埛浜х敓鐨勫紓甯?br>            GetErrorMessage()  榪斿洖涓涓紦鍐插尯錛岀紦鍐插尯鍐呭瓨瀛樻斁鐫鎻忚堪寮傚父鐨勫瓧絎︿覆錛?br>            ReportError()  鐢ㄤ竴涓猈indows娑堟伅妗嗘樉紺哄紓甯鎬俊鎭瓧絎︿覆</p> <p> </p> <img src ="http://www.shnenglu.com/Euan/aggbug/109781.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Euan/" target="_blank">Euan</a> 2010-03-15 23:04 <a href="http://www.shnenglu.com/Euan/archive/2010/03/15/109781.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?2. MFC鍩虹http://www.shnenglu.com/Euan/archive/2010/03/15/109779.htmlEuanEuanMon, 15 Mar 2010 15:00:00 GMThttp://www.shnenglu.com/Euan/archive/2010/03/15/109779.htmlhttp://www.shnenglu.com/Euan/comments/109779.htmlhttp://www.shnenglu.com/Euan/archive/2010/03/15/109779.html#Feedback0http://www.shnenglu.com/Euan/comments/commentRss/109779.htmlhttp://www.shnenglu.com/Euan/services/trackbacks/109779.html2009-9-2

===========================
銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?2. MFC鍩虹
===========================

    鍩烘湰鐨凪FC搴旂敤紼嬪簭緇勪歡錛?br>        CWinApp錛氬簲鐢ㄧ▼搴忓璞?br>            · 淇濆瓨浜?jiǎn)涓浜涗紶閫掔粰WinMain()鐨勫懡浠よ鍙傛暟錛屽寘鎷綋鍓嶅疄渚嬬殑鍙ユ焺錛坢_hInstance錛夈佸墠涓涓疄渚嬬殑鍙ユ焺錛坢_hPrevInstance錛夈佸懡浠よ鍙傛暟錛坢_lpCmdLine錛変互鍙?qiáng)鏄窘C虹獥鍙f爣蹇楋紙m_nCmdShow錛夈?br>            · CWinApp鍦╩_pszAppName涓繚瀛樹簡(jiǎn)搴旂敤紼嬪簭鍚嶅瓧鐨勬嫹璐濄?br>            · m_pszExeName(鎸囧悜鍙墽琛屾枃浠跺悕瀛楃殑鎸囬拡)銆乵_pszHelpFilePath(鎸囧悜搴旂敤紼嬪簭甯姪鏂囦歡璺緞鐨勬寚閽?銆佷互鍙?qiáng)鎸囧悜搴旂敤绋嬪簭閰嵕|枃浠訛紙profile錛夊悕瀛楃殑鎸囬拡
            · CCommandLineInfo緇撴瀯鐢ㄦ潵淇濆瓨鍛戒護(hù)琛屽弬鏁?br>            · MFC涓紝瀹炰緥鐨勫垵濮嬪寲鏈塁WinApp::InitInstance()瀹屾垚銆?br>            · 鍏抽棴紼嬪簭鍜屾竻闄よ祫婧愮敱ExitInstance()瀹屾垚銆?br>            · 璋冪敤CWinApp::Run()浼?xì)鍚姩鏍囧噯鐨凣etMessage()...DispatchMessage()寰幆
            · 姣忓綋娑堟伅闃熷垪涓虹┖鏃訛紝CWinApp::Run()浼?xì)璋冪敤OnIdle()銆?br>           
        CWnd錛氱獥鍙e熀綾?br>            鍖呰Windows API
                m_hWnd鎴愬憳鍙橀噺琛ㄧずAPI綰х殑紿楀彛鍙ユ焺錛圚WND錛夈?br>               
        灝嗙獥鍙e彞鏌勮漿鍖栨垚紿楀彛瀵硅薄
            CHandleMap錛氭病鏈夋枃妗h鏄庣殑紿楀彛鍙ユ焺鏄犲皠琛ㄧ被
                灝嗙獥鍙e彞鏌勬槧灝勬垚MFC鐨刉indows瀵硅薄銆?br>                CMapPtrToPtr m_permanentMap: 琛ㄧず姘鎬箙鏄犲皠琛紝淇濆瓨紼嬪簭榪愯榪囩▼涓彞鏌?瀵硅薄鏄犲皠琛ㄣ?br>                    姣忓綋鍒涘緩涓涓狢Wnd鐨勬淳鐢熺被錛孧FC閮戒細(xì)鍐嶆案涔呯洰褰曚笅鎻掑叆涓鏉℃槧灝勮褰曘傝皟鐢–Wnd::OnNcDestroy()鏃跺氨浼?xì)浠庢版箙鐩綍涓嬪垹闄や竴鏉℃槧灝勮褰曘?br>                CMapPtrToPtr m_temporaryMap:琛ㄧず涓存椂鏄犲皠琛紝浠呭湪娑堟伅瀛樺湪鐨勮繃紼嬩腑瀛樺湪銆?br>            闄Wnd媧劇敓瀵硅薄涓嶩WND涔嬮棿鐨勬槧灝勫錛岃繕鏈?涓粠MFC綾誨埌鏈湴紿楀彛鍙ユ焺鐨勬槧灝勩?br>            AFX_MODULE_THREAD_STATE緇撴瀯
                · m_pmapHWND:  紿楀彛鍙ユ焺涓嶤Wnd瀵硅薄涔嬮棿鐨勬槧灝勮〃
                · m_pmapHMENU:  鑿滃崟鍙ユ焺鍒癈Menu瀵硅薄鐨勬槧灝勮〃銆?br>                · m_pmapHDC:  璁懼鐜鍙ユ焺鍒癈DC瀵硅薄鐨勬槧灝勮〃銆?br>                · m_pmapHGDIOBJ:   GDI瀵硅薄鍙ユ焺鍒癈GDI瀵硅薄鐨勬槧灝勮〃銆?br>                · m_pmapHIMAGELIST:   鍥捐薄閾捐〃鍙ユ焺鍒癈ImageList瀵硅薄鐨勬槧灝勮〃
            姣忎釜鍙備笌浜?jiǎn)鍙ユ焺鏄牉畡鏂规鐨凪FC綾婚兘鍖呮嫭涓涓狥romHandle鍑芥暟錛岃鍑芥暟灝咰HandleMap::FromHandle()鍖呰浜?jiǎn)钃v鏉ワ紝CHandleMap::FromHandle()瀹屾垚浜?jiǎn)鏌ユ壘锛岒q跺皢涓涓湰鍦板彞鏌勪笌涓涓狢++瀵硅薄鐩稿叧鑱斻侰Wnd::FromHandle()浼?xì)杩斿洖涓涓傚綋綾誨瀷鐨勫璞°?br>       
        鍏寵仈紿楀彛鍙ユ焺鍜屽垎紱葷獥鍙e彞鏌?br>            CWnd::Attach()  灝咰Wnd::m_hWnd璧嬪間負(fù)宸叉湁鐨勭獥鍙e彞鏌勶紝騫跺皢榪欓槦鍏崇郴瀛樻斁鍦∕FC鐨勬案涔呯獥鍙e彞鏌勬槧灝勮〃涓?br>            CWnd::Detach()  灝嗙獥鍙e叧緋誨拰CWnd媧劇敓瀵硅薄涔嬮棿鐨勫叧緋諱粠紿楀彛鍙ユ焺鏄犲皠琛ㄦ眹鎬誨垹闄わ紝灝咰Wnd::m_hWnd鐨勫艱涓篘ULL.
   
    MFC鐘舵佷俊鎭?br>        AFX_MODULE_STATE:娌℃湁鏂囨。璇存槑鐨勭姸鎬佷俊鎭?br>             · m_pCurrentWinApp鈥斺?涓涓焊綆盋WinApp鐨勬寚閽?br>             · m_hCurrentInstanceHandle 鈥斺?璇ユā鍧楃殑瀹炰緥鍙ユ焺
             · m_hCurrentResourceHandel 鈥斺?浠h〃淇濆瓨浜?jiǎn)妯″潡璧勬簮鐨勫疄渚嬪彞鏌?br>             · m_lpszCurrentAppName 鈥斺?鎸囧悜搴旂敤紼嬪簭鍚嶇О鐨勬寚閽?br>             · m_bDLL 鈥斺?琛ㄧず妯″潡鏄竴涓姩鎬侀摼鎺ュ簱榪樻槸涓涓彲鎵ц鏂囦歡
             · m_classList鈥斺?鎸囧悜搴旂敤紼嬪簭鐨凜RuntimeClass緇撴瀯閾捐〃涓殑絎竴涓繍琛屾椂綾葷殑鎸囬拡銆?br>             · m_factoryList 鈥斺?綰哥搴旂敤紼嬪簭鐨?COleObjectFactory緇撴瀯閾捐〃涓殑絎竴涓繍琛屾椂綾葷殑鎸囬拡
             · m_nObjectCount鈥斺?OLE鏈嶅姟鍣ㄧ殑寮曠敤璁℃暟錛岃〃紺烘湇鍔″櫒鏄惁鏈夋湭瀹屾垚鐨凜OM瀵硅薄
             · m_bUserCtrl 鈥斺?琛ㄧず鎷ユ姢鏄惁鍦ㄤ嬌鐢∣LE鏈嶅姟鍣ㄧ殑鏍囧織銆?br>             · m_szUnregisterList[4096]鈥斺旂淮鎶や竴涓敞鍐屼簡(jiǎn)鐨勭獥鍙g被鐨勯摼琛紝浠ヤ究緇撴潫鏃剁殑娉ㄩ攢
             · m_pfnAfxWndProc 鈥斺?鎸囧悜MFC鐨勬爣鍑嗙獥鍙h繃紼?br>             · m_fRegisteredClasses鈥斺旇〃紺哄摢浜汳FC紿楀彛綾誨凡緇忔敞鍐屼簡(jiǎn)銆?br>                澶氭暟鎴愬憳鍙互閫氳繃綾諱技AfxGetInstanceHandle()鏉ヨ闂?br>   
    MFC瀵笹DI鐨勬敮鎸?br>        CDC綾誨唴閮?br>            HDC鎴愬憳鍙橀噺錛岃〃紺轟竴涓疄闄呰澶囩幆澧冪殑鍙ユ焺銆?br>            m_hAttribDC錛?br>            CDC鏋愭瀯鍑芥暟璋冪敤DeleteDC()銆?br>        CDC媧劇敓綾?nbsp;      
        · CPaintDC 鈥斺?CPaintDC鐨勬瀯閫犲嚱鏁伴渶瑕佷竴涓寚鍚慍Wnd鐨勬寚閽堬紝浠栦細(xì)璋冪敤BeginPaint()鑰屽垱寤轟竴涓澶囩幆澧冿紝鐒跺悗鍐欏叆璁懼鐜鏄犲皠琛ㄣ侰PaintDC鐨勬瀽鏋勫嚱鏁版槸EndPaint()銆?br>        · CWindowDC 鈥斺?琛ㄧず紿楀彛鍐呯殑鏁翠釜灞忓箷鍖哄煙錛堝寘鎷敤鎴峰尯鍜屾錛夈侰WindowDC鐨勬瀯閫犲嚱鏁伴渶瑕佷竴涓寚鍚慍Wnd鐨勬寚閽堬紝璋冪敤GetWindowDC()鏉ヤ負(fù)鏁翠釜紿楀彛鍒涘緩涓涓澶囩幆澧冦侰WindowDC鐨勬瀽鏋勫嚱鏁版槸ReleaseDC()銆?br>        · CClientDC鈥斺旂敤鎴峰尯銆傛瀯閫犲嚱鏁頒篃闇瑕佷竴涓寚鍚慍Wnd鐨勬寚閽堛侴etClientDC()銆丷eleaseDC().
        · CMetaFileDC 鈥斺?Windows鐨勫厓鏂囦歡鏈変竴涓狦DI鍛戒護(hù)搴忓垪錛屽埄鐢ㄨ繖涓懡浠ゅ簭鍒楀彲浠ラ噸鏂扮敾鍑哄浘鍍忋傚垱寤轟竴涓厓鏂囦歡DC錛氭瀯閫燙MetaFileDC錛堝湪鏍堜腑鍒嗛厤涓涓垨澹版槑涓涓級(jí)錛岀劧鍚庤皟鐢–MetaFile::Create()鏉ュ垱寤轟竴涓厓鏂囦歡騫跺垵濮嬪寲CMetaFile鐨勬垚鍛樺彉閲忥紝鏋愭瀯鍑芥暟錛欴eleteMetaFile錛堬級(jí)銆?br>       
    鍥懼艦瀵硅薄
        Device context 淇濆瓨浜?jiǎn)鍦╓indows緇樼敾鎵闇瑕佺殑鎵鏈変俊鎭紝鍖呮嫭鏄犲皠妯″紡絳夌瓑銆傝繕淇濆瓨浜?jiǎn)鍏充簬鍦ㄨ畱证囦笂缁樼斃L墍浣跨敤鐨勫伐鍏風(fēng)殑淇℃伅銆?br>        CGDIObject
        鎵鏈塆DI瀵硅薄鐨勫熀綾匯俶_hObject鏄疓DI瀵硅薄鐨勫彞鏌勩?br>        CPen
        CBrush
        CFont
        CBitmap
        Cpalette
        CRgn



Euan 2010-03-15 23:00 鍙戣〃璇勮
]]>
銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?1. 姒傚康鎬葷粨http://www.shnenglu.com/Euan/archive/2010/03/15/109778.htmlEuanEuanMon, 15 Mar 2010 14:59:00 GMThttp://www.shnenglu.com/Euan/archive/2010/03/15/109778.htmlhttp://www.shnenglu.com/Euan/comments/109778.htmlhttp://www.shnenglu.com/Euan/archive/2010/03/15/109778.html#Feedback0http://www.shnenglu.com/Euan/comments/commentRss/109778.htmlhttp://www.shnenglu.com/Euan/services/trackbacks/109778.html2009-9-1

=======================
銆婃繁鍏ヨВ鏋怣FC銆嬬瑪璁?1. 姒傚康鎬葷粨
=======================

緙╁啓錛?br>    API:    Application Programming Interface
    DLL:    Dynamic Link Library
    GUI:    Graphics  User Interface
    MDI:    Multiple  Document Interface
    MFC:    Microsoft Function Class
    OLE:     Object  Linking&Embedded
    OWL:    Object  Windows  Library
    SDK:     Software Development Kit
    SDI:      Single  Document Interface
    UI:        User Interface
    WinApp:     Windows Application
   
   
    control               鎺т歡
    notification        閫氱煡淇℃伅錛堝彂鐢熶簬鎺т歡錛?br>    preemptive        寮哄埗鎬с佹姠鍗犲紡銆佷紭鍏堢駭
    process              榪涚▼
   
    Constructor   Destructor  Encapsulation灝佽    Inheritance緇ф壙   Polymorphism澶氭?nbsp; 
   
   
    鏁版嵁綾誨瀷錛?br>    BSTR                32-bit 瀛楃鎸囬拡
    BYTE                8-bit 鏁存暟錛屾湭甯︽璐熷彿
    COLORREF       32-bit 鏁板鹼紝浠h〃涓涓鑹插?br>    DWORD           32-bit 鏁存暟錛屾湭甯︽璐熷彿
    LONG               32-bit 鏁存暟錛屽甫姝h礋鍙?br>    LPARAM           32-bit 鏁板鹼紝浣滀負(fù)紿楀彛鍑芥暟鎴?callback 鍑芥暟鐨勪竴涓弬鏁般?br>    LPCSTR             32-bit 鎸囬拡錛屾寚鍚戜竴涓父鏁板瓧絎︿覆
    LPSTR               32-bit 鎸囬拡錛屾寚鍚戜竴涓瓧絎︿覆
    LPCTSTR           32-bit 鎸囬拡錛屾寚鍚戜竴涓父鏁板瓧絎︿覆銆傛瀛楃涓插彲縐繪鍒?Unicode 鍜孌BCS錛堝弻瀛楄妭瀛楅泦錛?br>    LPTSTR             32-bit 鎸囬拡錛屾寚鍚戜竴涓瓧絎︿覆銆傛瀛楃涓插彲縐繪鍒癠nicode鍜孌BCS
    LPVOID            32-bit 鎸囬拡錛屾寚鍚戜竴涓湭鎸囧畾綾誨瀷鐨勬暟鎹?br>    LPRESULT         32-bit 鏁板鹼紝浣滀負(fù)紿楀彛鍑芥暟鎴栬?callback 鍑芥暟鐨勮繑鍥炲?br>    WNDPROC       32-bit 鎸囬拡錛屾寚鍚戜竴涓獥鍙e嚱鏁?br>    WORD              16-bit 鏁存暟錛屾湭甯︽璐熷彿銆?br>    WPARAM          紿楀彛鍑芥暟鐨刢allback鍑芥暟鐨勪竴涓弬鏁幫紝win32涓槸32bits
   
   
   
    WINAPI綾?br>        浠諱綍浠嶤CmdTarget媧劇敓鐨勭被閮芥湁涓涓笌涔嬬浉鍏寵仈鐨勬秷鎭槧灝勮〃錛屽畠?yōu)畣鍛戒护浼犻掔粰浠嶤CmdTarget媧劇敓鐨勭被銆?br>        CCmdUI綾繪彁渚涗簡(jiǎn)鏇存柊鐢ㄦ埛鐣岄潰瀵硅薄錛堝鑿滃崟鎴栧閫夋鎺т歡錛夌姸鎬佺殑鍑芥暟銆傚湪鍗曞嚮鑿滃崟涔嬪悗浠ュ強(qiáng)鑿滃崟欏規(guī)樉紺轟箣鍓嶏紝MFC浼?xì)缁欏簲鐢ńE嬪簭涓殑鍛戒護(hù)鐩爣鍙戦佷竴涓懡浠ゆ洿鏂版秷鎭傚鏋滃湪鍛戒護(hù)鐩爣瀵硅薄鐨勬秷鎭槧灝勮〃涓湁榪欎釜鏇存柊娑堟伅鐨勫唴瀹癸紝MFC浼?xì)缁機(jī)CmdUI瀵硅薄浼犻掍竴涓唬琛ㄨ彍鍗曢」鐨勬寚閽堬紝涔熷氨鏄懡浠ょ洰鏍囧璞℃墍鏇存柊鐨勫唴瀹廣?br>        CWinThread浠h〃鍦∕FC紼嬪簭鍐呮墽琛岀殑綰跨▼銆?br>      
    鍚屾瀵硅薄綾?br>        CSyncObject 鈥斺斿悓姝ュ璞$被鐨勫熀綾匯?br>        CCriticalSection鈥斺斾竴涓悓姝ョ被錛屽畠鍙厑璁稿崟涓繘紼嬩腑鐨勪竴涓嚎紼嬭闂竴涓璞°?br>        CSemaphore鈥斺斾竴涓悓姝ョ被錛屽畠鍙厑璁鎬竴涓璞℃湁涓涓埌鏌愪釜鎸囧畾鐨勪箣闂翠釜鏁扮殑鍚屾璁塊棶銆?br>        CMutex鈥斺斾竴涓悓姝ョ被錛屽畠鍙厑璁鎬換浣曟暟鐩繘紼嬩腑鐨勪竴涓嚎紼嬭闂璞°?br>        CEvent鈥斺斾竴涓悓姝ョ被錛屽綋鏌愪釜鏃墮棿鍙戠敓鏃訛紝瀹冧細(xì)閫氱煡鏌愪釜搴旂敤紼嬪簭銆?br>        CSingleLock鈥斺旂嚎紼嬪畨鍏ㄧ殑綾葷殑鎴愬憳鍑芥暟涓敤鏉ラ攣浣忎竴涓悓姝ュ璞$殑瀵硅薄銆?br>        CMultiLock鈥斺旂嚎紼嬪畨鍏ㄧ殑綾葷殑鎴愬憳鍑芥暟涓敤鏉ラ攣浣忎竴涓垨鏇村涓悓姝ュ璞$殑瀵硅薄錛岄攣浣忕殑瀵硅薄鏉ヨ嚜涓涓悓姝ュ璞℃暟緇勩?br>   
    妗嗘灦紿楀彛
        CFrameWnd灝辨槸SDI搴旂敤紼嬪簭鐨勪富紿楀彛鐨勫熀綾匯?br>        CMDIFrameWnd涓篗DI搴旂敤紼嬪簭鎻愪緵浜?jiǎn)涓绘鏋督H楀彛錛孋MDIChildWnd涓篗DI搴旂敤紼嬪簭鎻愪緵浜?jiǎn)瀛惤H楀彛銆?br>   
    瀵硅瘽妗?br>        CFileDialog鈥斺斾粠鏌愪釜鐩綍涓嬮夊畾涓涓枃浠?br>        CColorDialog鈥斺旈夋嫨涓涓寚瀹氱殑棰滆壊
        CFontDialog鈥斺旈夋嫨涓縐嶅瓧浣撱?br>        CPrintDialog鈥斺斿鐞嗘墦鍗版満鐨勫畨瑁呭拰鎵撳嵃
        CFindReplaceDialog鈥斺斾負(fù)鏌ユ壘鍜屾浛鎹㈤夋嫨鏂囨湰
        瀵硅瘽妗嗘暟鎹殑浜ゆ崲鍜岄獙璇侊紙DDX/DDV)閫氳繃CDataExchange綾誨疄鐜般?br>   
    灞炴ч〉錛欳PropertySheet 鍜?CPropertyPage
   
        CAnimateCtrl鈥斺旀挱鏀懼姩鐢繪帶浠?br>        CDragListBox鈥斺擟ListBox鐨勬淳鐢熺被錛屼綘鍙互鍦ㄨ繖涓垪琛ㄦ涓嫋鍔ㄥ拰鍘繪帀閫夐」銆?br>        CHeaderCtrl鈥斺斿拰CListCtrl涓璧鋒潵鏄劇ず鏌辯姸淇℃伅
        CHotKeyCtrl鈥斺斾負(fù)浠庣敤鎴瘋幏寰楅敭搴忓垪鎻愪緵鎺ュ彛錛圓lt-Backspace-Delete).
        CImageList鈥斺斾竴涓狢Object鐨勬淳鐢熺被錛屽畠涓轟綘緇存姢鍥懼儚闆嗗悎銆?br>        CListCtrl鈥斺旀樉紺轟竴涓摼琛ㄩ」鐨勫浘褰㈤摼琛紙綾諱技Explorer錛夈?br>        CProgressCtrl鈥斺旀樉紺轟竴涓繘搴︽潯
        CRichEditCtrl鈥斺斾竴涓赴瀵岀殑緙栬緫鎺т歡錛屽畠鐞嗚В涓浜汻TF鏍煎紡鐨勬蹇碉紝鑰屼笖鍏佽浣跨敤澶氬瓧浣擄紝澶氶鑹茬瓑銆?br>        CSliderCtrl鈥斺斾竴涓湪鏌愪釜鍊艱寖鍥村唴榪涜閫夋嫨鐨勬粴鍔ㄦ潯銆?br>        CSpinButtonCtrl鈥斺斿井璋冩帶鍒墮」銆?br>        CStatusBarCtrl鈥斺旂姸鎬佹爮
        CTabCtrl鈥斺斿睘鎬ч〉鎺т歡
        CToolBarCtrl鈥斺斿疄鐜頒竴涓伐鍏鋒爮
        CToolTipCtrl鈥斺旀彁渚涘伐鍏鋒彁紺?br>        CTreeCtrl鈥斺斾竴涓被浼糆xplorer鐨勬爲(wèi)鎺т歡   
   
    GDI鏀寔鍜岀粯鐢誨璞?nbsp;  
        CDC綾昏〃紺鴻澶囩幆澧冦?br>        · CPaintDC鈥斺斿皝瑁呬簡(jiǎn)澶勭悊WM_PAINT娑堟伅鏃舵墍瑕佷嬌鐢ㄧ殑BeginPaint()鍜孍ndPaint()涓や釜璋冪敤銆?br>        · CWindowDC鈥斺斿皝瑁呬簡(jiǎn)涓庢暣涓獥鍙g浉鍏崇殑璁懼鐜
        · CClientDC鈥斺斿皝瑁呬簡(jiǎn)涓庣獥鍙d腑瀹㈡埛鍖烘湁鍏崇殑璁懼鐜
        · CMetaFileDC鈥斺斾負(fù)鍏冩枃浠訛紙metafile錛夊皝瑁呬簡(jiǎn)璁懼鐜銆?br>        · CFont銆丆Pen銆丆Brush銆丆Bitmap銆丆Palette鍜孋Rgn鍧囦粠CGdiObject綾諱腑媧劇敓銆?br>   
    搴旂敤紼嬪簭妗嗘灦綾?br>        鏂囨。瑙嗗浘緇撴瀯
            · CDocTemplage銆丆SingleDocTemplate鍜孋MultiDocTemplage鈥斺旀枃妗fā鏉挎槸灝嗘枃妗e拰鍏惰鍥劇矘鍚堝湪涓璧風(fēng)殑綺樺悎鍓?br>            · CDocument鈥斺斿鐞嗗簲鐢ㄧ▼搴忔眹鎬繪暟鎹殑綾匯?br>            · CView鈥斺斾唬琛ㄥ湪灞忓箷涓婄湅鍒扮殑紿楀彛鐨勫鎴峰尯銆?nbsp;  
        鎺т歡瑙嗗浘
            · CEditView
            · CListView
            · CRichEditView
            · CTreeView
        鍒嗗壊紿楀彛錛圫plitter Window錛?br>            涓ょ鍒嗗壊紿楀彛錛氶潤(rùn)鎬併佸姩鎬?br>            闈?rùn)鎬侊細(xì)棰勫畾涔夌獥鏍兼暟鐩紝鏁扮洰鍜屾帓鍒椾笉鑳戒慨鏀癸紝姣忎釜紿楁牸鍙互鏄劇ず涓嶅悓綾誨瀷鐨勮鍥俱?br>            鍔ㄦ侊細(xì)姣忎釜紿楁牸蹇呴』鏄劇ず鍚屼竴綾誨瀷鐨勮鍥俱?br>           
    鎿嶄綔緋葷粺鎵╁睍
        OLE鏀寔錛歄LE鏂囨。
            鍒涘緩涓涓敮鎸丱LE澶嶅悎鏂囨。鐨勬枃妗f椂闇瑕佷嬌鐢ㄧ殑綾匯?br>            · CDocItem鈥斺擬FC鐨凜OleClientItem鍜孋OleServerItem綾葷殑鍩虹被銆?br>            · COleServerItem鈥斺旇〃紺轟笌宓屽叆鎴栭摼鎺ョ殑OLE欏圭殑閾炬帴鐨勬湇鍔″櫒绔?br>            · COleClientItem鈥斺旇〃紺轟笌宓屽叆鎴栭摼鎺ョ殑OLE欏圭殑榪炴帴鐨勫鍣紙container錛夌銆?br>            · COleDocument鈥斺旀槸MFC瀵瑰鍚堟枃妗f敮鎸佺殑鏍稿績(jī)銆傞櫎緇存姢搴旂敤紼嬪簭鐨勬湰鍦版暟鎹箣澶栵紝榪樼淮鎶や簡(jiǎn)涓涓狢DocItem瀵硅薄閾捐〃
            · COleLinkingDoc鈥斺斿寘鍚竴浜涢摼鎺ワ紝榪欎簺閾炬帴鎸囧悜宓屽叆鍦ㄥ叾浠栧湴鏂圭殑欏廣?br>            · COleServerDoc鈥斺旂敱絎﹀悎鏂囨。涓悎浣撶殑鏈嶅姟绔簲鐢ㄧ▼搴忎嬌鐢ㄣ?br>            · COleIPFrameWnd鈥斺斾負(fù)鎴愪負(fù)澶嶅悎鏂囨。鏈嶅姟鍣紝搴旂敤紼嬪簭鏈変袱縐嶄笉鍚岀殑妗嗘灦紿楀彛 1銆侀氬父鐨勬鏋剁獥鍙?2銆佸簲鐢ㄧ▼搴忓湪鎭板綋浣嶇疆鏄劇ず鏃舵墍浣跨敤鐨勬鏋剁獥鍙o紙鐢ㄦ埛璋冪敤涓涓鍚堟枃妗e唴閮ㄧ殑鍙鍖栫紪杈戞搷浣滄椂錛夈侰OleIPFrameWnd灝佽浜?jiǎn)绗﹀悎鏂囨。鏈嶅姟鍣ㄧ殑閮ㄥ垎鍔熻兘銆?br>        OLE鏀寔錛氱被鍘傦紙class factory錛?br>            姣忎釜瑕佸澶栨毚闇插熷彛鐨凮LE瀵硅薄閮借鏈変竴涓被鍘傘傜被鍘備綅浜嶰LE鏈嶅姟鍣ㄤ腑錛屼細(xì)鍒涘緩涓涓狾LE瀵硅薄鐨勫疄渚嬫潵浠h〃鏈嶅姟鍣ㄣ?br>            · COleObjectFactory鈥斺斾負(fù)闇瑕佺被鍘傦紝浣嗗張涓嶆槸闈㈠悜鏂囨。鐨凪FC搴旂敤紼嬪簭瀹炵幇綾誨巶銆?br>            · COleTemplateServer鈥斺斾粠COleObjectFactory鐩存帴媧劇敓鍑烘潵鐨勭被錛屼負(fù)闈㈠悜鏂囨。鐨勩佽兘浣跨敤OLE鐨凪FC搴旂敤紼嬪簭瀹炵幇綾誨巶銆?br>        OLE鏀寔錛氳嚜鍔ㄥ寲
        OLE鏀寔錛氱粺涓鏁版嵁浼犺緭
            OLE鏁版嵁浼犺緭鐢變換浣曞疄鐜頒簡(jiǎn)IDataObject鎺ュ彛鐨勫璞″畬鎴愩?br>            · COleDataSource鈥斺斿畬鎴愬垵濮嬪寲錛屽彲浠ョ敤浜庡壀璐存澘錛坈lip-board錛変紶杈擄紝涔熷彲浠ョ敤浜庢嫋鏀撅紙drag-and-drop)浼犺緭銆?br>            · COleDataObject鈥斺旀暟鎹紶杈撶殑鍙︿竴绔紝鐩殑鍦幫紝閫氬父浣跨敤COleDataObject琛ㄧず銆?br>            · COleDropSource鈥斺斿畾鍒?#8220;鎷栨斁”鎿嶄綔鏃舵湁鐢ㄣ?br>            · COleDropTarget鈥斺旀瘡褰撳垱寤轟竴涓帴鍙楁嫋鏀炬暟鎹殑紿楀彛鎰熷叴瓚f椂錛?br>        OLE鏀寔錛歄LE鎺т歡
            · COleControl鈥斺斾粠CWnd媧劇敓錛屾槸OLE鎺т歡鐨勫熀綾匯?br>            · COlePropertyPage鈥斺斾粠Dialog媧劇敓錛岀敤浜庝慨鏀規(guī)帶浠剁殑灞炴с?br>            · COleControlModule鈥斺斾粠CWinApp媧劇敓錛屾槸淇濇寔OLE絀洪棿鐨勫姩鎬侀摼鎺ュ簱錛坉ynamic link library錛夌殑鍩虹被銆傝礋璐f墽琛屽垵濮嬪寲鍜孫LE鎺т歡鐗規(guī)湁鐨勫悇縐嶄換鍔°?br>            · COleObjectFactoryEx鈥斺旀墿灞曚簡(jiǎn)COleClassFactory銆?br>            · COleConnectionPoint鈥斺斾粠CCmdTarget媧劇敓錛屼唬琛ㄥ埌鍏朵粬OLE瀵硅薄鐨勮緭鍑烘帴鍙o紝鐢ㄤ簬浜嬩歡瑙﹀彂鍜屽悜瀹瑰櫒鍙戝嚭淇敼閫氱煡銆?br>            · CPropExchange鈥斺斿悓鐢ㄤ簬鏍囧噯鐨凞DX/DDV鐨凜DataExchange綾諱技錛屼負(fù)灞炴т氦鎹㈠緩绔嬬幆澧冿紝騫跺湪鎺т歡涓庡鍣ㄤ箣闂村府鍔╀氦鎹㈠睘鎬с?br>            · CFontHolder鈥斺斿皝瑁呬簡(jiǎn)Windows鐨勫瓧浣撶被銆傚疄鐜頒簡(jiǎn)OLE鐨処Font鎺ュ彛錛岀敤浜嶧ont鐨勫父澶囧睘鎬?銆?br>            · CPictureHolder鈥斺斿疄鐜頒簡(jiǎn)“鍥懼儚灞炴?#8221;銆備互澶氭佺殑鏂瑰紡灝佽浜?jiǎn)涓涓綅鍥俱佸浘鏍囨垨鍏冩枃浠躲?br>           
        ODBC鏀寔
            · CDatabase鈥斺斿皝瑁呬簡(jiǎn)瀵規(guī)暟鎹簮鐨勮繛鎺ヨ錛岄氳繃瀹冨彲浠ュ鏁版嵁婧愯繘琛屾搷浣溿?br>            · CRecordset鈥斺斿皝瑁呬粠鏁版嵁婧愪腑閫夊嚭鐨勮褰曘傝褰曢泦鍏佽浠庤褰曞埌璁板綍鐨勬粴鍔紝鏇存柊璁板綍錛屼嬌鐢ㄨ繃婊ゅ櫒閫夋嫨璁板綍錛屾帓搴忋?br>            · CFieldExchange鈥斺旀彁渚涚幆澧冧俊鎭潵鏀寔RFX錛圧ecord Field Exchange錛岃褰曞煙浜ゆ崲錛夈俁FX浼?xì)鍐嶈褰曢泦瀵硅薄鐨勫煙鏁版嵁鎴愬憳浠ュ強(qiáng)鍙傛暟鏁版嵁鎴愬憳涓庢暟鎹簮鐨勫搷搴旂殑閾捐〃涔嬮棿浜ゆ崲鏁版嵁銆?br>            · CLongBinary鈥斺斿皝瑁呬簡(jiǎn)涓涓彞鏌勶紝浠ヤ究瀛樺偍澶х殑浜岃繘鍒跺璞°備富瑕佺敤浜庣鐞嗗瓨鍌ㄤ簬鏁版嵁搴撹〃涓殑澶ф暟鎹璞°?br>            · CRecordView鈥斺旀彁渚涗竴涓繛鎺ュ埌璁板綍闆嗗璞$殑紿椾綋瑙嗗浘銆侱DX鏈哄埗璐熻矗鍦ㄨ褰曢泦鍚堣褰曡鍥劇殑鎺т歡涔嬮棿浜ゆ崲鏁版嵁銆?br>           
        DAO鏀寔錛圖ata Access Object錛屾暟鎹闂璞★級(jí)
            · CDaoWorkspace鈥斺旂鐞嗗懡鍚嶇殑銆佹湁瀵嗙爜淇濇姢鐨勬暟鎹簱浼?xì)璇濄?br>            · CDaoDatabase鈥斺旇繛鎺ュ埌鏌愪釜鏁版嵁搴撲笂錛屽彲閫氳繃瀹冭闂暟鎹簱銆?br>            · CDaoRecordset鈥斺斾粠鏁版嵁婧愪腑閫夊嚭鐨勮褰曢泦銆?br>            · CDaoRecordView鈥斺斿湪鎺т歡涓樉紺烘暟鎹簱璁板綍銆?br>            · CDaoQueryDef鈥斺斾竴涓煡璇㈠畾涔夛紝閫氬父瀛樻斁鍦ㄦ暟鎹簱閲屻?br>            · CDaoTableDef鈥斺斾竴涓熀琛紙base table錛夋垨闄勫姞琛紙attached table錛夌殑瀛樺偍瀹氫箟銆?br>            · CDaoException鈥斺擠AO綾諱駭鐢熺殑寮傚父鎯呭喌銆?br>            · CDaoFieldExchange鈥斺旀敮鎸佺敱DAO鏁版嵁搴撶被浣跨敤鐨凞AO璁板綍鍩熶氦鎹緥紼嬨?br>



Euan 2010-03-15 22:59 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            在线一区日本视频| 国产日韩专区| 亚洲神马久久| 在线视频欧美日韩| 国产精品久久久久久福利一牛影视| 99天天综合性| 亚洲视频一区二区| 国产嫩草影院久久久久| 久久免费国产精品| 欧美xart系列高清| 亚洲一区观看| 久久精品成人欧美大片古装| 在线色欧美三级视频| 最新国产精品拍自在线播放| 欧美日韩久久久久久| 性高湖久久久久久久久| 久久久精品午夜少妇| 亚洲精品社区| 欧美一区二区三区在线| 99re热精品| 亚洲欧美不卡| 亚洲精品国产精品国自产在线 | 老牛影视一区二区三区| 久久资源在线| 亚洲男女自偷自拍图片另类| 久久精品国产一区二区三区| 宅男噜噜噜66一区二区| 亚洲人成在线播放| 亚洲免费观看高清完整版在线观看熊| 午夜精品久久久久久久99黑人| 欧美一级网站| 在线午夜精品| 久久综合综合久久综合| 亚洲欧美日韩视频二区| 久久夜色精品| 欧美一区二区三区日韩| 欧美高清视频在线| 久久综合伊人77777尤物| 欧美视频日韩视频在线观看| 免费成人你懂的| 国产欧美日韩不卡免费| 亚洲另类在线一区| 亚洲激情在线激情| 欧美在线视频一区二区三区| 中文欧美日韩| 欧美不卡在线| 欧美岛国激情| 国内精品久久久久久久影视蜜臀| 99国产精品99久久久久久粉嫩| 在线观看一区视频| 久久精品二区| 久久婷婷国产综合精品青草| 国产精品久久久久久一区二区三区 | 久久综合伊人77777蜜臀| 久久久久国产精品人| 国产精品magnet| 夜夜嗨av一区二区三区四区| 亚洲二区精品| 免费成人黄色片| 欧美成人精品| 亚洲福利精品| 模特精品裸拍一区| 亚洲国产99| 亚洲日本中文字幕区| 欧美91大片| 亚洲高清色综合| 99视频超级精品| 欧美人与禽性xxxxx杂性| 亚洲精品国产系列| 在线一区二区三区四区五区| 欧美日韩一区二区三区高清| 一本色道久久88亚洲综合88| 亚洲一区三区电影在线观看| 欧美日韩综合另类| 午夜精品福利一区二区三区av| 欧美一区二区三区四区在线观看| 国产欧美精品日韩精品| 久久精品国产成人| 农夫在线精品视频免费观看| 亚洲国产欧美国产综合一区| 欧美大片在线观看一区| 亚洲免费av片| 久久av资源网| 亚洲成人自拍视频| 欧美另类一区二区三区| 亚洲综合色在线| 另类综合日韩欧美亚洲| 亚洲精品一区二区三区不| 欧美日韩第一区| 亚洲欧美国产日韩天堂区| 美国三级日本三级久久99| 亚洲精品偷拍| 国产精品视频免费在线观看| 久久aⅴ国产欧美74aaa| 亚洲黄色一区| 国产精品多人| 噜噜噜91成人网| 亚洲视频二区| 欧美激情一二三区| 亚洲欧美日韩一区二区三区在线| 国内精品视频在线播放| 欧美日韩国产另类不卡| 午夜激情亚洲| 亚洲精品永久免费精品| 久久久午夜视频| 亚洲一区精品在线| 亚洲大片av| 国产农村妇女毛片精品久久莱园子| 美国十次了思思久久精品导航| 99成人在线| 亚洲高清不卡av| 久久人体大胆视频| 亚洲欧美另类综合偷拍| 亚洲国产精品第一区二区三区| 欧美性猛交视频| 欧美成人一区二免费视频软件| 亚洲欧美日韩在线高清直播| 亚洲精品视频在线播放| 麻豆国产精品一区二区三区| 午夜激情亚洲| 亚洲一区在线播放| 99国产麻豆精品| 亚洲国产精品久久久久秋霞不卡| 国产日韩精品一区二区三区在线| 欧美日韩美女在线| 欧美美女bb生活片| 蘑菇福利视频一区播放| 久久久久网址| 久久gogo国模裸体人体| 午夜精品久久久久久久久久久久 | 亚洲美女性视频| 欧美激情一区二区三区蜜桃视频 | 久久只精品国产| 久久精品一区蜜桃臀影院| 亚洲一区制服诱惑| 一区二区三区高清在线观看| 亚洲人成欧美中文字幕| 最新日韩精品| 亚洲黄色高清| 亚洲国产综合在线| 亚洲区一区二| 91久久久久久国产精品| 最新日韩中文字幕| 日韩亚洲国产欧美| 一区二区久久久久| 中国亚洲黄色| 欧美亚洲免费| 久久久精品2019中文字幕神马| 久久久国产精品亚洲一区 | 亚洲国产日韩欧美综合久久| 欧美激情欧美狂野欧美精品| 欧美成人一区二区三区片免费| 欧美激情一级片一区二区| 亚洲国产一区二区三区在线播| 欧美肥婆在线| 日韩亚洲综合在线| 亚洲一区观看| 久久电影一区| 美女主播一区| 欧美日一区二区三区在线观看国产免| 欧美精品在线视频| 国产精品乱码久久久久久| 国产精品揄拍一区二区| 麻豆91精品| 欧美喷潮久久久xxxxx| 国产精品国产三级欧美二区| 国产精品视频内| 国内偷自视频区视频综合| 亚洲国产欧美一区| 亚洲一区三区在线观看| 久久伊人精品天天| 日韩亚洲欧美精品| 性欧美8khd高清极品| 免费在线欧美视频| 欧美三区在线视频| 极品少妇一区二区| 一本色道久久综合亚洲精品婷婷| 午夜精品久久99蜜桃的功能介绍| 久久综合电影| 中日韩美女免费视频网址在线观看 | 亚洲国产精品第一区二区三区| 日韩午夜免费视频| 欧美中文字幕视频在线观看| 欧美高清在线视频| 国产手机视频一区二区| 99re热这里只有精品免费视频| 久久精品电影| 日韩一区二区久久| 久久免费国产精品| 国产欧美韩日| 一区二区三区精品| 欧美成人精品在线观看| 亚洲五月婷婷| 欧美日韩成人综合天天影院| 黑人一区二区| 久久精品中文字幕一区| 一本色道精品久久一区二区三区 | 欧美日韩国产综合视频在线观看中文| 国产婷婷97碰碰久久人人蜜臀| 一本一道久久综合狠狠老精东影业 |