锘??xml version="1.0" encoding="utf-8" standalone="yes"?>美女视频网站黄色亚洲,亚洲精品免费一区二区三区,欧美日本一区二区三区http://m.shnenglu.com/yishanhante/category/3723.htmlzh-cnTue, 20 May 2008 23:48:56 GMTTue, 20 May 2008 23:48:56 GMT60MFC紼嬪簭鍛樼殑WTL鎸囧崡: Part I - ATL 鐣岄潰綾籟杞琞http://m.shnenglu.com/yishanhante/articles/19482.htmljayjayFri, 09 Mar 2007 03:46:00 GMThttp://m.shnenglu.com/yishanhante/articles/19482.htmlhttp://m.shnenglu.com/yishanhante/comments/19482.htmlhttp://m.shnenglu.com/yishanhante/articles/19482.html#Feedback0http://m.shnenglu.com/yishanhante/comments/commentRss/19482.htmlhttp://m.shnenglu.com/yishanhante/services/trackbacks/19482.htmlREADME.TXT

鍦ㄤ綘寮濮嬩嬌鐢╓TL鎴栫潃鍦ㄦ湰鏂囩珷鐨勮璁哄尯寮犺創娑堟伅涔嬪墠錛屾垜鎯寵浣犲厛闃呰涓嬮潰鐨勬潗鏂欍?/p>

浣犻渶瑕佸紑鍙戝鉤鍙癝DK錛圥latform SDK錛夈備綘瑕佷嬌鐢╓TL涓嶈兘娌℃湁瀹冿紝浣犲彲浠ヤ嬌鐢?a >鍦ㄧ嚎鍗囩駭瀹夎寮鍙戝鉤鍙癝DK錛屼篃鍙互涓嬭澆鍏ㄩ儴鏂囦歡鍚庡湪鏈湴瀹夎銆傚湪浣跨敤涔嬪墠瑕佸皢SDK鐨勫寘鍚枃浠訛紙.h澶存枃浠訛級鍜屽簱鏂囦歡錛?Lib鏂囦歡錛夎礬寰勬坊鍔犲埌VC鐨勬悳绱㈢洰褰曪紝SDK鏈夌幇鎴愮殑宸ュ叿瀹屾垚榪欎釜宸ヤ綔錛岃繖涓伐鍏蜂綅浜庡紑鍙戝鉤鍙癝DK紼嬪簭緇勭殑鈥?i>Visual Studio Registration鈥濇枃浠跺す閲屻?/p>

浣犻渶瑕佸畨瑁?WTL銆備綘鍙互浠庡井杞殑緗戠珯涓?a >涓嬭澆WTL鐨?.0鐗?/font>錛?*緙栬緫娉細WTL涔熷彲浠ュ埌VC鐭ヨ瘑搴?a target="_blank">http://www.vckbase.com/tools涓嬭澆) 鍦ㄥ畨瑁呬箣鍓嶅彲浠ュ厛鏌ョ湅鈥?a >Introduction to WTL - Part 1鈥濆拰鈥?a >Easy installation of WTL鈥濊繖涓ょ瘒鏂囩珷錛屼簡瑙d竴涓嬫墍瑕佸畨瑁呯殑鏂囦歡鐨勪俊鎭紝铏界劧鐜板湪榪欎簺鏂囩珷鏈変簺榪囨椂錛屼絾榪樻槸鍙互鎻愪緵寰堝鏈夌敤鐨勪俊鎭傛湁涓浠舵垜璁や負涓嶈鍦ㄦ湰綃囨枃绔犱腑鎻愬埌鐨勪簨鏄憡璇塚C濡備綍鎼滅儲WTL鐨勫寘鍚枃浠惰礬寰勶紝濡傛灉浣犵敤鐨刅C6錛岀敤榧犳爣鐐瑰嚮 Tools\Options錛岃漿鍒?i>Directories鏍囩欏碉紝鍦ㄦ樉紺鴻礬寰勭殑鍒楄〃妗嗕腑閫夋嫨Include Files錛岀劧鍚庡皢WTL鐨勫寘鍚枃浠剁殑瀛樻斁璺緞娣誨姞鍒板寘鍚枃浠舵悳绱㈣礬寰勫垪琛ㄤ腑銆?/p>

浣犻渶瑕佷簡瑙FC銆傚緢濂藉湴浜嗚ВMFC灝嗘湁鍔╀簬浣犵悊瑙e悗闈㈡彁鍒扮殑鏈夊叧娑堟伅鏄犲皠鐨勫畯騫惰兘澶熺紪杈戦偅浜涙爣鏈夆滀笉瑕佺紪杈戯紙DO NOT EDIT錛夆濈殑浠g爜鑰屼笉浼氬嚭鐜伴棶棰樸?/p>

浣犻渶瑕佹竻妤氬湴鐭ラ亾濡備綍浣跨敤Win32 API緙栫▼銆傚鏋滀綘鏄洿鎺ヤ粠MFC寮濮嬪涔燱indows緙栫▼錛屾病鏈夊榪嘇PI綰у埆鐨勬秷鎭鐞嗘柟寮忥紝閭e緢涓嶅垢浣犱細鍦ㄤ嬌鐢╓TL鏃墮亣鍒伴夯鐑︺傚鏋滀笉浜嗚ВWindows娑堟伅涓璚PARAM鍙傛暟鍜孡PARAM鍙傛暟鐨勬剰涔夛紝搴旇鏄庣櫧闇瑕佽涓浜涜繖鏂歸潰鐨勬枃绔狅紙鍦–odeProject鏈夊ぇ閲忕殑姝ょ被鏂囩珷錛夈?/p>

浣犻渶瑕佺煡閬?C++ 妯℃澘鐨勮娉曪紝浣犲彲浠ュ埌VC Forum FAQ 鐩稿叧鐨勮繛鎺ュ姹傜瓟妗堛?/p>

鎴戝彧鏄璁轟簡涓浜涙兜鐩朧C 6鐨勭壒鐐癸紝涓嶈繃鎹垜浜嗚В鎵鏈夌殑紼嬪簭閮藉彲浠ュ湪VC 7涓婁嬌鐢ㄣ傜敱浜庢垜涓嶄嬌鐢╒C 7錛屾垜鏃犳硶瀵歸偅浜涘湪VC 7涓嚭鐜扮殑闂鎻愪緵甯姪錛屼笉榪囦綘榪樻槸鍙互鏀懼績鐨勫湪姝ゅ紶璐翠綘鐨勯棶棰橈紝鍥犱負鍏朵粬鐨勪漢鍙兘浼氬府鍔╀綘銆?/p> 瀵規湰緋誨垪鏂囩珷鐨勬諱綋浠嬬粛

WTL 鍏鋒湁涓ら潰鎬э紝紜疄鏄繖鏍風殑銆傚畠娌℃湁MFC鐨勭晫闈紙GUI錛夌被搴撻偅鏍峰姛鑳藉己澶э紝浣嗘槸鑳藉鐢熸垚寰堝皬鐨勫彲鎵ц鏂囦歡銆傚鏋滀綘璞℃垜涓鏍蜂嬌鐢∕FC榪涜鐣岄潰緙栫▼錛屼綘浼氳寰桵FC鎻愪緵鐨勭晫闈㈡帶浠跺皝瑁呬嬌鐢ㄨ搗鏉ラ潪甯歌垝鏈嶏紝鏇翠笉鐢ㄨMFC鍐呯疆鐨勬秷鎭鐞嗘満鍒躲傚綋鐒訛紝濡傛灉浣犱篃璞℃垜涓鏍蜂笉甯屾湜鑷繁鐨勭▼搴忎粎浠呭洜涓轟嬌鐢ㄤ簡MFC鐨勬鏋跺氨澧炲姞鍑犵櫨K鐨勫ぇ灝忕殑璇濓紝WTL灝辨槸浣犵殑閫夋嫨銆傚綋鐒訛紝鎴戜滑榪樿鍏嬫湇涓浜涢殰紕嶏細

  • ATL鏍峰紡鐨勬ā鏉跨被鍒濈湅璧鋒潵鏈夌偣鎬紓
  • 娌℃湁綾誨悜瀵肩殑鏀寔錛屾墍浠ヨ鎵嬪伐澶勭悊鎵鏈夌殑娑堟伅鏄犲皠銆?
  • MSDN娌℃湁姝e紡鐨勬枃妗f敮鎸侊紝浣犻渶瑕佸埌澶勫幓鏀墮泦鏈夊叧鐨勬枃妗o紝鐢氳嚦鏄煡鐪媁TL鐨勬簮浠g爜銆?
  • 涔頒笉鍒板弬鑰冧功綾?
  • 娌℃湁寰蔣鐨勫畼鏂規敮鎸?
  • ATL/WTL鐨勭獥鍙d笌MFC鐨勭獥鍙f湁寰堝ぇ鐨勪笉鍚岋紝浣犳墍浜嗚В鐨勬湁鍏矼FC鐨勭煡璇嗗茍涓嶅叏閮ㄩ傜敤涓嶹TL銆?

