锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鐜板湪鐨勫簲鐢ㄨ蔣浠墮兘璁茬┒涓у寲錛屽洜姝ゆ彁渚涗竴濂楁紓浜殑鐨偆灝卞繀涓嶅彲灝戙傝繖灝遍渶瑕佺敤鍒頒竴浜涙帶浠惰偆鍖栨妧鏈傚父瑙勬槸閲嶈澆MFC鐨勬秷鎭垪琛ㄦ垨铏氬嚱鏁版潵瀹炵幇鐨勶紝浣嗗紩鏉ョ殑闂鏄偆鍖栧簱鍜屽簲鐢ㄧ▼搴忕殑鑰﹀悎鎬уお寮恒傜粡甯鎬細(xì)鐢變簬鑲ゅ寲浠g爜鐨勪竴澶勫皬鏀瑰姩鑰屽紩璧烽昏緫涓婂茍娌℃湁鍏寵仈鐨勬暣涓簲鐢ㄧ▼搴忓ぇ瑙勬ā鐨勭紪璇戝拰閾炬帴錛屽茍甯︽潵寮鍙戞晥鐜囩殑鎬ュ墽涓嬮檷錛岃繖鍦ㄥ紑鍙戝ぇ鍨嬭蔣浠舵椂鏄緢闅懼繊鍙楃殑銆?/SPAN>
鏈枃鍦ㄥ弬鑰冧簡涓浜涘父鐢ㄨ偆鍖栨妧鏈悗鎻愪緵浜嗚嚜宸辯殑瑙e喅鏂規(guī)錛氶噰鐢ㄦ浛鎹㈢獥浣撹繃紼嬶紝鐨偆搴撻珮搴︾嫭绔嬶紝鍐呴儴瀹屽杽涓庝慨鏀規(guī)涓嶅獎(jiǎng)鍝嶅簲鐢ㄧ▼搴忋?/SPAN>
甯歌鑲ゅ寲鏂規(guī)硶錛?/SPAN>
絎竴縐嶏細(xì)鍒╃敤緇ф壙鍏崇郴鐩存帴瀛愮被鍖?/SPAN>
絎簩縐嶏細(xì)鍦ㄤ竴涓璇濇鐨?/SPAN> OnInitDialog 涓愭帶浠跺瓙綾誨寲
絎笁縐嶏細(xì)鍦?/SPAN> Hook 涓嫤鎴獥鍙e垱寤烘秷鎭紝騫惰繘琛屽瓙綾誨寲
絎洓縐?/SPAN> SetWindowLong鏇挎崲紿楀彛榪囩▼
絎簲縐?/SPAN> 鍦?/SPAN>Hook涓浛鎹㈢獥鍙h繃紼?/SPAN>
絎竴綾繪柟娉曢噰鐢ㄧ殑鏄?/SPAN>MFC瀛愮被鍖栨柟娉曟潵瀹炵幇錛堝墠涓夌錛?/SPAN>
1. MFC 閫氳繃緇存姢鍐呴儴涓寮?/SPAN>ChandleMap鏉ヨ褰?/SPAN>Window鎺т歡涓庢帶浠跺瓙綾誨璞′箣闂寸殑鍏崇郴銆傚湪MFC鐨勫叏灞紿楀彛榪囩▼AfxWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)涓紝閫氳繃璋冪敤CWnd::FromHandlePermanent(HWND hWnd)寰楀埌鍙傛暟鍙ユ焺鎵渚濋檮鐨?/SPAN>C+鎺т歡瀛愮被瀵硅薄錛屽茍璋冪敤铏氬嚱鏁?/SPAN>CWnd::WindowProc灝嗙浉搴旂殑娑堟伅閫佺粰鐩稿簲鐨勬帶浠跺瓙綾誨璞$殑紿楀彛榪囩▼
2. 鎺т歡瀛愮被瀵硅薄璋冪敤CWnd::SubclassWindow鐧昏鎺т歡涓庢帶浠跺瓙綾誨璞′箣闂寸殑鍏崇郴
絎簩綾繪柟娉曢噰鐢ㄦ浛鎹㈢獥鍙h繃紼嬫柟娉曟潵瀹炵幇錛堢鍥涖佷簲縐嶏級(jí)
鑲ゅ寲鎶鏈?/SPAN>鍒嗘瀽錛?/SPAN>
MFC閲囩敤鍏鋒湁灞傛緇撴瀯鐨勬帶浠跺瓙綾昏璁★細(xì)閫氳繃涓寮?/SPAN>Map琛ㄥ緩绔嬫帶浠跺彞鏌勪笌C++瀵硅薄錛堟帶浠跺瓙綾誨璞★級(jí)鐨勮仈緋伙紝閫氳繃鎺т歡瀛愮被瀵硅薄鐨勫彉閲忔潵璁板綍鍜岀淮鎶ゆ帶浠剁殑鐘舵佷俊鎭?/SPAN>
鈥滆偆鍖栤濈殑鏈川錛?/SPAN>
1錛夊搷搴斿彂閫佺粰璇ユ帶浠剁殑Windows娑堟伅錛?/SPAN>
2錛夌敤鎭板綋鐨勬暟鎹〃鐜板嚭鎭板綋鐨勮涓恒?/SPAN>
鍏朵腑錛?/SPAN>
1)鍙互鐢ㄦ浛鎹㈢獥浣撹繃紼嬫潵瀹炵幇錛?/SPAN>
2)鍙互鐢ㄧ淮鎶よ嚜瀹氫箟鎺т歡瀛愮被瀵硅薄鍜屾帶浠跺彞鏌勭殑鍏崇郴鏉ュ疄鐜般?/SPAN>
鏈枃鐙珛鑲ゅ寲搴撻噰鐢ㄧ殑鏂規(guī)硶錛?/SPAN>
1. 鐩爣錛?/SPAN>
鑲ゅ寲鐩爣紿楀彛錛屾帴鍙g畝鍗曪紝騫朵笖琚偆鍖栫殑紿楀彛褰卞搷灝忋?/SPAN>
2. 閲囩敤鏂規(guī)硶錛?/SPAN>
鏇挎崲紿楀彛榪囩▼
3. 闅劇偣錛?/SPAN>
紿楀彛榪囩▼鐨勮璁★紝鏄惁闇瑕佷負(fù)姣忎釜綾婚兘璁捐鍗曠嫭鐨勭獥鍙h繃紼嬶紵宸ヤ綔閲忔槸鍚﹁繃澶э紵
緇存姢鐘舵佸彉閲忥紝褰撴湁澶氫釜鎺т歡鍏變韓鍚屼竴紿楀彛榪囩▼鏃訛紝濡備綍緇存姢瀹冧滑鍚勮嚜鐨勭姸鎬侊紵
瀹炵幇鏂規(guī)硶:
1. 浠跨収MFC錛屽緩绔嬬粺涓鐨勭獥浣撹繃紼?/SPAN>SkinWndProc
2. 寤虹珛涓寮?/SPAN>Map琛紝鐢ㄦ潵鐧昏hWnd鍜岃嚜瀹氫箟鎺т歡瀛愮被瀵硅薄涔嬮棿鐨勮仈緋匯?/SPAN>
3. 鍒涘緩涓涓毊鑲ょ埗綾伙紝鎵鏈夌殑鑲ゅ寲鎺т歡鍧囦粠瀹冩淳鐢燂紙綾諱技涓?/SPAN>MFC鐨?/SPAN>CWnd錛夛紝鍙互鍦ㄧ粺涓鐨勭獥浣撹繃紼?/SPAN>SkinWndProc涓氳繃Map琛ㄦ壘鍒扮浉搴旂殑鑷畾涔夋帶浠跺瓙綾誨璞★紝騫惰皟鐢ㄥ叾铏氬嚱鏁板疄鐜板Windows娑堟伅鐨勫搷搴?/SPAN>
4. 閲嶈澆:SubclassWindow鍑芥暟錛岀敤鏉ュ畬鎴愮獥浣撹繃紼嬬殑鏇挎崲銆?/SPAN>
澶栭儴鎺ュ彛錛?/SPAN>
1. 鎻愪緵SkinDlg(HWND hWnd)瀹屾垚瀵瑰璇濇鍙?qiáng)鍏跺瓙鎺т欢鐨勮偆鍖?/SPAN>
2. 鎻愪緵SkinBtn(HWND hWnd, LPCTSTR lpszSection)鎸囧畾閲囩敤閰嶅埗鏂囦歡鐨勫摢涓鑺傚睘鎬ц偆鍖栨寜閽?/SPAN>
3. 濡傛灉闇瑕侊紝鎻愪緵DonotSkinCtrl(HWND hWnd)鐢ㄦ潵鎸囧畾涓嶉渶瑕佽偆鍖栫殑鎺т歡
4. 鎻愪緵ChangeSkin錛?/SPAN>LPCTSTR lpszSkinName錛夋洿鎹㈢毊鑲?/SPAN>
妗嗘灦鍘熺悊鍥撅細(xì)
鏃跺簭鍥撅細(xì)
寮曡█錛?/SPAN>
鍦ㄤ笂涓綃囨枃绔犱腑錛屾垜浠紩鍏ヤ簡涓涓粍浠跺寲緙栫▼鐨勬灦鏋勶紝鍏跺疄瀹冩槸涓涓豢COM鏋舵瀯銆傚敖綆$浉瀵逛簬COM鑰岃█瀹冨凡緇忕浉褰撶殑綆鍗曚簡錛屼絾鎬葷殑鏉ヨ瀹冧粛鏄瘮杈冨鏉傘傛湰鏂囧紩鍏ヤ簡鍙︿竴縐嶇粍浠跺寲緙栫▼鐨勫疄鐜版灦鏋勶紝鐩稿浜庝豢COM綃囪岃█錛屽畠鐨勭粨鏋勬洿鍔犳竻鏅幫紝瀹炵幇鏇村姞綆鍗曘?/SPAN>
緇勪歡鍖栫紪紼嬪啀鍒嗘瀽錛?/SPAN>
鍏跺疄寮曞叆緇勪歡鍖栫紪紼嬬殑鍏抽敭鐩殑鏄負(fù)浜嗗皢紼嬪簭妯″潡鍖栵紝浣垮悇涓ā鍧椾箣闂村彲浠ュ崟鐙紑鍙戯紝鍗曠嫭嫻嬭瘯銆傚綋鐒?dòng)灱岄殢涔嬭屾潵鐨?/SPAN>DLL鐗堟湰闂涔熷繀欏昏瑙e喅錛岄槻姝㈠嚭鐜頒笉鍏煎鐨勭粍浠剁増鏈牬鍧忕▼搴忕殑紼沖畾鎬с傚彧闇瑕佽揪鍒板嚑涓洰鐨勫氨琛屼簡錛屾垜浠病蹇呰鎶婁簨鎯呭仛寰楀お榪囦簬澶嶆潅銆?/SPAN>
瀹炵幇錛?/SPAN>
灝嗙▼搴忔ā鍧楀寲錛屼嬌涔嬪彲浠ュ崟鐙紑鍙戙佹祴璇曡屼笉褰卞搷鍏跺畠鐨勬ā鍧楋紝浠嶇劧闇瑕佸皢姣忎釜妯″潡鍒嗚В鍒?/SPAN>DLL鍘誨疄鐜般傞氬父鍥犱負(fù)闈㈠悜瀵硅薄銆佸嚱鏁板悓鍚嶃佸嚱鏁板湴鍧鍋忕Щ錛屼嬌鐢ㄦ柟渚跨瓑絳夊師鍥狅紝鎴戜滑涓嶅笇鏈涚洿鎺ヤ嬌鐢?/SPAN>DLL瀵煎嚭API錛岃屽笇鏈涜兘浣跨敤鎺ュ彛錛屼互闈㈠悜瀵硅薄鐨勬柟寮忕紪紼嬨備負(fù)浜嗚В鍐崇増鏈棶棰橈紝鎴戜滑緇欐瘡涓帴鍙g殑瀹炵幇鐗堟湰鍔犱釜鏍囩ず銆傛棦鎴戜滑鍙互瑕佹眰DLL緇欏嚭1.0鐗堢殑鎺ュ彛瀹炵幇銆?/SPAN>2.0鐗堢殑鎺ュ彛瀹炵幇絳夈傝繕鏈夛紝鎴戜滑榪樿鍛婅瘔DLL鎴戜滑鎯寵幏寰楀摢涓帴鍙c備簬鏄粺涓璧鋒潵錛岀粰姣忎釜鎺ュ彛鍔犱釜鍞竴ID,鍥犱負(fù)閫氬父鎴戜滑鐨勭▼搴忎笉浼?xì)鍦ㄥ叏鐞冨彂琛屽Q屾墍浠ヤ篃娌″繀瑕佷嬌鐢?/SPAN>GUID錛屼嬌鐢ㄥ瓧絎︿覆鏍囩ず灝辮浜嗐?/SPAN>
姣忎釜鎺ュ彛鐨勫疄鐜伴兘鏈夎嚜宸辯殑鍒涘緩鍑芥暟錛屾墍浠ユ垜浠湪姣忎釜妯″潡涓緩绔嬩竴寮犺〃錛岀淮鎶ゆ帴鍙f爣紺轟笌鎺ュ彛鍒涘緩鍑芥暟鐨勫叧緋?/SPAN>
鎺ュ彛鏍囩ず |
鍏ㄥ眬鍒涘緩鍑芥暟 |
鈥淰UIManager |
__g_CreateVUIManager001interfaceNam_reg() |
鈥淰UIManager |
__g_CreateVUIManager002interfaceNam_reg() |
鈥淰Skin |
__g_CreateVSkin001interfaceNam_reg() |
鈥淰Skin |
__g_CreateVSkin002interfaceNam_reg() |
鍦?/SPAN>DLL涓鍑烘帴鍙e垱寤?/SPAN>API
DLL_EXPORT void*CreateInterface(const char *pInterfaceName, int *pReturnCode);
灝忕粨錛?/SPAN>
鏈疄鐜頒粎鏄粍浠跺寲緙栫▼鐨勪竴涓畝鍖栧疄鐜幫紝瀹冨茍涓嶈兘鍙栦唬銆婁豢COM綃囥嬶紝瀹冩墍瀹炵幇鐨勫姛鑳戒篃涓嶅銆婁豢COM綃囥嬮偅涔堝己澶э紝渚嬪瀹冮渶瑕佸疄鐜扮煡閬撴帴鍙f墍鍦ㄧ殑DLL錛屼笉鑳藉疄鐜拌嚜鎵╁睍絳夈備絾瀵逛簬涓鑸殑紼嬪簭鑰岃█錛屽畠鏇寸畝鍗曚嬌鐢ㄣ?/SPAN>
榪樺彲浠ヤ嬌鐢ㄥ畯瀹氫箟 鎶婃帴鍙f爣紺哄拰鎺ュ彛鍒涘緩鍑芥暟涓庡垱寤鴻繃紼嬪叧鑱旇搗鏉ワ紝灝嗘帴鍙e垱寤?/SPAN>API涔熷寘瑁呰搗鏉ワ紝寮鍙戜腑灝嗘洿鍔犳柟渚褲傚彧闇涓涓畯灝卞彲浠ユ悶瀹氳繖浜涙搷浣溿?/SPAN>