;
帖子
3919 
精华
积分
11710 
鱼币
0 ¥ 
来自
大连 
在线时间
1858 小时 
注册时间
2007-6-11 
最后登录
2009-10-20 

贴图大师勋章新人进步勋章宣传大使勋章论坛元老勋章

3
发表于 2009-1-5 19:48 | 只看该作者
WTL for MFC Programming瀹炶返绡 --- 涓涓嚜瀹氫箟ComboBox鐨勭Щ妞嶈繃绋(涓) - 缂栫▼搴 - Powered by SupeSite

浣犵殑浣嶇疆锛缂栫▼搴 >> 璧勮 >> VC >> CC++MFC >> 璇︾粏鍐呭 鍦ㄧ嚎鎶曠ǹ

WTL for MFC Programming瀹炶返绡 --- 涓涓嚜瀹氫箟ComboBox鐨勭Щ妞嶈繃绋(涓)

鍙戝竷: 2008-6-26 11:25 |  浣滆: admin |   鏌ョ湅: 9娆

鎴戜滑閲嶆柊鍥炲埌璧风偣锛屾潵鐪嬬湅閭i噷鍑轰簡閿欍備粩缁嗗湴鐮旇浠g爜浠ュ悗鍙戠幇锛屼簨浠舵槸鎬庝箞浼犻掑埌MSG_MAP鐨勫憿锛熼毦閬撴垜浠氳繃璧嬪煎皢涓涓獥浣撳彞鏌勪紶杩涙潵锛屾垜浠湪杩欎釜绫讳腑瀹氫箟鐨凪SG_MAP灏辫兘鑷姩鐨勮繛鎺ュ埌杩欎釜鍙ユ焺涓婂悧锛熻繖鏄剧劧鏄湡鐨勪笉鍙兘銆

閭d箞娌℃湁灏哅SG_MAP杩炴帴鍒扮獥浣撳彞鏌勫緢鍙兘鏄帶浠剁被鏃犳硶鏀跺埌浠讳綍浜嬩欢鐨勫師鍥犮傞偅涔堝浣曞皢MSG_MAP杩炴帴鍒扮獥浣撳彞鏌勪笂鍛紵鍘熶功涓彁鍒颁竴涓噸瑕佺殑鍑芥暟锛孋WindowImpl::SubclassWindow()銆傛垜浠啀娆℃洿鏀规垜浠殑鎺т欢绫伙細

CComboBoxEx& operator =(HWND hWnd) {

CWindowImpl< CComboBoxEx, CComboBox>::SubclassWindow(hWnd);

return *this;

}

涓娴嬩箣涓嬶紝澶у悆涓鎯娿備笉浠呴噸鐢讳簨浠惰姝g‘瑙﹀彂锛岃繛鏋愭瀯鍑芥暟涓殑娌℃湁Attach鐨凞etach杩欎釜鎬敤娉曚篃鍙互鍒犻櫎浜嗐備负浠涔堜細杩欐牱鍛紵鎺㈢┒杩欎釜闂涔嬪墠锛岃鎴戜滑鍏堢湅鐪嬪師涔︿娇鐢ㄧ殑DDX_CONTROL瀹 - 瀹冨彧閽堝CWindowImpl鐨勬淳鐢熺被璧蜂綔鐢 - 鏄庝箞鍥炰簨銆傚師鐮佸涓嬶細

#define DDX_CONTROL(nID, obj) \

if(nCtlID == (UINT)-1 || nCtlID == nID) \

DDX_Control(nID, obj, bSaveAndValidate);

// Full control subclassing (for CWindowImpl derived controls)

template

void DDX_Control(UINT nID, TControl& ctrl, BOOL bSave)

{

if(!bSave && ctrl.m_hWnd == NULL)

{

T* pT = static_cast(this);

ctrl.SubclassWindow(pT->GetDlgItem(nID));

}

}

浠庡師鐮佸彲浠ョ湅鍒帮紝DDX_CONTROL瀹忓拰DDX_CONTROL_HANDLER瀹忓疄鐜扮殑鍖哄埆鍙槸锛屽墠鑰呬娇鐢⊿ubclassWindow锛岃屽悗鑰呬娇鐢ㄦ搷浣滅鈥=鈥濄傚鏋滄妸鎴戜滑涓婇潰鐨勪唬鐮佽仈绯昏捣鏉ワ紝鍦ㄦ搷浣滅鈥=鈥濈殑澶勭悊鍑芥暟涓皟鐢⊿ubclassWindow锛屽叾瀹炲氨绛変簬鏄槑鐫浣跨敤DDX_CONTROL_HANDLER瀹忥紝鏆楀湴閲屽嵈鎶奃DX_CONTROL瀹忓疄鐜颁簡銆傚師鏉ユ兂鍑洪棬锛岀粨鏋滃厛缁曠潃鍚庨櫌璺戜簡3鍦堬紝杩欑湡鏄竴涓ぇ绗戣瘽銆