浠庡彟涓鏂歸潰璁詫紝WTL涔熸湁瀹冭嚜韜殑浼樺娍錛?/p>

  • 涓嶉渶瑕佸涔犳垨鎺屾彙澶嶆潅鐨勬枃妗?瑙嗗浘妗嗘灦銆?
  • 鍏鋒湁MFC鐨勫熀鏈殑鐣岄潰鐗硅壊錛屾瘮濡侱DX/DDV鍜屽懡浠ょ姸鎬佺殑鑷姩鏇存柊鍔熻兘錛堣瘧鑰呭姞錛氭瘮濡傝彍鍗曠殑Check鏍囪鍜孍nable鏍囪錛夈?
  • 澧炲己浜嗕竴浜汳FC鐨勭壒鎬э紙姣斿鏇村姞鏄撶敤鐨勫垎闅旂獥鍙o級銆?
  • 鍙敓鎴愭瘮闈欐侀摼鎺ョ殑MFC紼嬪簭鏇村皬鐨勫彲鎵ц鏂囦歡錛堣瘧鑰呭姞錛歐TL鐨勬墍鏈夋簮浠g爜閮芥槸闈欐侀摼鎺ュ埌浣犵殑紼嬪簭涓殑錛夈?
  • 浣犲彲浠ヤ慨姝h嚜宸變嬌鐢ㄧ殑WTL涓殑閿欒錛圔UG錛夎屼笉浼氬獎鍝嶅叾浠栫殑搴旂敤紼嬪簭(鐩告瘮涔嬩笅錛屽鏋滀綘淇浜嗘湁BUG鐨凪FC/CRT鍔ㄦ佸簱灝卞彲鑳戒細寮曡搗鍏跺畠搴旂敤紼嬪簭鐨勫穿婧冦?
  • 濡傛灉浣犱粛鐒墮渶瑕佷嬌鐢∕FC錛孧FC鐨勭獥鍙e拰ATL/WTL鐨勭獥鍙e彲浠モ滃拰騫沖叡澶勨濄傦紙渚嬪鎴戝伐浣滀腑鐨勪竴涓師鍨嬪氨浣跨敤浜嗕簡MFC鐨凜FrameWnd錛屽茍鍦ㄥ叾鍐呭寘鍚簡WTL鐨凜SplitterWindow錛屽湪CSplitterWindow涓張浣跨敤浜哅FC鐨凜Dialogs -- 鎴戝茍涓嶆槸涓轟簡鐐浠涔堬紝鍙槸淇敼浜哅FC鐨勪唬鐮佷嬌涔嬭兘澶熶嬌鐢╓TL鐨勫垎鍓茬獥鍙o紝瀹冩瘮MFC鐨勫垎鍓茬獥鍙eソ鐨勫錛夈?

鍦ㄨ繖涓緋誨垪鏂囩珷涓紝鎴戝皢棣栧厛浠嬬粛ATL鐨勭獥鍙g被錛屾瘯绔焀TL鏄瀯寤轟笌ATL涔嬩笂鐨勪竴緋誨垪闄勫姞綾伙紝鎵浠ラ渶瑕佸緢濂界殑浜嗚ВATL鐨勭獥鍙g被銆備粙緇嶅畬ATL涔嬪悗鎴戝皢浠嬬粛WTL鐨勭壒鎬т互騫跺睍紺哄畠鏄浣曚嬌鐣岄潰緙栫▼鍙樺緱杞昏屾槗涓俱?/p> 瀵圭涓绔犵殑綆鍗曚粙緇?/b>

WTL鏄釜寰堥叿鐨勫伐鍏鳳紝鍦ㄧ悊瑙h繖涓鐐逛箣鍓嶉渶瑕侀鍏堜粙緇岮TL銆俉TL鏄瀯寤轟笌ATL涔嬩笂鐨勪竴緋誨垪闄勫姞綾伙紝濡傛灉浣犳槸涓弗鏍間嬌鐢∕FC鐨勭▼搴忓憳閭d箞浣犲彲鑳芥病鏈夋満浼氭帴瑙﹀埌ATL鐨勭晫闈㈢被錛屾墍浠ヨ瀹瑰繊鎴戝湪寮濮媁TL涔嬪墠鍏堢綏绱竴浜涘埆鐨勪笢瑗匡紝緇曢亾鏉ヤ粙緇嶄竴涓婣TL鏄緢鏈夊繀瑕佸湴銆?/p>

鍦ㄦ湰鏂囩殑絎竴閮ㄥ垎錛屾垜灝嗙粰鍑轟竴鐐笰TL鐨勮儗鏅煡璇嗭紝鍖呮嫭涓浜涚紪鍐橝TL浠g爜蹇呴』鐭ラ亾鐨勫熀鏈煡璇嗭紝蹇熺殑瑙i噴涓浜涗護浜轟笉鐭ユ墍鎺殑ATL妯℃澘綾誨拰鍩烘湰鐨凙TL紿楀彛綾匯?/p> ATL 鑳屾櫙鐭ヨ瘑 ATL 鍜?WTL 鐨勫彂灞曞巻鍙?/b>

鈥滄椿鍔ㄦā鏉垮簱鈥濓紙Active Template Library錛夋槸涓涓緢鍙ゆ殑鍚嶅瓧錛屼笉鏄悧錛熼偅浜涘勾綰ぇ鐨勪漢鍙兘榪樿寰楀畠鏈鍒濊縐頒負鈥滅綉緇滅粍浠舵ā鏉垮簱鈥濓紝榪欏彲鑳芥槸瀹冩洿鍑嗙‘鐨勭О鍛鹼紝鍥犱負ATL鐨勭洰鐨勫氨鏄嬌緙栧啓緇勪歡瀵硅薄鍜孉ctiveX鎺т歡鏇村鏄撲竴浜涳紙ATL鏄湪寰蔣寮鍙戞柊浜у搧ActiveX-鏌愭煇鐨勮繃紼嬩腑寮鍙戠殑錛岄偅浜汚ctiveX-鏌愭煇鐜板湪琚О涓烘煇鏌?NET錛夈傜敱浜嶢TL鏄負浜嗕究浜庣紪鍐欑粍浠跺璞¤屽瓨鍦ㄧ殑錛屾墍浠ュ彧鎻愪緵浜嗙畝鍗曠殑鐣岄潰綾伙紝鐩稿綋浜嶮FC鐨勭獥鍙g被錛圕Wnd錛夊拰瀵硅瘽妗嗙被錛圕Dialog錛夈傚垢榪愮殑鏄繖浜涚被闈炲父鐨勭伒媧伙紝鑳藉鍦ㄥ叾鍩虹涓婃瀯寤鴻薄WTL榪欐牱鐨勯檮鍔犵被銆?/p>

WTL鐜板湪宸茬粡鏄浜屾淇浜嗭紝鏈鍒濈殑鐗堟湰鏄?.1錛岀幇鍦ㄧ殑鐗堟湰鏄?錛圵TL鐨勭増鏈彿涔嬫墍浠ヨ繖鏍烽夋嫨鏄負浜嗕笌ATL鐨勭増鏈尮閰嶏紝鎵浠ヤ笉瀛樺湪1鍜?榪欐牱鐨勭増鏈彿錛夈俉TL 3.1鍙互涓嶸C 6鍜孷C 7涓璧蜂嬌鐢紝浣嗘槸鍦╒C 7涓嬮渶瑕佸畾涔夊嚑涓澶勭悊鏍囧彿銆俉TL 7鍚戜笅鍏煎WTL 3.1錛屽茍涓斾笉浣滀換浣曚慨鏀瑰氨鍙互涓嶸C 7涓璧蜂嬌鐢紝鐜板湪鐪嬫潵娌℃湁浠諱綍鐞嗙敱榪樹嬌鐢?.1鏉ヨ繘琛屾柊鐨勫紑鍙戝伐浣溿?br />

ATL-style 妯℃澘

鍗充嬌浣犺兘澶熸涓嶈垂鍔涘湴闃呰C++鐨勬ā鏉跨被浠g爜錛屼粛鐒舵湁涓や歡浜嬪彲鑳戒細浣夸綘鏈変簺澶存檿錛屼互涓嬮潰榪欎釜綾葷殑瀹氫箟涓轟緥錛?/p>

class  CMyWnd : public CWindowImpl<CMyWnd>
{
    ...
};  

榪欐牱浣滄槸鍚堟硶鐨勶紝鍥犱負C++鐨勮娉曡В閲婅鍗充嬌CMyWnd綾誨彧鏄閮ㄥ垎瀹氫箟錛岀被鍚岰MyWnd宸茬粡琚垪鍏ラ掑綊緇ф壙鍒楄〃錛屾槸鍙互浣跨敤鐨勩傚皢綾誨悕浣滀負妯℃澘綾葷殑鍙傛暟鏄洜涓篈TL瑕佸仛鍙︿竴浠惰縐樼殑浜嬫儏錛岄偅灝辨槸緙栬瘧鏈熼棿鐨勮櫄鍑芥暟璋冪敤鏈哄埗銆?/p>

濡傛灉浣犳兂瑕佷簡瑙e畠鏄浣曞伐浣滃湴錛岃鐪嬩笅闈㈢殑渚嬪瓙錛?/p>

template <class T>
class B1
{
public: 
    void SayHi() 
    {
        T* pT = static_cast<T*>(this);   // HUH?? 鎴戝皢鍦ㄤ笅闈㈣В閲?
 
        pT->PrintClassName();
    }
protected:
    void PrintClassName() { cout << "This is B1"; }
};
 
class D1 : public B1<D1>
{
    // No overridden functions at all
};
 
class D2 : public B1<D2>
{
protected:
    void PrintClassName() { cout << "This is D2"; }
};
 
main()
{
    D1 d1;
    D2 d2;
 
    d1.SayHi();    // prints "This is B1"
    d2.SayHi();    // prints "This is D2"
}

榪欏彞浠g爜static_cast<T*>(this) 灝辨槸紿嶉棬鎵鍦ㄣ傚畠鏍規嵁鍑芥暟璋冪敤鏃剁殑鐗規畩澶勭悊灝嗘寚鍚態1綾誨瀷鐨勬寚閽坱his鎸囨淳涓篋1鎴朌2綾誨瀷鐨勬寚閽堬紝鍥犱負妯℃澘浠g爜鏄湪緙栬瘧鍏墮棿鐢熸垚鐨勶紝鎵浠ュ彧瑕佺紪璇戝櫒鐢熸垚姝g‘鐨勭戶鎵垮垪琛紝榪欐牱鎸囨淳灝辨槸瀹夊叏鐨勩傦紙濡傛灉浣犲啓鎴愶細

class D3 : public B1<D2>

灝變細鏈夐夯鐑? 涔嬫墍浠ュ畨鍏ㄦ槸鍥犱負this瀵硅薄鍙彲鑳芥槸鎸囧悜D1鎴朌2錛堝湪鏌愪簺鎯呭喌涓嬶級綾誨瀷鐨勫璞★紝涓嶄細鏄叾浠栫殑涓滆タ銆傛敞鎰忚繖寰堝儚C++鐨勫鎬佹э紙polymorphism錛夛紝鍙槸SayHi()鏂規硶涓嶆槸铏氬嚱鏁般?/p>

瑕佽В閲婅繖鏄浣曞伐浣滅殑錛岄鍏堢湅瀵規瘡涓猄ayHi()鍑芥暟鐨勮皟鐢紝鍦ㄧ涓涓嚱鏁拌皟鐢紝瀵硅薄B1琚寚媧句負D1錛屾墍浠ヤ唬鐮佽瑙i噴鎴愶細

void B1<D1>::SayHi()
{
    D1* pT = static_cast<D1*>(this);
 
    pT->PrintClassName();
}

鐢變簬D1娌℃湁閲嶈澆PrintClassName()錛屾墍浠ユ煡鐪嬪熀綾籅1錛孊1鏈塒rintClassName()錛屾墍浠1鐨凱rintClassName()琚皟鐢ㄣ?/p>

鐜板湪鐪嬬浜屼釜鍑芥暟璋冪敤SayHi()錛岃繖涓嬈″璞¤鎸囨淳涓篋2綾誨瀷錛孲ayHi()琚В閲婃垚錛?/p>

void B1<D2>::SayHi()
{
    D2* pT = static_cast<D2*>(this);
 
    pT->PrintClassName();
}

榪欎竴嬈★紝D2鍚湁PrintClassName()鏂規硶錛屾墍浠2鐨凱rintClassName()鏂規硶琚皟鐢ㄣ?/p>

榪欑鎶鏈殑鏈夊埄涔嬪鍦ㄤ簬錛?/p>

  • 涓嶉渶瑕佷嬌鐢ㄦ寚鍚戝璞$殑鎸囬拡銆?
  • 鑺傜渷鍐呭瓨錛屽洜涓轟笉闇瑕佽櫄鍑芥暟琛ㄣ?
  • 鍥犱負娌℃湁铏氬嚱鏁拌〃鎵浠ヤ笉浼氬彂鐢熷湪榪愯鏃惰皟鐢ㄧ┖鎸囬拡鎸囧悜鐨勮櫄鍑芥暟銆?
  • 鎵鏈夌殑鍑芥暟璋冪敤鍦ㄧ紪璇戞椂紜畾錛堣瘧鑰呭姞錛氬尯鍒簬C++鐨勮櫄鍑芥暟鏈哄埗浣跨敤鐨勫姩鎬佺紪榪烇級錛屾湁鍒╀簬緙栬瘧紼嬪簭瀵逛唬鐮佺殑浼樺寲銆?

鑺傜渷铏氬嚱鏁拌〃鍦ㄨ繖涓緥瀛愪腑鐪嬭搗鏉ユ棤瓚寵交閲嶏紙姣忎釜铏氬嚱鏁板彧鏈?涓瓧鑺傦級錛屼絾鏄鎯充竴涓嬪鏋滄湁15涓熀綾伙紝姣忎釜綾誨惈鏈?0涓柟娉曪紝鍔犺搗鏉ュ氨鐩稿綋鍙浜嗐?/p> ATL 紿楀彛綾?/b>

濂戒簡錛屽叧浜嶢TL鐨勮儗鏅煡璇嗗凡緇忚鐨勬瀯澶氫簡錛屽埌浜嗚姝e紡璁睞TL鐨勬椂鍊欎簡銆侫TL鍦ㄨ璁℃椂鎺ュ彛瀹氫箟鍜屽疄鐜版槸涓ユ牸鍖哄垎寮鐨勶紝榪欏湪紿楀彛綾葷殑璁捐涓槸鏈鏄庢樉鐨勶紝榪欎竴鐐圭被浼間簬COM錛孋OM鐨勬帴鍙e畾涔夊拰瀹炵幇鏄畬鍏ㄥ垎寮鐨勶紙鎴栬呭彲鑳芥湁澶氫釜瀹炵幇錛夈?/p>

ATL鏈変竴涓笓闂ㄤ負紿楀彛璁捐鐨勬帴鍙o紝鍙互鍋氬叏閮ㄧ殑紿楀彛鎿嶄綔錛岃繖灝辨槸CWindow銆傚畠瀹為檯涓婂氨鏄HWND鎿嶄綔鐨勫寘瑁呯被錛屽鍑犱箮鎵鏈変互HWND鍙ユ焺涓虹涓涓弬鏁扮殑紿楀彛API鐨勮繘琛屼簡灝佽錛屼緥濡傦細SetWindowText() 鍜?DestroyWindow()銆侰Window綾繪湁涓涓叕鏈夋垚鍛榤_hWnd錛屼嬌浣犲彲浠ョ洿鎺ュ紿楀彛鐨勫彞鏌勬搷浣滐紝CWindow榪樻湁涓涓搷浣滅HWND錛屼綘鍙互璁睠Window瀵硅薄浼犻掔粰浠WND涓哄弬鏁扮殑鍑芥暟錛屼絾榪欎笌CWnd::GetSafeHwnd()錛堣瘧鑰呭姞錛歁FC鐨勬柟娉曪級娌℃湁浠諱綍絳夊悓涔嬪銆?/p>

CWindow 涓?MFC 鐨凜Wnd綾繪湁寰堝ぇ鐨勪笉鍚岋紝鍒涘緩涓涓狢Window瀵硅薄鍗犵敤寰堝皯鐨勮祫婧愶紝鍥犱負鍙湁涓涓暟鎹垚鍛橈紝娌℃湁MFC紿楀彛涓殑瀵硅薄閾撅紝MFC鍐呴儴緇存寔榪欎竴涓璞¢摼錛屾瀵硅薄閾懼皢HWND鏄犲皠鍒癈Wnd瀵硅薄銆傝繕鏈変竴鐐逛笌MFC鐨凜Wnd綾諱笉鍚岀殑鏄綋涓涓狢Window瀵硅薄瓚呭嚭浜嗕綔鐢ㄥ煙錛屽畠鍏寵仈鐨勭獥鍙e茍涓嶈閿姣佹帀錛岃繖鎰忓懗鐫浣犲茍涓嶉渶瑕侀殢鏃惰寰楀垎紱諱綘鎵鍒涘緩鐨勪復鏃禖Window瀵硅薄銆?/p>

鍦ˋTL綾諱腑瀵圭獥鍙h繃紼嬬殑瀹炵幇鏄疌WindowImpl銆侰WindowImpl 鍚湁鎵鏈夌獥鍙e疄鐜頒唬鐮侊紝渚嬪錛氱獥鍙g被鐨勬敞鍐岋紝紿楀彛鐨勫瓙綾誨寲錛屾秷鎭槧灝勪互鍙婂熀鏈殑WindowProc()鍑芥暟錛屽彲浠ョ湅鍑鴻繖涓嶮FC鐨勮璁℃湁寰堝ぇ鐨勪笉鍚岋紝MFC灝嗘墍鏈夌殑浠g爜閮芥斁鍦ㄤ竴涓狢Wnd綾諱腑銆?/p>

榪樻湁涓や釜鐙珛鐨勭被鍖呭惈瀵硅瘽妗嗙殑瀹炵幇錛屽畠浠垎鍒槸CDialogImpl 鍜?CAxDialogImpl錛孋DialogImpl 鐢ㄤ簬瀹炵幇鏅氱殑瀵硅瘽妗嗚孋AxDialogImpl瀹炵幇鍚湁ActiveX鎺т歡鐨勫璇濇銆?/p> 瀹氫箟涓涓獥鍙g殑瀹炵幇

浠諱綍闈炲璇濇紿楀彛閮芥槸浠嶤WindowImpl 媧劇敓鐨勶紝浣犵殑鏂扮被闇瑕佸寘鍚笁浠朵簨鎯咃細

  1. 涓涓獥鍙g被鐨勫畾涔?
  2. 涓涓秷鎭槧灝勯摼
  3. 紿楀彛浣跨敤鐨勯粯璁ょ獥鍙g被鍨嬶紝縐頒負window traits

紿楀彛綾葷殑瀹氫箟閫氳繃DECLARE_WND_CLASS瀹忔垨DECLARE_WND_CLASS_EX瀹忔潵瀹炵幇銆傝繖杈嗕釜瀹忓畾涔変簡涓涓狢WndClassInfo緇撴瀯錛岃繖涓粨鏋勫皝瑁呬簡WNDCLASSEX緇撴瀯銆侱ECLARE_WND_CLASS瀹忚浣犳寚瀹氱獥鍙g被鐨勭被鍚嶏紝鍏朵粬鍙傛暟浣跨敤榛樿璁劇疆錛岃孌ECLARE_WND_CLASS_EX瀹忚繕鍏佽浣犳寚瀹氱獥鍙g被鐨勭被鍨嬪拰紿楀彛鐨勮儗鏅鑹詫紝浣犱篃鍙互鐢∟ULL浣滀負綾誨悕錛孉TL浼氳嚜鍔ㄤ負浣犵敓鎴愪竴涓被鍚嶃?/p>

璁╂垜浠紑濮嬪畾涔変竴涓柊綾伙紝鍦ㄥ悗闈㈢殑绔犺妭鎴戜細閫愭鐨勫畬鎴愯繖涓被鐨勫畾涔夈?/p>

class CMyWindow : public CWindowImpl<CMyWindow>
{
public:
    DECLARE_WND_CLASS(_T("My Window Class"))
};

鎺ヤ笅鏉ユ槸娑堟伅鏄犲皠閾撅紝ATL鐨勬秷鎭槧灝勯摼姣擬FC鐨勭畝鍗曠殑澶氾紝ATL鐨勬秷鎭槧灝勯摼琚睍寮涓簊witch璇彞錛宻witch璇彞姝g‘鐨勬秷鎭鐞嗚呭茍璋冪敤鐩稿簲鐨勫嚱鏁般備嬌鐢ㄦ秷鎭槧灝勯摼鐨勫畯鏄疊EGIN_MSG_MAP 鍜?END_MSG_MAP錛岃鎴戜滑涓烘垜浠殑紿楀彛娣誨姞涓涓┖鐨勬秷鎭槧灝勯摼銆?/p>

class CMyWindow : public CWindowImpl<CMyWindow>
{
public:
    DECLARE_WND_CLASS(_T("My Window Class"))
 
    BEGIN_MSG_MAP(CMyWindow)
    END_MSG_MAP()
};

鎴戝皢鍦ㄤ笅涓鑺傚睍寮璁插浣曞浣曟坊鍔犳秷鎭鐞嗗埌娑堟伅鏄犲皠閾俱傛渶鍚庯紝鎴戜滑闇瑕佷負鎴戜滑鐨勭獥鍙g被瀹氫箟紿楀彛鐨勭壒寰侊紝紿楀彛鐨勭壒寰佸氨鏄獥鍙g被鍨嬪拰鎵╁睍紿楀彛綾誨瀷鐨勮仈鍚堜綋錛岀敤浜庡垱寤虹獥鍙f椂鎸囧畾紿楀彛鐨勭被鍨嬨傜獥鍙g被鍨嬭鎸囧畾涓哄弬鏁版ā鏉匡紝鎵浠ョ獥鍙g殑璋冪敤鑰呬笉闇瑕佷負鎸囧畾紿楀彛鐨勬紜被鍨嬭岀儲蹇冿紝涓嬮潰鏄槸鍚孉TL綾籆WinTraits瀹氫箟紿楀彛綾誨瀷鐨勪緥瀛愶細

typedef CWinTraits<WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,WS_EX_APPWINDOW> CMyWindowTraits;
 
class CMyWindow : public CWindowImpl<CMyWindow, CWindow, CMyWindowTraits>
{
public:
    DECLARE_WND_CLASS(_T("My Window Class"))
 
    BEGIN_MSG_MAP(CMyWindow)
    END_MSG_MAP()
};

璋冪敤鑰呭彲浠ラ噸杞紺MyWindowTraits鐨勭被鍨嬪畾涔夛紝浣嗘槸涓鑸儏鍐典笅榪欐槸娌℃湁蹇呰鐨勶紝ATL鎻愪緵浜嗗嚑涓鍏堝畾涔夌殑鐗規畩鐨勭被鍨嬶紝鍏朵腑涔嬩竴灝辨槸CFrameWinTraits錛屼竴涓潪甯告鐨勬鏋剁獥鍙o細

typedef CWinTraits<WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
WS_EX_APPWINDOW | WS_EX_WINDOWEDGE> CFrameWinTraits;
濉啓娑堟伅鏄犲皠閾?/b>

ATL鐨勬秷鎭槧灝勯摼鏄寮鍙戣呬笉澶弸濂界殑閮ㄥ垎錛屼篃鏄疻TL瀵瑰叾鏀硅繘鏈澶х殑閮ㄥ垎銆傜被鍚戝鑷沖皯鍙互璁╀綘娣誨姞娑堟伅鍝嶅簲錛岀劧鑰孉TL娌℃湁娑堟伅鐩稿叧鐨勫畯鍜岃薄MFC閭f牱鐨勫弬鏁拌嚜鍔ㄥ睍寮鍔熻兘錛屽湪ATL涓彧鏈変笁縐嶇被鍨嬬殑娑堟伅澶勭悊錛屼竴涓槸WM_NOTIFY錛屼竴涓槸WM_COMMAND錛岀涓夌被鏄叾浠栫獥鍙f秷鎭紝璁╂垜浠紑濮嬩負鎴戜滑鐨勭獥鍙f坊鍔燱M_CLOSE 鍜?WM_DESTROY鐨勬秷鎭浉搴斿嚱鏁般?/p>

class CMyWindow : public CWindowImpl<CMyWindow, CWindow, CFrameWinTraits>
{
public:
    DECLARE_WND_CLASS(_T("My Window Class"))
 
    BEGIN_MSG_MAP(CMyWindow)
        MESSAGE_HANDLER(WM_CLOSE, OnClose)
        MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
    END_MSG_MAP()
 
    LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
        DestroyWindow();
        return 0;
    }
 
    LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
        PostQuitMessage(0);
        return 0;
    }
};

浣犲彲鑳芥敞鎰忓埌娑堟伅鍝嶅簲鍑芥暟鐨勫埌鐨勬槸鍘熷鐨刉PARAM 鍜?LPARAM鍊鹼紝浣犻渶瑕佽嚜宸卞皢鍏跺睍寮涓虹浉搴旂殑娑堟伅鎵闇瑕佺殑鍙傛暟銆傝繕鏈夌鍥涗釜鍙傛暟bHandled錛岃繖涓弬鏁板湪娑堟伅鐩稿簲鍑芥暟璋冪敤琚獳TL璁劇疆涓篢RUE錛屽鏋滃湪浣犵殑娑堟伅鍝嶅簲澶勭悊瀹屼箣鍚庨渶瑕丄TL璋冪敤榛樿鐨刉indowProc()澶勭悊璇ユ秷鎭紝浣犲彲浠ヨbHandled璁劇疆涓篎ALSE銆傝繖涓嶮FC涓嶅悓錛孧FC鏄樉紺虹殑璋冪敤鍩虹被鐨勫搷搴斿嚱鏁版潵瀹炵幇鐨勯粯璁ょ殑娑堟伅澶勭悊鐨勩?/p>

璁╂垜浠篃娣誨姞涓涓WM_COMMAND娑堟伅鐨勫鐞嗭紝鍋囪鎴戜滑鐨勭獥鍙f湁涓涓狪D涓篒DC_ABOUT鐨凙bout鑿滃崟錛?/p>