涓轰粈涔堜細杩欐牱鍛紵涓嶄娇鐢―DX_CONTROL瀹忔槸鍥犱负CComboBox娌℃湁SubclassWindow鍑芥暟锛岃屾槸鐢–ComboBox鏄洜涓哄湪MFC涓瑿ComboBoxEx灏辨槸浠嶤ComboBox娲剧敓锛岀Щ妞嶇殑鏃跺欏綋鐒跺惧悜浜庨夋嫨鍚屽悕鐨勭被锛岃屼笉鏄疌WindowImpl杩欐牱鎬殑澹版槑鏂规硶銆

鍙槸杩欓噷蹇借浜嗕竴涓熀鏈殑WTL鐗规э紝鐢变簬WTL鍩轰簬ATL锛岃岃璁TL灏辨槸涓轰簡灏嗘帴鍙e拰瀹炵幇鍒嗗紑锛屾墍浠ュ湪WTL涓墍鏈変笉甯mpl瀛楁牱鐨勭被閮戒笉鏄疄鐜扮被锛屽儚CWindow锛孋Button锛孋ComboBox绛夌瓑锛屼粬浠彧鏄寘鍚竴涓彞鏌勶紝娌℃湁鑷繁鐨勪簨浠讹紝浠栦滑鍙槸璐熻矗涓浆锛屽皝瑁呮帶浠朵簨浠剁瓑绛夈傚儚CComboBox鐨勬搷浣滅鈥=鈥濆氨鍙槸涓涓祴鍊艰鍙ヨ屽凡銆傝孌DX_CONTROL_HANDLER姝f槸涓鸿繖浜涚被鏈嶅姟鐨勶紝褰撶劧濡傛灉鎴戜滑娉ㄦ剰鍒拌繖涓畯寰楁敞閲婏紝涔熻鏃╁氨鍙戠幇杩欎釜闂浜嗭紝杩樿寰楀悧锛熷湪杩欓噷閲嶆俯涓涓嬪惂锛

// Full control subclassing (for CWindowImpl derived controls)

template

void DDX_Control(UINT nID, TControl& ctrl, BOOL bSave)

// Simple control attaching (for HWND wrapper controls)

template

void DDX_Control_Handle(UINT nID, TControl& ctrl, BOOL bSave)

濂戒簡锛屽湪鐜父鍦扮悆涓鍛ㄤ互鍚庯紝鎴戜滑鍙堝洖鍒颁簡璧风偣锛岃櫧鐒惰垂浜嗕笉灏戠殑鍔涙皵锛屼絾涔熸悶娓呮涓嶅皯鐨勪笢瑗匡紝涓嬮潰澶ф鍦版荤粨涓涓嬶細

WTL鐨勭被鍖呭惈鎺ュ彛绫伙紙鍙寘鍚獥浣撳彞鏌勫拰浜嬩欢鐨勫皝瑁咃級鍜屽疄鐜扮被锛堝彲浠ユ嫢鏈夎嚜宸辩殑浜嬩欢锛夛紝瑕佹牴鎹叿浣撴儏鍐垫湁閫夋嫨鐨勪娇鐢ㄣ

WTL涓嶄細鑷姩閿姣佺獥浣撳彞鏌勶紙褰撶劧鏄寚鎺ュ彛绫伙級锛屾墍浠ttach鎿嶄綔浠ュ悗瑕佽鐫Detach

娉ㄦ剰鍖呭惈鏈塇ANDLE鐨勫畯锛岀被锛屽嚱鏁帮紝瀹冧滑寰寰鏄帴鍙g被鎴栦负鎺ュ彛绫绘湇鍔$殑锛屽涓婇潰鎵璇寸殑DDX_Control_Handle锛屼互鍙奀DCHandle绛夌瓑銆

DDX鏄氳繃瀹忓畾涔夐噸杞紺WinDataExchange::DoDataExchange()鍑芥暟瀹炵幇鐨

娑堟伅鍙嶅皠鏄湪鍙栭亾鍙戦佹秷鎭殑绐椾綋鍙ユ焺鍚庯紝閫氳繃鍍忓畠鍥炲彂鐩稿簲鐨勬秷鎭潵瀹炵幇鐨勩

褰撲綘鎯宠杩欎笉鍙兘鐨勬椂鍊欙紝寰寰鏄綘鍦ㄨ皟鐢ㄧ殑鏂规硶涓婂嚭鐜颁簡閿欒銆

鎵撳嵃 | 鏀惰棌姝ら〉 |  鎺ㄨ崘缁欏ソ鍙 | 涓炬姤
涓婁竴绡 涓嬩竴绡
 

璇勫垎锛0

鍙戣〃璇勮
鏌ョ湅鍏ㄩ儴鍥炲銆愬凡鏈0浣嶇綉鍙嬪彂琛ㄤ簡鐪嬫硶銆