class CMyWindow : public CWindowImpl<CMyWindow, CWindow, CFrameWinTraits>
{
public:
    DECLARE_WND_CLASS(_T("My Window Class"))
 
    BEGIN_MSG_MAP(CMyWindow)
        MESSAGE_HANDLER(WM_CLOSE, OnClose)
        MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
        COMMAND_ID_HANDLER(IDC_ABOUT, OnAbout)
    END_MSG_MAP()
 
    LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
        DestroyWindow();
        return 0;
    }
 
    LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
        PostQuitMessage(0);
        return 0;
    }
 
    LRESULT OnAbout(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
    {
        MessageBox ( _T("Sample ATL window"), _T("About MyWindow") );
        return 0;
    }
};

闇瑕佹敞鎰忓緱鏄疌OMMAND_HANDLER瀹忓凡緇忓皢娑堟伅鐨勫弬鏁板睍寮浜嗭紝鍚屾牱錛孨OTIFY_HANDLER瀹忎篃灝哤M_NOTIFY娑堟伅鐨勫弬鏁板睍寮浜嗐?/p> 楂樼駭娑堟伅鏄犲皠閾懼拰宓屽叆綾?/b>

ATL鐨勫彟涓涓樉钁椾笉鍚屼箣澶勫氨鏄換浣曚竴涓狢++綾婚兘鍙互鍝嶅簲娑堟伅錛岃孧FC鍙槸灝嗘秷鎭搷搴斾換鍔″垎緇欎簡CWnd綾誨拰CCmdTarget綾伙紝澶栧姞鍑犱釜鏈?code>PreTranslateMessage()鏂規硶鐨勭被銆侫TL鐨勮繖縐嶇壒鎬у厑璁告垜浠紪鍐欐墍璋撶殑鈥滃祵鍏ョ被鈥濓紝涓烘垜浠殑紿楀彛娣誨姞鐗規у彧闇灝嗚綾繪坊鍔犲埌緇ф壙鍒楄〃涓氨琛屼簡錛屽氨榪欎箞綆鍗曪紒

涓涓熀鏈殑甯︽湁娑堟伅鏄犲皠閾劇殑綾婚氬父鏄ā鏉跨被錛屽皢媧劇敓綾葷殑綾誨悕浣滀負妯℃澘鐨勫弬鏁幫紝榪欐牱瀹冨氨鍙互璁塊棶媧劇敓綾諱腑鐨勬垚鍛橈紝姣斿m_hWnd錛圕Window綾諱腑鐨凥WND鎴愬憳錛夈傝鎴戜滑鏉ョ湅涓涓祵鍏ョ被鐨勪緥瀛愶紝榪欎釜宓屽叆綾婚氳繃鍝嶅簲WM_ERASEBKGND娑堟伅鏉ョ敾紿楀彛鐨勮儗鏅?/p>

template <class T, COLORREF t_crBrushColor>
class CPaintBkgnd : public CMessageMap
{
public:
    CPaintBkgnd() { m_hbrBkgnd = CreateSolidBrush(t_crBrushColor); }
    ~CPaintBkgnd() { DeleteObject ( m_hbrBkgnd ); }
 
    BEGIN_MSG_MAP(CPaintBkgnd)
        MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
    END_MSG_MAP()
 
    LRESULT OnEraseBkgnd(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
        T*   pT = static_cast<T*>(this);
        HDC  dc = (HDC) wParam;
        RECT rcClient;
 
        pT->GetClientRect ( &rcClient );
        FillRect ( dc, &rcClient, m_hbrBkgnd );
        return 1;    // we painted the background
    }
 
protected:
    HBRUSH m_hbrBkgnd;
};

璁╂垜浠潵鐮旂┒涓涓嬭繖涓柊綾匯傞鍏堬紝CPaintBkgnd鏈変袱涓ā鏉垮弬鏁幫細浣跨敤CPaintBkgnd鐨勬淳鐢熺被鐨勫悕瀛楀拰鐢ㄦ潵鐢葷獥鍙h儗鏅殑棰滆壊銆傦紙t_ 鍓嶇紑閫氬父鐢ㄦ潵浣滀負妯℃澘綾葷殑妯℃澘鍙傛暟鐨勫墠緙錛塁PaintBkgnd涔熸槸浠嶤MessageMap媧劇敓鐨勶紝榪欏茍涓嶆槸蹇呴』鐨勶紝鍥犱負鎵鏈夐渶瑕佸搷搴旀秷鎭殑綾誨彧闇浣跨敤BEGIN_MSG_MAP瀹忓氨瓚沖浜嗭紝鎵浠ヤ綘鍙兘鐪嬪埌鍏朵粬鐨勪竴浜涘祵鍏ョ被鐨勪緥瀛愪唬鐮侊紝瀹冧滑騫朵笉鏄粠璇ュ熀綾繪淳鐢熺殑銆?/p>

鏋勯犲嚱鏁板拰鏋愭瀯鍑芥暟閮界浉褰撶畝鍗曪紝鍙槸鍒涘緩鍜岄攢姣乄indows鐢誨埛錛岃繖涓敾鍒風敱鍙傛暟t_crBrushColor鍐沖畾棰滆壊銆傛帴鐫鏄秷鎭槧灝勯摼錛屽畠鍝嶅簲WM_ERASEBKGND娑堟伅錛屾渶鍚庣敱鍝嶅簲鍑芥暟OnEraseBkgnd()鐢ㄦ瀯閫犲嚱鏁板垱寤虹殑鐢誨埛濉厖紿楀彛鐨勮儗鏅傚湪OnEraseBkgnd()涓湁涓や歡浜嬮渶瑕佹敞鎰忥紝涓涓槸瀹冧嬌鐢ㄤ簡涓涓淳鐢熺殑紿楀彛綾葷殑鏂規硶錛堝嵆GetClientRect()錛夛紝鎴戜滑濡備綍鐭ラ亾媧劇敓綾諱腑鏈塆etClientRect()鏂規硶鍛紵濡傛灉媧劇敓綾諱腑娌℃湁榪欎釜鏂規硶鎴戜滑鐨勪唬鐮佷篃涓嶄細鏈変換浣曟姳鎬紝鐢辯紪璇戝櫒紜媧劇敓綾籘鏄粠CWindow媧劇敓鐨勩傚彟涓涓槸OnEraseBkgnd()娌℃湁灝嗘秷鎭弬鏁皐Param灞曞紑涓鴻澶囦笂涓嬫枃錛圖C錛夈傦紙WTL鏈緇堜細瑙e喅榪欎釜闂錛屾垜浠緢蹇氨鍙互鐪嬪埌錛屾垜淇濊瘉錛?br />

瑕佸湪鎴戜滑鐨勭獥鍙d腑浣跨敤榪欎釜宓屽叆綾婚渶瑕佸仛涓や歡浜嬶細棣栧厛錛屽皢瀹冨姞鍏ュ埌緇ф壙鍒楄〃錛?/p>

class CMyWindow : public CWindowImpl<CMyWindow, CWindow, CFrameWinTraits>,
                  public CPaintBkgnd<CMyWindow, RGB(0,0,255)>

鍏舵錛岄渶瑕丆MyWindow灝嗘秷鎭紶閫掔粰CPaintBkgnd錛屽氨鏄皢鍏墮摼鍏ュ埌娑堟伅鏄犲皠閾撅紝鍦–MyWindow鐨勬秷鎭槧灝勯摼涓姞鍏HAIN_MSG_MAP瀹忥細

class CMyWindow : public CWindowImpl<CMyWindow, CWindow, CFrameWinTraits>,
                  public CPaintBkgnd<CMyWindow, RGB(0,0,255)> 
{
...
typedef CPaintBkgnd<CMyWindow, RGB(0,0,255)> CPaintBkgndBase;
 
    BEGIN_MSG_MAP(CMyWindow)
        MESSAGE_HANDLER(WM_CLOSE, OnClose)
        MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
        COMMAND_HANDLER(IDC_ABOUT, OnAbout)
        CHAIN_MSG_MAP(CPaintBkgndBase)
    END_MSG_MAP()
...
};

浠諱綍CMyWindow娌℃湁澶勭悊鐨勬秷鎭兘琚紶閫掔粰CPaintBkgnd銆傚簲璇ユ敞鎰忕殑鏄疻M_CLOSE錛學M_DESTROY鍜孖DC_ABOUT娑堟伅灝嗕笉浼氫紶閫掞紝鍥犱負榪欎簺娑堟伅涓鏃﹁澶勭悊娑堟伅鏄犲皠閾劇殑鏌ユ壘灝變細涓銆備嬌鐢╰ypedef鏄繀瑕佸湴錛屽洜涓哄畯鏄澶勭悊瀹忥紝鍙兘鏈変竴涓弬鏁幫紝濡傛灉鎴戜滑灝咰PaintBkgnd<CMyWindow, RGB(0,0,255)>浣滀負鍙傛暟浼犻掞紝閭d釜鈥?鈥濅細浣塊澶勭悊鍣ㄨ涓烘垜浠嬌鐢ㄤ簡澶氫釜鍙傛暟銆?/p>

浣犲彲浠ュ湪緇ф壙鍒楄〃涓嬌鐢ㄥ涓祵鍏ョ被錛屾瘡涓涓祵鍏ョ被浣跨敤涓涓狢HAIN_MSG_MAP瀹忥紝榪欐牱娑堟伅鏄犲皠閾懼氨浼氬皢娑堟伅浼犻掔粰瀹冦傝繖涓嶮FC涓嶅悓錛孧FC鍦癈Wnd媧劇敓綾誨彧鑳芥湁涓涓熀綾伙紝MFC鑷姩灝嗘秷鎭紶閫掔粰鍩虹被銆?/p> ATL紼嬪簭鐨勭粨鏋?/b>

鍒扮洰鍓嶄負姝㈡垜浠凡緇忔湁浜嗕竴涓畬鏁村湴涓葷獥鍙g被錛堝嵆浣夸笉瀹屽叏鏈夌敤錛夛紝璁╂垜浠湅鐪嬪浣曞湪紼嬪簭涓嬌鐢ㄥ畠銆備竴涓狝TL紼嬪簭鍖呭惈涓涓狢ComModule綾誨瀷鐨勫叏灞鍙橀噺_Module錛岃繖鍜孧FC鐨勭▼搴忛兘鏈変竴涓狢WinApp綾誨瀷鐨勫叏灞鍙橀噺theApp鏈変簺綾諱技錛屽敮涓涓嶅悓鐨勬槸鍦ˋTL涓繖涓彉閲忓繀欏誨懡鍚嶄負_Module銆?/p>

涓嬮潰鏄痵tdafx.h鏂囦歡鐨勫紑濮嬮儴鍒嗭細

// stdafx.h:
#define STRICT
#define VC_EXTRALEAN
 
#include <atlbase.h>        // 鍩烘湰鐨凙TL綾?
extern CComModule _Module;  // 鍏ㄥ眬_Module
#include <atlwin.h>         // ATL紿楀彛綾?/span>

atlbase.h宸茬粡鍖呭惈鏈鍩烘湰鐨刉indow緙栫▼鐨勫ご鏂囦歡錛屾墍浠ユ垜浠笉闇瑕佸湪鍖呭惈windows.h錛宼char.h涔嬬被鐨勫ご鏂囦歡銆傚湪CPP鏂囦歡涓0鏄庝簡_Module鍙橀噺錛?/p>

// main.cpp:
CComModule _Module;

CComModule鍚湁紼嬪簭鐨勫垵濮嬪寲鍜屽叧闂嚱鏁幫紝闇瑕佸湪WinMain()涓樉紺虹殑璋冪敤錛岃鎴戜滑浠庤繖閲屽紑濮嬶細

// main.cpp:
CComModule _Module;
 
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hInstPrev,
                   LPSTR szCmdLine, int nCmdShow)
{
    _Module.Init(NULL, hInst);
    _Module.Term();
}

Init()鐨勭涓涓弬鏁板彧鏈塁OM鐨勬湇鍔$▼搴忔墠鏈夌敤錛岀敱浜庢垜浠殑EXE涓嶅惈鏈塁OM瀵硅薄錛屾垜浠彧闇灝哊ULL浼犻掔粰Init()灝辮浜嗐侫TL涓嶆彁渚涜嚜宸辯殑WinMain()鍜岀被浼糓FC鐨勬秷鎭車錛屾墍浠ユ垜浠渶瑕佸垱寤篊MyWindow瀵硅薄騫舵坊鍔犳秷鎭車鎵嶈兘浣挎垜浠殑紼嬪簭榪愯銆?br />

// main.cpp:
#include "MyWindow.h"
CComModule _Module;
 
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hInstPrev,
                   LPSTR szCmdLine, int nCmdShow)
{
    _Module.Init(NULL, hInst);
 
    CMyWindow wndMain;
    MSG msg;
 
    // Create & show our main window
    if ( NULL == wndMain.Create ( NULL, CWindow::rcDefault, 
                                 _T("My First ATL Window") ))
    {
        // Bad news, window creation failed
        return 1;
     }
 
    wndMain.ShowWindow(nCmdShow);
    wndMain.UpdateWindow();
 
    // Run the message loop
    while ( GetMessage(&msg, NULL, 0, 0) > 0 )
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    _Module.Term();
    return msg.wParam;
}

涓婇潰鐨勪唬鐮佸敮涓闇瑕佽鏄庣殑鏄疌Window::rcDefault錛岃繖鏄疌Window涓殑鎴愬憳錛堥潤鎬佹暟鎹垚鍛橈級錛屾暟鎹被鍨嬫槸RECT銆傚拰璋冪敤CreateWindow() API鏃朵嬌鐢–W_USEDEFAULT鎸囧畾紿楀彛鐨勫搴﹀拰楂樺害涓鏍鳳紝ATL浣跨敤rcDefault浣滀負紿楀彛鐨勬渶鍒濆ぇ灝忋?/p>

鍦ˋTL浠g爜鍐呴儴錛孉TL浣跨敤浜嗕竴浜涚被浼兼眹緙栬璦鐨勯瓟娉曞皢涓葷獥鍙g殑鍙ユ焺涓庣浉搴旂殑CMyWindow瀵硅薄鑱旂郴璧鋒潵錛屽湪澶栭儴鐪嬫潵灝辨槸鍙互姣棤闂鐨勫湪綰跨▼涔嬮棿浼犻扖Window瀵硅薄錛岃孧FC鐨凜Wnd鍗翠笉鑳借繖鏍蜂綔銆?/p>

榪欏氨鏄垜浠殑紿楀彛錛?/p>

 [First ATL window - 4K]

鎴戝緱鎵胯榪欑‘瀹炴病鏈変粈涔堟縺鍔ㄤ漢蹇冪殑鍦版柟銆傛垜浠皢娣誨姞涓涓狝bout鑿滃崟騫舵樉紺轟竴涓璇濇錛屼富瑕佹槸涓哄畠澧炲姞涓浜涙儏瓚c?/p> ATL涓殑瀵硅瘽妗?/b>

鎴戜滑鍓嶉潰鎻愬埌榪囷紝ATL鏈変袱涓璇濇綾伙紝鎴戜滑鐨凙bout瀵硅瘽妗嗕嬌鐢–DialogImpl銆傜敓鎴愪竴涓柊瀵硅瘽妗嗗拰鐢熸垚涓涓富紿楀彛鍑犱箮涓鏍鳳紝鍙湁涓ょ偣涓嶅悓錛?br />

  1. 紿楀彛鐨勫熀綾繪槸CDialogImpl鑰屼笉鏄疌WindowImpl銆?
  2. 浣犻渶瑕佸畾涔夊悕縐頒負IDD鐨勫叕鏈夋垚鍛樼敤鏉ヤ繚瀛樺璇濇璧勬簮鐨処D銆?

鐜板湪寮濮嬩負About瀵硅瘽妗嗗畾涔変竴涓柊綾伙細

class CAboutDlg : public CDialogImpl<CAboutDlg>
{
public:
    enum { IDD = IDD_ABOUT };
 
    BEGIN_MSG_MAP(CAboutDlg)
    END_MSG_MAP()
};

ATL娌℃湁鍦ㄥ唴閮ㄥ疄鐜板鈥淥K鈥濆拰鈥淐ancel鈥濅袱涓寜閽殑鍝嶅簲澶勭悊錛屾墍浠ユ垜浠渶瑕佽嚜宸辨坊鍔犺繖浜涗唬鐮侊紝濡傛灉鐢ㄦ埛鐢ㄩ紶鏍囩偣鍑繪爣棰樻爮鐨勫叧闂寜閽紝WM_CLOSE鐨勫搷搴斿嚱鏁板氨浼氳璋冪敤銆傛垜浠繕闇瑕佸鐞哤M_INITDIALOG娑堟伅錛岃繖鏍鋒垜浠氨鑳藉鍦ㄥ璇濇鍑虹幇鏃舵紜殑璁劇疆閿洏鐒︾偣錛屼笅闈㈡槸瀹屾暣鐨勭被瀹氫箟鍜屾秷鎭搷搴斿嚱鏁般?/p>

class CAboutDlg : public CDialogImpl<CAboutDlg>
{
public:
    enum { IDD = IDD_ABOUT };
 
    BEGIN_MSG_MAP(CAboutDlg)
        MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
        MESSAGE_HANDLER(WM_CLOSE, OnClose)
        COMMAND_ID_HANDLER(IDOK, OnOKCancel)
        COMMAND_ID_HANDLER(IDCANCEL, OnOKCancel)
    END_MSG_MAP()
 
    LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
        CenterWindow();
        return TRUE;    // let the system set the focus
    }
 
    LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
        EndDialog(IDCANCEL);
        return 0;
    }
 
    LRESULT OnOKCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
    {
        EndDialog(wID);
        return 0;
    }
};

鎴戜嬌鐢ㄤ竴涓秷鎭搷搴斿嚱鏁板悓鏃跺鐞嗏淥K鈥濆拰鈥淐ancel鈥濅袱涓寜閽殑WM_COMMAND娑堟伅錛屽洜涓哄懡浠ゅ搷搴斿嚱鏁扮殑wID鍙傛暟灝卞凡緇忔寚鏄庝簡娑堟伅鏄潵鑷淥K鈥濇寜閽繕鏄潵鑷淐ancel鈥濇寜閽?/p>

鏄劇ず瀵硅瘽妗嗙殑鏂規硶涓嶮FC鐩鎬技錛屽垱寤轟竴涓柊瀵硅瘽妗嗙被鐨勫疄渚嬶紝鐒跺悗璋冪敤DoModal()鏂規硶銆傜幇鍦ㄦ垜浠繑鍥炰富紿楀彛錛屾坊鍔犱竴涓甫鏈堿bout鑿滃崟欏圭殑鑿滃崟鐢ㄦ潵鏄劇ず鎴戜滑鐨勫璇濇錛岃繖闇瑕佸啀娣誨姞涓や釜娑堟伅鍝嶅簲鍑芥暟錛屼竴涓槸鍝嶅簲WM_CREATE錛屽彟涓涓槸鍝嶅簲鑿滃崟鐨処DC_ABOUT鍛戒護銆?/p>

class CMyWindow : public CWindowImpl<CMyWindow, CWindow, CFrameWinTraits>,
                  public CPaintBkgnd<CMyWindow,RGB(0,0,255)>
{
public:
    BEGIN_MSG_MAP(CMyWindow)
        MESSAGE_HANDLER(WM_CREATE, OnCreate)
        COMMAND_ID_HANDLER(IDC_ABOUT, OnAbout)
        // ...
        CHAIN_MSG_MAP(CPaintBkgndBase)
    END_MSG_MAP()
 
    LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
    HMENU hmenu = LoadMenu ( _Module.GetResourceInstance(),
                             MAKEINTRESOURCE(IDR_MENU1) );
 
        SetMenu ( hmenu );
        return 0;
    }
 
    LRESULT OnAbout(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
    {
    CAboutDlg dlg;
 
        dlg.DoModal();
        return 0;
    }
    // ...
};

鍦ㄦ寚瀹氬璇濇鐨勭埗紿楀彛鐨勬柟寮忎笂鏈変簺涓嶅悓錛孧FC鏄氳繃鏋勯犲嚱鏁板皢鐖剁獥鍙g殑鎸囬拡浼犻掔粰瀵硅瘽妗嗚屽湪ATL涓槸灝嗙埗紿楀彛鐨勬寚閽堜綔涓篋oModal()鏂規硶鐨勭涓涓弬鏁頒紶閫掔粰瀵硅瘽妗嗙殑錛屽鏋滆薄涓婇潰鐨勪唬鐮佷竴鏍鋒病鏈夋寚瀹氱埗紿楀彛錛孉TL浼氫嬌鐢?code>GetActiveWindow()寰楀埌鐨勭獥鍙o紙涔熷氨鏄垜浠殑涓繪鏋剁獥鍙o級浣滀負瀵硅瘽妗嗙殑鐖剁獥鍙c?/p>

瀵筁oadMenu()鏂規硶鐨勮皟鐢ㄥ睍紺轟簡CComModule鐨勫彟涓涓柟娉曪紞GetResourceInstance()錛屽畠榪斿洖浣犵殑EXE鐨凥INSTANCE瀹炰緥錛屽拰MFC鐨凙fxGetResourceHandle()鏂規硶鐩鎬技銆傦紙褰撶劧榪樻湁CComModule::GetModuleInstance()錛屽畠鐩稿綋浜嶮FC鐨凙fxGetInstanceHandle()銆傦級

榪欏氨鏄富紿楀彛鍜屽璇濇鐨勬樉紺烘晥鏋滐細

 [About box - 5K]

鎴戜細緇х畫璁瞁TL錛屾垜淇濊瘉!

鎴戜細緇х畫璁瞁TL鐨勶紝鍙槸浼氬湪絎簩閮ㄥ垎銆傛垜瑙夊緱鏃㈢劧榪欎簺鏂囩珷鏄啓緇欎嬌鐢∕FC鐨勫紑鍙戣呯殑錛屾墍浠ユ湁蹇呰鍦ㄦ姇鍏TL涔嬪墠鍏堜粙緇嶄竴浜汚TL銆傚鏋滀綘鏄涓嬈℃帴瑙﹀埌ATL錛岄偅鐜板湪浣犲氨鍙互灝濊瘯鍐欎竴浜涘皬紼嬪簭錛屽鐞嗘秷鎭拰浣跨敤宓屽叆綾伙紝浣犱篃鍙互灝濊瘯鐢ㄧ被鍚戝鏀寔娑堟伅鏄犲皠閾撅紝浣垮畠鑳藉鑷姩娣誨姞娑堟伅鍝嶅簲銆傜幇鍦ㄥ氨寮濮嬶紝鍙抽敭鍗曞嚮CMyWindow欏癸紝鍦ㄥ脊鍑虹殑涓婁笅鏂囪彍鍗曚腑鍗曞嚮鈥?i>Add Windows Message Handler鈥濊彍鍗曢」銆?/p>

鍦ㄧ浜岄儴鍒嗭紝鎴戝皢鍏ㄩ潰浠嬬粛鍩烘湰鐨刉TL紿楀彛綾誨拰涓涓洿濂界殑娑堟伅鏄犲皠瀹忋?/p>

jay 2007-03-09 11:46 鍙戣〃璇勮
]]>
MFC紼嬪簭鍛樼殑WTL鎸囧崡: 涓枃鐗堝簭璦[杞琞http://m.shnenglu.com/yishanhante/articles/19481.htmljayjayFri, 09 Mar 2007 03:43:00 GMThttp://m.shnenglu.com/yishanhante/articles/19481.htmlhttp://m.shnenglu.com/yishanhante/comments/19481.htmlhttp://m.shnenglu.com/yishanhante/articles/19481.html#Feedback0http://m.shnenglu.com/yishanhante/comments/commentRss/19481.htmlhttp://m.shnenglu.com/yishanhante/services/trackbacks/19481.html
浣犱細璇撮偅灝辯敤MFC鍚э紒

鏄殑錛屾垜涓鐩翠嬌鐢∕FC錛屼絾鎴戝MFC宸茬粡瓚婃潵瓚婂帉鍊︿簡銆傞檲鏃х殑綾誨簱浣垮緱瀹冩棤娉曟敮鎸佹搷浣滅郴緇熺殑鏂扮壒鎬?MFC鐨勭被搴撲粠4.21鐗堜箣鍚庡氨娌℃湁鏇存柊浜嗭紝鑰岄偅鏃舵槸1998騫達紝浜轟滑浣跨敤Windows 95鍜寃indows NT4)錛岃噧鑲跨殑娑堟伅鏄犲皠鏈哄埗鍜屼負浜嗗吋瀹規ц屼繚鐣欎笅鏉ョ殑浠g爜浣垮緱紼嬪簭鏁堢巼浣庝笅錛岄潰闈勘鍒扮殑妗嗘灦緇撴瀯浣垮緱鐢熸垚鐨勫簲鐢ㄧ▼搴忓簽澶у茍鍗犵敤榪囧鐨勭郴緇熻祫婧愩傚綋涓涓姛鑳界畝鍗曠殑紼嬪簭浣跨敤鍔ㄦ侀摼鎺ヤ篃瓚呰繃200K錛屽崰鐢?%-4%鐨勭郴緇熻祫婧愭椂錛屾垜鍐沖畾鏀懼純MFC錛屽鎵句竴涓柊鐨勫姛鑳界被浼肩殑綾誨簱銆傛垜鐮旂┒榪囧緢澶氱被浼肩殑浠g爜錛屼笉鏄繃浜庣畝鍗曪紝鏃犳硶鐢ㄤ簬搴旂敤紼嬪簭鐨勫紑鍙戝氨鏄己涔忎唬鐮佸拰鏂囨。鐨勬敮鎸併傚湪CodeProject涓婃湁涓涓悕涓篊lass鐨勭被搴擄紝鎴戜篃鐮旂┒榪囧畠鐨勪唬鐮侊紝鍏峰浜嗗熀鏈殑鐣岄潰妗嗘灦錛屽鎺т歡涔熸湁浜嗙畝鍗曠殑灝佽錛屼絾鏄笉瀹炵敤錛屽簽澶х殑铏氬嚱鏁版満鍒朵嬌寰楀璞¢潪甯歌噧鑲匡紝鏃犳硶鍑忓皯瀵硅祫婧愮殑鍗犵敤銆傛垜鐢氳嚦浠跨収MFC鍋氫簡涓涓畝鍗曠殑綾誨簱miniGUI錛屽艦鎴愪簡鍩烘湰鐨勬鏋惰В鍐蟲柟妗堬紝浣嗘槸鏈鍚庢斁寮冧簡錛屽師鍥犲緢綆鍗曪細鏃犳硶鐢ㄤ簬搴旂敤紼嬪簭鐨勫紑鍙戙備竴涓簲鐢ㄧ▼搴忕晫闈㈡鏋墮敊緇煎鏉傦紝瑕佽冭檻鐨勪簨鎯呭お澶氾紝寮鍙戣呬笉鍙兘鍦ㄥ簲鐢ㄧ▼搴忓拰鐣岄潰妗嗘灦涓ょ嚎浣滄垬銆傚氨鍦ㄦ垜鍗沖皢緇濇湜鐨勬椂鍊欙紝鎴戦亣鍒頒簡WTL銆?

鐢變簬宸ヤ綔鐨勯渶瑕佺粡甯稿紑鍙戜竴浜汣OM緇勪歡錛屽湪瑕佹眰涓嶈兘浣跨敤MFC鐨勫満鍚堝氨鏄敤ATL銆侫TL鎻愪緵浜嗗紿楀彛鐨勯潰鍚戝璞″湴灝佽鍜岀畝鍗曠殑娑堟伅鏄犲皠鏈哄埗錛屼絾鏄疉TL榪囦簬綆鍗曪紝鐢ㄥ畠寮鍙戝簲鐢ㄧ▼搴忓嚑涔庝笉鍙兘銆傝鎯寵ATL鍏峰鐣岄潰妗嗘灦瑙e喅鏂規鐨勫姛鑳借繕闇瑕佸仛寰堝浜嬫儏錛屽垢榪愮殑鏄疻TL灝卞仛浜嗚繖浜涗簨鎯呫俉TL鏄釜寰堝鐗圭殑涓滆タ錛屽畠鐢卞井杞叕鍙鎬竴緹ょ儹鎯呯殑紼嬪簭鍛樼淮鎶わ紝瀹冧粠鏈嚭鐜板湪寰蔣鐨勫畼鏂逛駭鍝佸悕鍗曚笂錛屼絾鍙互浠庡井杞殑瀹樻柟緗戠珯涓嬭澆鏈鏂扮殑WTL銆傚畠娌℃湁姝e紡鐨勬枃妗f敮鎸侊紝鐢╓TL鍋氬叧閿瓧鍦∕SDN涓绱㈠彧鑳藉緱鍒?涓粨鏋滐紝浣嗘槸鍏ㄤ笘鐣岀殑寮鍙戠綉绔欎笂閮芥湁閽堝WTL鐨勮璁虹粍鍜岄偖浠跺垪琛紝浠諱綍闂閮戒細寰楀埌鐑儏鐨勮В絳斻傛垜璁ょ湡鍦板姣斾簡MFC鍜學TL錛屽彂鐜頒簩鑰呮湁寰堝鐩擱氫箣澶勶紝MFC鐨勫姛鑳藉嚑涔庨兘鑳藉湪WTL涓疄鐜幫紝鍙槸鏂規硶涓嶅悓鑰屽凡銆傛垜鍑犱箮涓嶈垂鍚圭伆涔嬪姏灝卞皢浠ュ墠鍐欑殑涓涓狹FC紼嬪簭鐢╓TL鏀瑰啓浜嗭紝浣跨敤闈欐侀摼鎺ョ殑WTL紼嬪簭姣斾嬌鐢ㄥ姩鎬侀摼鎺ョ殑MFC紼嬪簭榪樿灝忥紝璧勬簮鍗犵敤鍙湁MFC紼嬪簭鐨勪竴鍗娿?

浣嗘槸涓鏃剁殑鐑儏涓嶈兘瑙e喅鏂囨。緙轟箯鐨勫洶鎵幫紝铏界劧緗戜笂鏈夊緢澶氫嬌鐢╓TL鐨勪緥瀛愬拰璇存槑鏂囩珷錛屽嚑涔庢妸MFC鑳藉疄鐜扮殑鍚勭紼濂囧彜鎬殑鏁堟灉閮藉疄鐜頒簡錛屼絾閮芥槸鍙涘【璇版璇句緧鐛懼獟楗╄Н顑g媹慰浣庤濺鍘濐個濞翠簾妯簱TL鐨勬枃绔犮傚氨鍦ㄨ繖涓椂鍊欐垜鐪嬪埌浜嗚繄鍏嬪皵.鏁?Michael Dunn)鐨勨淲TL for MFC Programmers鈥濈郴鍒楁枃绔狅紝鎴戠殑鎰熻鍜?995騫存垜絎竴嬈¤鍒癕SDN鏃朵竴鏍鳳紝鍑犱箮鏄揩涓嶅強寰呭湴灝嗗叾璇誨畬錛屽悓鏃朵篃钀屽彂浜嗗皢鍏剁炕璇戞垚姹夎鐨勫啿鍔ㄣ備簬鏄粰Michael鍐欎簡灝侀偖浠訛紝甯屾湜鑳藉寰楀埌鎺堟潈灝嗕粬鐨勬枃绔犵炕璇戞垚姹夎(浜嬪疄涓婂湪榪欎箣鍓嶆垜宸茬粡緲昏瘧浜嗕袱绔犱簡)銆傚湪寰楀埌鎺堟潈紜鍚庢墠鍙戠幇榪欎釜宸ヤ綔鏄涔堢殑鍥伴毦錛屼絾涓烘椂宸叉櫄錛屽彧鑳界‖鐫澶寸毊鎾戜笅鍘匯?
鐜板湪浠嬬粛涓涓嬭繄鍏嬪皵.鏁﹁繖涓漢銆傝繄鍏?Mike)浣忓湪闃沖厜鐏跨儌鐨勬礇鏉夌煻錛屾繁鍙楅偅閲屽ぉ姘旂殑瀹犵埍浣夸粬鎰挎剰涓鐩翠綇鍦ㄩ偅閲屻備粬鍦?騫寸駭鏃跺氨寮濮嬪湪Apple //e涓婄紪紼嬪簭錛?995騫翠粠UCLA (鍔犲埄紱忓凹浜氬ぇ瀛︽礇鏉夌煻鍒嗘牎)姣曚笟錛岃幏寰楁暟瀛﹀澹浣嶃傛瘯涓氬悗鍔犵洘璧涢棬閾佸厠(Symantec)鍏徃錛屾垚涓篘orton AntiVirus灝忕粍鐨勮川閲忚瘎浠峰伐紼嬪笀銆備粬鍑犱箮鏄嚜瀛︿簡Windows鍜孧FC緙栫▼錛?999騫翠粬涓篘orton AntiVirus 2000璁捐騫剁紪鍐欎簡鏂扮殑鐣岄潰銆傝繄鍏嬬幇鍦ㄦ槸pressplay(涓嶄箙鎴愪負Napster) 鐨勫紑鍙戜漢鍛樸備粬鏈榪戝紑鍙戜簡涓涓狪E鐨勫伐鍏鋒潯鎻掍歡UltraBar 錛屽彲浠ヨ交鏉懼疄鐜扮箒鐞愮殑緗戠粶鎼滅儲鍔熻兘銆備粬榪樺拰鍒漢鍚堜綔鍒涘姙浜嗕竴瀹惰蔣浠跺紑鍙戝叕鍙革細Zabersoft 錛岃鍏徃鍦ㄦ礇鏉夌煻鍜屾鐧昏禌(涓歸害)閮借鏈夊姙浜嬪銆傝繄鍏嬪枩嬈㈢帺寮圭悆鍜岄獞鑷杞︼紝鍋跺皵涔熺帺涓涓婸layStation錛屼粬榪樹竴鐩村潥鎸佸涔犳硶璇紝瀹樻柟姹夎鍜屾棩璇?
鍙﹀闇瑕佽鏄庡緱鏄垜緲昏瘧鈥淲TL for MFC Programmers鈥濈郴鍒楁枃绔犱笉鏄負浜嗚幏寰椾換浣曞埄鐩婏紝鍙槸鎯充負澶у鎻愪緵涓浜涙柊鐨勬濊礬銆傚鏋滀綘鏄疢FC鐨勫潥瀹氭崓鍗咃紝鐪嬪埌榪欓噷浣犲氨鍙互鍋滀笅鏉ヤ簡錛屽啀鐪嬩笅鍘繪槸嫻垂浣犵殑鏃墮棿(甯屾湜浣犵湅浜嗗墠闈㈠嚑孌墊枃瀛楄繕鑳芥尯浣忎笉瑕佸憰鍚?銆傚鏋滀綘鏄釜瀵瑰彟綾諱簨鐗╁厖婊$儹鎯呯殑紼嬪簭鍛橈紝浣犱笉鑳戒笉鐮旂┒WTL錛屽畠鐪熺殑鏄竴搴у疂钘忔渶鍚庣敤鎴戠殑鏈嬪弸瀵規垜鐨勭炕璇戞枃绔犵殑璇勪環鏉ョ粨鏉熲淲TL for MFC Programmers鈥濅腑鏂囩増鐨勫簭璦錛氱炕璇戞按騫沖拰浣犵敤鐨勯紶鏍囦竴鏍風儌錛?br />


jay 2007-03-09 11:43 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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精品免费视频| 麻豆精品在线播放| 国产精品自拍在线| 99视频在线精品国自产拍免费观看| 久久野战av| 亚洲大片在线观看| 亚洲国产专区校园欧美| 日韩性生活视频| 午夜日韩av| 久久最新视频| 国产精品成av人在线视午夜片| 国产日韩欧美成人| 亚洲国产二区| 中文国产亚洲喷潮| 久久国产精品毛片| 在线国产精品播放| 亚洲精品之草原avav久久| 一本色道久久综合一区| 亚洲综合色视频| 久久久久久久久久久一区| 美女爽到呻吟久久久久| 亚洲全部视频| 午夜一区二区三区在线观看| 久久天堂成人| 国产精品ⅴa在线观看h| 一区二区三区中文在线观看| 亚洲理论电影网| 欧美在线一区二区| 亚洲激情av在线| 欧美中文在线视频| 欧美国产在线电影| 国产视频在线一区二区| 亚洲最新视频在线| 久久综合中文字幕| 亚洲香蕉网站| 欧美激情bt| 国模一区二区三区| 亚洲一区二区在线视频| 欧美激情一区二区三区四区| 新片速递亚洲合集欧美合集| 欧美日韩精品二区| 亚洲电影在线免费观看| 亚洲第一精品夜夜躁人人爽| 亚洲午夜免费福利视频| 欧美大片在线观看一区二区| 西瓜成人精品人成网站| 欧美先锋影音| 在线亚洲美日韩| 欧美激情bt| 久热爱精品视频线路一| 国内外成人在线视频| 亚洲男同1069视频| 亚洲免费观看在线观看| 欧美黄色小视频| 亚洲欧洲精品天堂一级| 媚黑女一区二区| 亚洲社区在线观看| 亚洲国产日韩一区二区| 久久久国际精品| 午夜欧美大尺度福利影院在线看| 欧美日韩午夜在线| 99在线热播精品免费99热| 欧美大片一区| 欧美www视频| 亚洲观看高清完整版在线观看| 久久精品日产第一区二区| 亚洲综合日韩在线| 国产午夜亚洲精品不卡| 久久亚洲综合色| 久久精品国内一区二区三区| 国产综合精品| 乱中年女人伦av一区二区| 久久久久一区二区三区| 伊人色综合久久天天| 亚洲成色www8888| 欧美日本一区二区三区| 午夜精品电影| 久久成人在线| 99国产一区二区三精品乱码| 99av国产精品欲麻豆| 国产精品推荐精品| 麻豆精品在线观看| 欧美日韩情趣电影| 久久精品综合一区| 欧美成年人网站| 亚洲一级一区| 久久人人精品| 99在线精品免费视频九九视| 亚洲欧美日韩国产| 亚洲国产日韩在线一区模特| 亚洲日本aⅴ片在线观看香蕉| 欧美日韩一区不卡| 久久久久综合| 欧美激情亚洲国产| 欧美在线观看www| 男女av一区三区二区色多| 亚洲性av在线| 久久久国产精品一区二区三区| 亚洲精品视频啊美女在线直播| 一区二区激情视频| 国外成人网址| 亚洲裸体视频| 国产中文一区| 一区二区三区欧美成人| 韩日精品视频一区| 中文成人激情娱乐网| 在线观看一区| 亚洲综合日韩在线| 一区二区三区福利| 久久夜色精品亚洲噜噜国产mv| 亚洲永久免费av| 久久综合色影院| 校园激情久久| 欧美日韩免费| 亚洲国产欧美在线人成| 激情五月婷婷综合| 亚洲欧美在线磁力| 亚洲在线播放| 欧美日韩黄色大片| 亚洲精品国产精品国自产在线 | 日韩天堂av| 亚洲尤物视频网| 亚洲日本中文字幕| 久久久噜噜噜久久人人看| 在线视频欧美日韩| 欧美韩日一区二区| 欧美护士18xxxxhd| 激情成人av在线| 欧美亚洲视频在线观看| 午夜精品久久99蜜桃的功能介绍| 欧美另类亚洲| 欧美电影电视剧在线观看| 国模精品娜娜一二三区| 午夜精品亚洲| 久久国产综合精品| 国产一区二区高清视频| 亚洲欧美日韩精品久久久| 亚洲欧美在线aaa| 欧美亚洲第一区| 亚洲视频香蕉人妖| 先锋影音国产精品| 国产农村妇女毛片精品久久莱园子 | 欧美黄色影院| 尤物99国产成人精品视频| 欧美伊人久久久久久久久影院| 亚洲一区二区三区免费观看| 欧美三级视频在线播放| 中文一区字幕| 欧美在线www| 国产综合色在线| 玖玖玖国产精品| 亚洲国产天堂久久综合| 99精品久久| 国产精品永久免费视频| 欧美在线视频不卡| 欧美福利电影网| 亚洲另类一区二区| 欧美视频在线观看免费| 欧美在线一级视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 黄色成人在线免费| 久久综合图片| 一区二区三区 在线观看视频| 亚洲在线观看免费| 国内自拍视频一区二区三区 | 夜夜嗨网站十八久久| 欧美在线观看日本一区| 伊人春色精品| 欧美日韩精品一二三区| 亚洲在线日韩| 欧美成年人网| 亚洲欧美日韩网| 在线看一区二区| 国产精品黄色| 免播放器亚洲| 亚洲婷婷在线| 久久精品国产久精国产思思| 欧美一级成年大片在线观看| 久久综合导航| 亚洲欧洲日夜超级视频| 午夜精品理论片| 亚洲激情影视| 国产午夜精品美女视频明星a级| 美女福利精品视频| 亚洲欧美日韩成人| 亚洲精品在线观| 蜜臀久久99精品久久久画质超高清| 亚洲一区二区三区在线| 亚洲国产91| 狠狠色丁香婷婷综合| 国产精品视频午夜| 欧美黑人国产人伦爽爽爽| 欧美一区二区三区男人的天堂| 日韩一区二区精品在线观看| 女主播福利一区| 久久精品二区亚洲w码| 亚洲视频在线免费观看| 99精品国产在热久久婷婷| 亚洲精品1区| 在线播放国产一区中文字幕剧情欧美 |