锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久综合亚洲色HEZYO国产,99久久夜色精品国产网站,中文字幕亚洲综合久久菠萝蜜http://www.shnenglu.com/nacci/琚害鏉熺殑鏃ユ棩澶滃錛屽仠涓嶄笅鏉ョ殑鏃墮棿銆?/description>zh-cnFri, 27 Jun 2025 22:31:52 GMTFri, 27 Jun 2025 22:31:52 GMT60- 褰掓潵http://www.shnenglu.com/nacci/archive/2010/02/14/107732.htmlnaccinacciSun, 14 Feb 2010 13:00:00 GMThttp://www.shnenglu.com/nacci/archive/2010/02/14/107732.htmlhttp://www.shnenglu.com/nacci/comments/107732.htmlhttp://www.shnenglu.com/nacci/archive/2010/02/14/107732.html#Feedback0http://www.shnenglu.com/nacci/comments/commentRss/107732.htmlhttp://www.shnenglu.com/nacci/services/trackbacks/107732.html璺濈涓婁竴綃囧崥瀹紝宸茬粡涓夊勾鏈変綑銆傚煎緱搴嗗垢鐨勬槸錛岀幇鍦ㄨ嚜宸變粛鏃т繚鎸佺潃瀵逛簬搴曞眰鎶鏈煡璇嗙殑鎵х潃鍜岀儹鎯咃紝鑷繁浠嶆棫璧板湪搴曞眰鎶鏈帰绱㈠拰鐮旂┒鐨勮礬涓娿傚敖綆″凡緇忚秺鏉ヨ秺澶氱殑浠庝簨綆$悊宸ヤ綔錛屾垜鍗翠竴鐩撮兘涓嶆柇鐨勬彁閱掕嚜宸憋紝鎶鏈槸鑷繁鐨勭伒欖傦紝灝卞儚鎴戞浘緇忓洜涓烘妧鏈彇鍚戜笂鐨勪笌浼椾笉鍚岃屾湁浜嗙幇鍦ㄨ繖浠藉伐浣滀竴鏍楓?br>
騫村墠錛孞effrey鎵炬垜璋堣繃錛屽叧浜庤亴涓氬彇鍚戜笂鐨勬兂娉曘備粩緇嗘兂浜嗘兂錛屾垜浠嶇劧鎯沖湪鎶鏈亾璺笂璧板緱鏇磋繙錛屽湪搴曞眰鎶鏈笂璧板緱鏇磋繙銆傚敖綆″悇縐嶅弽闈㈢殑鎯蟲硶鍜岀幇瀹炴憜鍦ㄧ溂鍓嶏紝浣嗘槸錛屾垜甯屾湜鑷繁濮嬬粓鑳芥湁涓棰楀媷浜庡垱閫犵殑鍐呭績銆?br>
鏂扮殑涓騫達紝鑷繁瑕佹洿鍔犲姫鍔涳紝榪樻槸璁╄嚜宸辯戶緇啓涓嬪幓鍚э紝璁╁啓浣滄垚涓轟竴縐嶅潥鎸侊紝璁╁涔犳垚涓轟竴縐嶄範鎯紝璁╁垎浜垚涓轟竴縐嶅揩涔愶紝璁╄矗浠繪垚涓轟竴縐嶇幇瀹炪?/p>

]]> - 鍋囧http://www.shnenglu.com/nacci/archive/2006/05/23/7541.htmlnaccinacciTue, 23 May 2006 12:01:00 GMThttp://www.shnenglu.com/nacci/archive/2006/05/23/7541.htmlhttp://www.shnenglu.com/nacci/comments/7541.htmlhttp://www.shnenglu.com/nacci/archive/2006/05/23/7541.html#Feedback1http://www.shnenglu.com/nacci/comments/commentRss/7541.htmlhttp://www.shnenglu.com/nacci/services/trackbacks/7541.html聽浜烘槸闇瑕佹嬁鍑鴻鍔ㄥ拰鐪熻瘹鏉ヨ瘉鏄庤嚜宸茬殑,榪囧幓鐨勫緱澶變笉鑳界敤鍋囧鏉ユ尳鍥炲拰琛ユ晳,鍙兘鐢ㄤ漢鐢熶腑鐨勭幇瀹炲拰鐪煎墠鐨勬椂鍏夌敋鑷充互鍚庝竴鐢熺殑鏃墮棿鍔姏鍘諱簤鍙?榪欐槸浜轟笉鏂繘姝?涓嶆柇鍚戜笂鎵瑕佷粯鍑虹殑涓縐嶄唬浠楓偮犅?br />聽聽聽聽聽聽聽聽聽聽鎵浠ユ垜榪樻槸瑕佽,涓嶈鍦ㄥ亣濡備箣鍚庡啀鍋囪鏈夊鏋?浜虹敓鏍規湰娌℃湁鍋囧錛浡犅?br />聽聽聽聽聽聽聽聽聽聽鎵浠ユ垜瑕佽,鎴戝湪鍋囧涔嬪悗,閮芥槸鍦ㄨ鐪熺殑鏀規閿欒,浠ユ眰鑷凡鏇村揩鏇村ソ鍦版帴榪戞垜鑷凡蹇冪洰涓殑瀹岀編!聽

]]> - 紱誨紑http://www.shnenglu.com/nacci/archive/2006/05/23/7520.htmlnaccinacciMon, 22 May 2006 16:22:00 GMThttp://www.shnenglu.com/nacci/archive/2006/05/23/7520.htmlhttp://www.shnenglu.com/nacci/comments/7520.htmlhttp://www.shnenglu.com/nacci/archive/2006/05/23/7520.html#Feedback1http://www.shnenglu.com/nacci/comments/commentRss/7520.htmlhttp://www.shnenglu.com/nacci/services/trackbacks/7520.html
DKP璁板綍閲屾垜浠緣鐓岀殑鐬棿錛屾兂璧蜂簡浠ュ線鐨勭縐嶇殑鎰熷姩錛屽敖綆¤繖縐嶆劅瑙変笉鑳芥案椹誨績闂達紝鍗村湪鎴戝績閲屽垝涓婁簡涓鍒頒激鐥曘?span lang="EN-US">
聽聽聽
聽聽聽
聽聽聽
聽聽聽
聽聽聽
聽聽聽
聽聽聽
聽聽聽 寰堟兂鍐嶅啓錛屽嵈宸叉棤璇紝鍥犱負蹇冮噷鐪熺殑鎵垮彈涓嶄簡榪欎簺鍥炲繂錛屾垜寰堟兂鍍忔垝閰掍竴鏍鋒妸浣犳垝鎺夛紝浣嗘垜鐭ラ亾榪欐槸鍋氫笉鍒扮殑錛屽叾瀹炶蹇嗕細涓鐩村瓨鍦紝鎵浠ヨ浣犺鐩鎬俊錛屼綘涓鐩村湪璁╂垜鐤肩棝鈥︹?/span>

]]>- MFC婕皥錛堜簲錛夆斺旀秷鎭殑璺敱錛?錛?/title>http://www.shnenglu.com/nacci/archive/2006/05/19/7395.htmlnaccinacciFri, 19 May 2006 01:08:00 GMThttp://www.shnenglu.com/nacci/archive/2006/05/19/7395.htmlhttp://www.shnenglu.com/nacci/comments/7395.htmlhttp://www.shnenglu.com/nacci/archive/2006/05/19/7395.html#Feedback3http://www.shnenglu.com/nacci/comments/commentRss/7395.htmlhttp://www.shnenglu.com/nacci/services/trackbacks/7395.html闃呰鍏ㄦ枃

]]> - MFC婕皥錛堝洓錛夆斺旀秷鎭殑璺敱http://www.shnenglu.com/nacci/archive/2006/05/18/7365.htmlnaccinacciThu, 18 May 2006 09:29:00 GMThttp://www.shnenglu.com/nacci/archive/2006/05/18/7365.htmlhttp://www.shnenglu.com/nacci/comments/7365.htmlhttp://www.shnenglu.com/nacci/archive/2006/05/18/7365.html#Feedback2http://www.shnenglu.com/nacci/comments/commentRss/7365.htmlhttp://www.shnenglu.com/nacci/services/trackbacks/7365.html鏈変簡娑堟伅鏄犲皠琛紝濡備綍鍒╃敤鍛紵娑堟伅濡備綍琚垎闂ㄥ埆綾葷殑媧懼彂鍑哄幓鐨勶紵
鐢ㄦ渶鍩烘湰鐨勪竴鍙ヨ瘽姒傝堪錛岄挬瀛愬嚱鏁拌搗浜嗗緢澶т綔鐢ㄣ傛晠浜嬫槸榪欐牱鐨勶紝鏈変簺婕暱錛屼篃闇瑕佷簺鑰愬績銆?br />
MFC涓秷鎭垎涓?綾伙細
聽1. WM_COMMAND錛氭墍鏈夌殑UI緇勪歡鍜屽姞閫熼敭閮戒細浜х敓榪欑娑堟伅錛屾墍鏈夋淳鐢熶簬CCmdTarget鐨勭被閮芥湁鑳藉姏澶勭悊璇ユ秷鎭?br />聽2. 鏍囧噯娑堟伅錛氶櫎WM_COMMAND涔嬪鐨刉M_xx娑堟伅閮芥槸鏍囧噯娑堟伅錛屾淳鐢熶簬CWnd鐨勭被閮芥湁鑳藉姏澶勭悊璇ユ秷鎭?br />聽3. 鎺т歡閫氱煡娑堟伅錛氱敤浜庡瓙紿楀彛鎺т歡鍚戠埗紿楀彛鍙戦佺殑娑堟伅
鍦∕FC鐨勬秷鎭槧灝勮〃鐨勫緩绔嬩腑錛岄氳繃涓緇勫畯錛屼綘灝卞彲浠ヨ鑷繁鐨勭被鍏堜簬鐖剁被澶勭悊鏌愪簺Windows娑堟伅錛岃繖縐嶈涓哄緢鍍忚櫄鍑芥暟錛屽彧鏄垜浠噸杞界殑鍐呭涓嶆槸铏氬嚱鏁幫紝鑰屾槸娑堟伅銆?/font>
鎺ㄥ姩娑堟伅鐨勬車
絎竴闃舵 紿楀彛榪囩▼
鍦ㄤ駭鐢熶竴涓獥鍙g殑鏃跺欙紝浼氳皟鐢–FrameWnd::Create錛屾墍鏈夌殑鏁呬簨涔熼兘浠庤繖閲屽睍寮銆備笅闈㈢殑浠g爜涓轟簡綆媧侊紝鍘繪帀浜嗕笉鐩稿叧鐨勪唬鐮?br />
BOOL聽CFrameWnd::Create(鈥?聽
{
聽聽聽聽
//
聽鈥?/span>
聽聽聽聽
if
聽(
!
CreateEx(鈥?)聽
{
聽聽聽聽聽聽聽聽
//
聽鈥?/span>
聽聽聽聽}
聽聽聽聽
//
聽鈥?/span>
}
BOOL聽CWnd::CreateEx(鈥?聽
{
聽聽聽聽
//
聽鈥?/span>
聽聽聽聽AfxHookWindowCreate(
this
);
聽聽聽聽HWND聽hWnd聽
=
聽::CreateWindowEx(鈥?;
聽聽聽聽
//
聽鈥?/span>
}
void
聽AFXAPI聽AfxHookWindowCreate(CWnd
*
聽pWnd)聽
{
聽聽聽聽
//
聽鈥?/span>
聽聽聽聽
if
聽(pThreadState
->
m_hHookOldCbtFilter聽
==
聽NULL)聽
{
聽聽聽聽聽聽聽聽pThreadState
->
m_hHookOldCbtFilter聽
=
聽::SetWindowsHookEx(WH_CBT,
聽聽聽聽聽聽聽聽_AfxCbtFilterHook,聽NULL,聽::GetCurrentThreadId());
聽聽聽聽聽聽聽聽
//
聽鈥?/span>
聽聽聽聽}
聽聽聽聽
//
聽鈥?/span>
聽聽聽聽pThreadState
->
m_pWndInit聽
=
聽pWnd;
}
榪欐牱錛岄氳繃AfxHookWindowCreate錛屽湪褰撳墠綰跨▼涓畨瑁呬簡涓涓挬瀛愶紝鐢ㄦ潵鎷︽埅鍜岀獥鍙g浉鍏崇殑浜嬩歡錛屾瘡褰擄細
1. 鍙︿竴涓獥鍙f垚涓篴ctive錛?br />2. 浜х敓鎴栨懅姣佷竴涓獥鍙?br />3. Minimize鎴杕aximize涓涓獥鍙o紱
4. 縐誨姩鎴栫緝鏀句竴涓獥鍙o紱
5. 瀹屾垚涓涓潵鑷郴緇熻彍鍗曠殑鍛戒護錛?br />6. 浠庣郴緇熼槦鍒椾腑鍙栧嚭涓涓秷鎭紱
鏃訛紝閮戒細鍏堣皟鐢╛AfxCbtFilterHook錛屾帴涓嬫潵鐪嬬湅閽╁瓙鍑芥暟浣滀簡浠涔堬細
LRESULT聽CALLBACK

_AfxCbtFilterHook(
int
聽code,聽WPARAM聽wParam,聽LPARAM聽lParam)聽
{
聽聽聽聽
//
聽鈥?/span>
聽聽聽聽WNDPROC聽afxWndProc聽
=
聽AfxGetAfxWndProc();
聽聽聽聽oldWndProc聽
=
聽(WNDPROC)SetWindowLongPtr(hWnd,聽GWLP_WNDPROC,(DWORD_PTR)afxWndProc);
聽聽聽聽
//
聽鈥?/span>
}
WNDPROC聽AFXAPI聽AfxGetAfxWndProc()聽
{
聽聽聽聽
//
聽鈥?/span>
聽聽聽聽
return
聽
&
AfxWndProc;
}
榪欐牱錛宊AfxCbtFilterHook鐨勫伐浣滄葷粨璧鋒潵灝辨槸閫氳繃紿楀彛瀛愮被鍖栵紝鎶婃柊寤虹殑紿楀彛鐨勭獥鍙h繃紼嬭緗垚AfxWndProc銆?br />鍒拌繖閲岋紝鎴戜滑緇堜簬鎵懼埌浜嗙獥鍙h繃紼嬨?br />
緇撹
CFrameWnd::Create鍒涘緩紿楀彛璋冪敤CWnd::CreateEx
CWnd::CreateEx璋冪敤AfxHookWindowCreate鍑嗗涓虹獥鍙h緗挬瀛?br />AfxHookWindowCreate璋冪敤::SetWindowHookEx涓虹獥鍙h緗簡涓涓猈H_CBT綾誨瀷鐨勯挬瀛愭潵榪囨護娑堟伅錛屽茍鎶婅繃婊ゅ嚱鏁拌緗垚_AfxCbtFilterHook
_AfxCbtFilterHook閫氳繃紿楀彛瀛愮被鍖栬緗獥鍙g殑紿楀彛榪囩▼涓篈fxWndProc
榪欐牱錛岄氳繃::DispatchMessage鍙戦佺粰紿楀彛鐨勬秷鎭氨浼氭簮婧愪笉鏂湴閫佸埌AfxWndProc涓潵錛屽彲浠ユ兂鍒幫紝AfxWndProc鍒╃敤MFC鐨勬秷鎭槧灝勮〃錛屽垎闂ㄥ埆綾葷殑瀵規秷鎭繘琛屽垎嫻併?br />
錛堝緟緇︹︼級

]]> - MFC婕皥錛堜笁錛夆斺旀秷鎭槧灝?/title>http://www.shnenglu.com/nacci/archive/2006/05/18/7363.htmlnaccinacciThu, 18 May 2006 08:31:00 GMThttp://www.shnenglu.com/nacci/archive/2006/05/18/7363.htmlhttp://www.shnenglu.com/nacci/comments/7363.htmlhttp://www.shnenglu.com/nacci/archive/2006/05/18/7363.html#Feedback4http://www.shnenglu.com/nacci/comments/commentRss/7363.htmlhttp://www.shnenglu.com/nacci/services/trackbacks/7363.html
MFC涓殑娑堟伅寰幆鍛紵鎴戜滑鐔熸倝鐨剆witch鈥︹ase鈥︹﹀埌鍝噷鍘諱簡錛?br />
鍦∕FC涓紝娑堟伅鐨勫驚鐜茍涓嶆槸鐢╯witch鈥︹ase鈥︹﹀疄鐜扮殑錛屽畠渚濊禆浜庝竴寮犵敱紼嬪簭鑷韓瀹氫箟鐨勬秷鎭綉銆?br />
棣栧厛錛孧FC鐢ㄤ竴涓悕涓篈FX_MSGMAP_ENTRY緇撴瀯鏉ュ娑堟伅鐨勪俊鎭繘琛屽皝瑁咃細
struct
聽AFX_MSGMAP_ENTRY

{
銆銆UINT聽nMessage;聽聽聽
//
聽windows聽message
銆銆UINT聽nCode;聽聽聽聽聽聽銆
//
聽control聽code聽or聽WM_NOTIFY聽code
銆銆UINT聽nID;聽聽聽聽聽聽聽聽銆銆
//
聽control聽ID聽(or聽0聽for聽windows聽messages)
銆銆UINT聽nLastID;聽聽聽聽銆
//
聽used聽for聽entries聽specifying聽a聽range聽of聽control聽id's
銆銆UINT_PTR聽nSig;聽聽聽銆
//
聽signature聽type聽(action)聽or聽pointer聽to聽message聽#
銆銆AFX_PMSG聽pfn;聽聽聽聽
//
聽routine聽to聽call聽(or聽special聽value)
}
;
鍏朵腑銆typedef void (AFX_MSG_CALL CCmdTarget::*AFX_PMSG)(void);
涔嬪悗錛岄氳繃涓涓摼琛紝鎶婅繖浜涙弿榪版秷鎭殑緇撴瀯緇勭粐璧鋒潵錛屾瀯鎴愭秷鎭槧灝勮〃鐨勭粨鏋勬槸AFX_MSGMAP
struct
聽AFX_MSGMAP銆
{
銆銆
const
聽AFX_MSGMAP
*
聽pBaseMap;
銆銆
const
聽AFX_MSGMAP_ENTRY
*
聽lpEntries;
}
;
榪欐牱涓涓狝FX_MSGMAP瀵硅薄灝辨垚浜嗘瀯寤烘秷鎭槧灝勮〃鐨勫叧閿漢鐗╋紝瀹冧竴鍙墜鎷夌潃鍩虹被鐨凙FX_MSGMAP瀵硅薄錛屽彟涓鍙墜鎷夌潃綾繪湰韜殑娑堟伅鏄犲皠琛紝榪欐牱鍙姝g‘鍦板湪姣忎竴涓被涓兘瀹夋彃涓涓狝FX_MSGMAP瀵硅薄錛岄偅涔堟暣涓秷鎭槧灝勮〃灝卞緩绔嬭搗鏉ヤ簡銆傞偅涔堬紝浣曚負姝g‘鍛紵鍚箟鏈?錛氫竴鏄紜殑璁劇疆pBaseMap錛屼護瀹冩寚鍚戝熀綾伙紝浜屾槸姝g‘鐨勫緩绔嬬被鑷韓鐨勬秷鎭槧灝勮〃銆傝繖涓や釜宸ヤ綔鏄敱4涓畯瀹屾垚鐨勶紝
瀹冧滑鏄細DECLARE_MEMSSAGE_MAP() / BEGIN_MESSAGE_MAP() / ON_COMMAND()錛堟敞錛歄N_COMMAND瀹忓彧鏄負浜嗗鐞嗗懡浠ゆ秷鎭紝瀵逛簬鍏跺畠鐨勬秷鎭繕鏈夊搴旂殑瀹忥紝浣嗘槸鍘熺悊鏄浉鍚岀殑錛?/ END_MESSAGE_MAP()銆?br />璁╂垜浠竴涓釜鐨勭湅鐪嬶細
#define
聽DECLARE_MESSAGE_MAP()聽\
private
:聽\
銆銆
static
聽
const
聽AFX_MSGMAP_ENTRY聽_messageEntries[];聽\
protected
:聽\
銆銆
static
聽
const
聽AFX_MSGMAP聽messageMap;聽\
銆銆
virtual
聽
const
聽AFX_MSGMAP
*
聽GetMessageMap()聽
const
;聽\
榪欎釜瀹忕殑浣滅敤鏈?錛?br />聽1. 鍦ㄧ被涓彃鍏ヤ竴涓潤鎬佹垚鍛榑messageEntries錛岃繖鏄敤鏉ュ瓨鏀劇被瑕佸鐞嗙殑娑堟伅鐨勬暟緇勶紙鍗崇被鏈韓鐨勬秷鎭槧灝勮〃錛?br />聽2.聽 鍙︿竴涓潤鎬佹垚鍛榤assageMap鐢ㄦ潵鎸囧悜鍩虹被鐨勬秷鎭槧灝勮〃
聽3. 瀹夋彃涓涓櫄鍑芥暟錛屽叾鍐呭鏈夊緟瀹炵幇
鎺ヤ笅鏉ワ紝_messageEntries鐨勫垵濮嬪寲錛宮essageMap鐨勬紜寚鍚戯紝GetMessageMap鍑芥暟鐨勫疄鐜拌繖浜涘伐浣滆繕閮芥病鍋氾紝閭f鏄悗涓変釜瀹忕殑璐d換錛屽畠浠欏哄簭浣跨敤錛屾柟鑳藉伐浣滄甯搞?
#define
聽BEGIN_MESSAGE_MAP(theClass,聽baseClass)聽\
聽聽
const
聽AFX_MSGMAP
*
聽theClass::GetMessageMap()聽
const
聽\

聽聽
{聽
return
聽
&
theClass::messageMap;聽}
聽\
聽聽AFX_COMDAT聽
const
聽AFX_MSGMAP聽theClass::messageMap聽
=
聽\

聽聽
{聽
&
baseClass::messageMap,聽
&
theClass::_messageEntries[
0
]聽}
;聽\
聽聽AFX_COMDAT聽
const
聽AFX_MSGMAP_ENTRY聽theClass::_messageEntries[]聽
=
聽\

聽
{聽\
榪欎釜瀹忕殑浣滅敤鏈?錛?br />1. 瀹氫箟浜嗗畨鎻掑湪綾諱腑鐨勮櫄鍑芥暟GetMessageMap()錛屽彧鏄畝鍗曠殑榪斿洖messageMap瀵硅薄鐨勫湴鍧
2. 鍒濆鍖杕essageMap錛屾妸媧劇敓綾誨拰鍩虹被鑱旂郴璧鋒潵鏋勬垚涓涓ぇ鐨勬秷鎭槧灝勮〃
3. 涓虹被鏈韓鐨勬秷鎭槧灝勮〃鐨勫垵濮嬪寲鍋氳娉曞噯澶?/font>
ON_COMMAND榪欎釜瀹忕殑浣滅敤灝辨槸鍚慱messageEntries鏁扮粍涓坊鍔犵被鏈韓瑕佸鐞嗙殑鍛戒護娑堟伅錛屽叾瀹炲湪MFC涓繕鏈夊緢澶氭洿鏂逛究鐨勫畯鍙互鍚戠被涓坊鍔犳秷鎭紝渚嬪OM_WM_PAINT絳夛紝榪欓噷錛屾垜浠富瑕佽璁篛N_COMMAND錛屾瘯绔熷師鐞嗛兘鏄浉鍚岀殑銆?br />
#define
聽ON_COMMAND(id,聽memberFxn)聽\
{聽WM_COMMAND,聽CN_COMMAND,聽(WORD)id,聽(WORD)id,聽AfxSigCmd_v,聽\
聽聽static_cast
<
AFX_PMSG
>
聽(memberFxn)聽}
,
鏃犻潪鏄AFX_MSG_ENTRY緇撴瀯鐨勫垵濮嬪寲錛岃繖鏍峰湪綾諱腑涓烘瘡涓涓兂瑕佸鐞嗙殑娑堟伅閮芥槸鐢ㄤ竴涓狾N_COMMAND瀹忥紝灝辮嚜鍔ㄧ殑鍒濆鍖栦簡綾繪湰韜殑娑堟伅鏄犲皠琛ㄣ?/font>
鏈鍚庯紝褰撳叏閮ㄧ殑淇℃伅娣誨姞瀹屾瘯鍚庯紝浣跨敤END_MESSAGE_MAP()瀹忛氱煡MFC涓涓被娑堟伅鏄犲皠琛ㄧ粨鏉熶簡銆?br />
#define
聽END_MESSAGE_MAP()聽\
聽聽
{
0
,聽
0
,聽
0
,聽
0
,聽AfxSig_end,聽(AFX_PMSG)
0
聽}
聽\
聽};聽\
瀹炵幇鎵嬫硶鍗曠函寰楀緢錛屾棤闈炴槸涓涓叏0鐨凙FX_MESSAGE_MAP瀵硅薄銆?br />
緇撹
鎯寵璁╀綘鐨勭被澶勭悊鏌愪釜娑堟伅錛屼嬌鐢ㄤ笅闈㈢殑緇勫悎錛?/font>
BEGIN_MESSAGE_MAP(theClass,聽the聽
base
聽Class)
//
娑堟伅澶勭悊瀹?/span>
END_MESSAGE_MAP()
錛堝緟緇︹︼級

]]> - MFC婕皥錛堜簩錛夆斺斿璞$殑鍔ㄦ佸垱寤?/title>http://www.shnenglu.com/nacci/archive/2006/05/18/7355.htmlnaccinacciThu, 18 May 2006 08:07:00 GMThttp://www.shnenglu.com/nacci/archive/2006/05/18/7355.htmlhttp://www.shnenglu.com/nacci/comments/7355.htmlhttp://www.shnenglu.com/nacci/archive/2006/05/18/7355.html#Feedback0http://www.shnenglu.com/nacci/comments/commentRss/7355.htmlhttp://www.shnenglu.com/nacci/services/trackbacks/7355.html
鎺ヤ笂嬈TTI鐨勮瘽棰樸?br />
鑳藉鍦ㄨ繍琛屾椂鍙戠幇涓涓璞$殑綾誨瀷錛屽氨鍙互鍦ㄨ繍琛屾椂鍔ㄦ佺殑鍒涘緩涓涓璞°傚湪涓涓被搴撲腑錛屾嫢鏈夌粺涓鐨勫璞″垱寤烘柟寮忔槸闈炲父閲嶈鐨勩?br />鍦∕FC涓紝瀵硅薄鐨勫姩鎬佸垱寤鴻渚濊禆浜嶳TTI鎵寤虹珛璧鋒潵鐨勭被鍒瀷褰曪紝鍜屽姩鎬佸垱寤烘湁鍏崇殑CRuntimeClass鎴愬憳鏈変袱涓細
CObject*聽(PASCAL*聽m_pfnCreateObject)();聽//聽鎸囧悜鐢ㄤ簬鍒涘緩瀵硅薄鐨勫嚱鏁?/span>
CObject*聽CreateObject();聽//聽鍒╃敤m_pfnCreateObject鍒涘緩瀵硅薄鍒╃敤RTTI寤虹珛鐨勭被鍒瀷褰曪紝DECLARE_DYNCREATE / IMPLEMENT_DYNCREATE緇х畫涓虹被娣誨姞浜嗗姩鎬佸垱寤虹殑鍔熻兘銆?/p>
#define聽DECLARE_DYNCREATE聽(class_name)聽\
銆銆銆銆DECLARE_DYNAMIC聽(class_name)聽\聽
銆銆銆銆static聽CObject*聽PASCAL聽CreateObject();榪欎釜瀹忓悓鏍風敤鍦ㄧ被澹版槑涓紝瀹冧笉浣嗕負綾繪坊鍔犱簡class##class_name瀵硅薄鍜孏etRuntimeClass()錛岃繕涓虹被鍔犲叆浜嗕竴涓潤鎬佸嚱鏁癈reateObject,鐢ㄦ潵榪涜瀵硅薄鐨勫姩鎬佸垱寤恒傚悓鏍稩MPLEMENT_DYNCREATE鐢ㄦ潵瀵逛笂闈㈡坊鍔犵殑鍐呭浣滃畾涔夊拰鍒濆鍖栧伐浣溿?/p>
#define聽IMPLEMENT_DYNCREATE聽(class_name,聽base_class_name)聽\
銆銆銆銆CObject*聽PASCAL聽class_name::CreateObject()聽\

銆銆銆銆
{聽return聽new聽class_name;聽}聽\
銆銆銆銆IMPLEMENT_RUNTIMECLASS聽(class_name,聽base_class_name,聽0xFFFF,聽\
銆銆銆銆class_name::CreateObject,聽NULL)鍜孖MPLEMENT_DYNAMIC涓嶅悓鐨勬槸錛岃繖閲岀殑IMPLEMENT_RUNTIMECLASS涓殑絎?涓弬鏁板茍涓嶄負NULL錛岃屾槸class_name::CreateObject錛岃繖鏍峰氨鎸囧畾浜嗙敤浜庡垱寤哄璞$殑鍑芥暟錛岃嚦浜庡叾瀹冪殑鍐呭錛屼笌RTTI娌℃湁浠涔堜笉鍚屻?br />
浜庢槸錛屾暣涓璞$殑鍔ㄦ佸垱寤鴻繃紼嬪氨鍙樺緱闈炲父綆鍗曚簡錛屽彧瑕佹垜浠壘鍒版煇涓壒瀹氱被鐨凜RuntimeClass瀵硅薄錛屽埄鐢╟lass##class_name.CreateObject()灝卞彲浠ヤ簡銆?/p>
CObject*聽CRuntimeClass::CreateObject()


{
銆銆CObject*聽pObject聽=聽NULL;
銆銆pObject聽=聽(*m_pfnCreateObject)();
銆銆return聽pObject;
}緇撹
鎯寵浣犵殑綾誨湪MFC涓敮鎸佸姩鎬佸垱寤猴紝
1.聽鍦ㄧ被澹版槑涓嬌鐢―ECLARE_DYNAMIC
2. 鍦ㄧ被瀹氫箟鏂囦歡涓嬌鐢↖MPLEMENT_DYNAMIC錛屾鏃?br />聽聽聽 class##class_name.m_pfnCreateObject = class_name::CreateObject;銆
聽聽聽 CRuntimeClass::CreateObject鍒╃敤m_pfnCreateObject灝卞彲浠ヨ繘琛屽璞$殑鍔ㄦ佸垱寤轟簡
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 錛堝緟緇︹︼級

]]> - MFC婕皥錛堜竴錛夆斺擱TTIhttp://www.shnenglu.com/nacci/archive/2006/05/18/7350.htmlnaccinacciThu, 18 May 2006 06:53:00 GMThttp://www.shnenglu.com/nacci/archive/2006/05/18/7350.htmlhttp://www.shnenglu.com/nacci/comments/7350.htmlhttp://www.shnenglu.com/nacci/archive/2006/05/18/7350.html#Feedback1http://www.shnenglu.com/nacci/comments/commentRss/7350.htmlhttp://www.shnenglu.com/nacci/services/trackbacks/7350.html鎵鏈夌殑榪欎竴緋誨垪鐨勪笢瑗塊兘鏉ユ簮浜庡墠澶╂櫄涓婄殑涓涓數璇濓紝鍐呭澶ф鏄錛?/span>
鈥?/span>
浣犺兘鏁欎細鎴戜竴涓鎴戝
MFC
鏈夌偣鎰熻鐨?/span>
Hello World
鍚楋紵鎴戞復鏈涗竴涓儚鐢?/span>
C
鍐欑殑
Win32 Hello World
涓鏍風洿瑙傜殑渚嬪瓙銆?/span>
鈥?/span>
鎯蟲兂榪欐浘緇忔槸鎴戝涔?/span>
MFC
鐨勬椂鍊欎篃鎯沖埌榪囩殑闂銆傛垜鏄竴涓枩嬈㈠埁鏍歸棶搴曠殑浜猴紝鍠滄鎶婁簨鎯呮悶鏄庣櫧錛屼簬鏄浘緇忓緢闀跨殑涓孌墊椂闂撮噷錛屾垜閮藉洶鎯戝湪綰風箒鏉備貢鐨勪唬鐮侀噷銆傜幇鍦ㄥ洖鎯寵搗鏉ワ紝渚嵎鑰佸笀鐨勩?/span>
Dessecting MFC
銆嬪拰
Jeff Prosise
鐨勩?/span>
Programming MFC
銆嬩竴璧瘋鏉ワ紝浼拌鑳借揪鍒拌В鎯戠殑鐩殑銆傚綋鐒訛紝闇瑕佺殑鏄竴鐐圭偣鑰愬績鍜屽
Win32
紼嬪簭鐨勪竴鐐規渶鍩烘湰鐨勪簡瑙o紙璨屼技搴熻瘽銆傘傘傦級銆備簬鏄偅澶╂櫄涓婏紝
QQ
涓婂拰閭d釜鏈嬪弸鑱婁簡鎸洪暱涓孌墊椂闂達紝緲昏吘浜嗕竴涓?/span>
MFC
鐨勬簮浠g爜錛屽氨鏈変簡榪欎竴緋誨垪鐨勪笢瑗匡紝鍏ㄥ綋鏄晠鍦伴噸娓鎬簡涓鐣傝█褰掓浼犲惂銆傛枃绔犱腑鎵鏈夌殑浠g爜閮芥彁鍙栬嚜MFC 7.0
鍦∕FC涓紝RTTI鏄緷闈犱負褰兼鏈夌戶鎵垮叧緋葷殑綾誨緩绔嬩竴涓褰曞叾綾誨瀷鐨勯摼琛ㄦ潵瀹炵幇鐨勶紝鍜孯TTI鏈夊叧鐨凜RuntimeClass鎴愬憳鏈?涓細
LPCSTR聽m_lpszClassName;聽聽聽聽//聽鐢ㄤ簬璁板綍綾誨悕
//聽鐢ㄤ簬鎸囧悜鍩虹被鐨凜RuntimeClass緇撴瀯
CRuntimeClass*聽m_pBaseClass;聽聽
//聽鐢ㄤ簬鎸囧悜閾捐〃涓墠涓涓被鐨凜RuntimeClass緇撴瀯
CRuntimeClass*聽m_pNextClass;
//聽鐢ㄤ簬寤虹珛綾誨埆鍨嬪綍
const聽AFX_CLASSINIT*聽m_pClassInit;聽
榪欐牱鍦ㄨ繖涓被鍒瀷褰曚腑灝辨湁浜嗚澶氭潯璺緞錛屾瘡涓鏉¢兘鏄部鐫m_pBaseClass涓鐩村彲浠ユ壘鍒版煇涓被鐨勬渶緇堝熀綾匯傝鎶婁竴涓被鍔犲叆鍒拌繖涓被鍒瀷褰曚腑瑕佺敤鍒頒袱涓畯錛?br />DECLARE_DYNAMIC聽/聽IMPLEMENT_DYNAMIC
鍏朵腑錛?br />
#define聽DECLARE_DYNAMIC聽(class_name)聽\
public:聽\
聽聽聽聽static聽const聽CRuntimeClass聽class##class_name;聽\
聽聽聽聽virtual聽CRuntimeClass*聽GetRuntimeClass()聽const;聽\
榪欎釜瀹忔槸鐢ㄥ湪綾誨0鏄庝腑鐨勶紝鍏朵綔鐢ㄥ氨鏄牴鎹被鐨勫悕瀛椾負璇ョ被娣誨姞涓や釜public鐨勬垚鍛橈紝鍒嗗埆鐢ㄤ簬璁板綍綾葷殑鍨嬪埆鍜岃幏寰楀璞lass##class_name鐨勫湴鍧錛屾敞鎰忚繖閲岀殑class##class_name鏄釜闈欐佹垚鍛橈紝榪欏氨涓哄悗闈㈡垜浠仛綾誨瀷鐨勬瘮杈冨瀹氫簡鍩虹錛堢戶鎵夸簬鍚屼竴涓熀綾葷殑媧劇敓綾誨璞″寘鍚叡鍚岀殑闈欐佺被鎴愬憳錛夈傚湪綾諱腑浣跨敤浜咲ECLARE_DYNAMIC鍚庯紝榪樿鍦?cpp鐨勬枃浠朵腑浣跨敤IMPLEMENT_DYNAMIC瀹忥紝璇ュ畯鐨勪綔鐢ㄥ氨鏄垵濮嬪寲class##class_name瀵硅薄鍜屽畾涔塆etRuntimeClass鍑芥暟銆?br />
#define聽IMPLEMENT_DYNAMIC聽(class_name,聽base_class_name)聽\
聽聽聽聽IMPLEMENT_RUNTIMECLASS聽(class_name,聽base_class_name,聽0xFFFF,聽NULL,聽NULL)
IMPLEMENT_DYNAMIC鍦ㄤ嬌鐢ㄧ殑鏃跺欙紝瑕佹寚瀹氱被鍜屽叾鍩虹被鐨勫悕瀛楋紝涔嬪悗鍒╃敤IMPLEMENT_RUNTIMECLASS榪涜瀹炶川鎬х殑鍒濆鍖栨椿鍔ㄣ?br />
#define聽IMPLEMENT_RUNTIMECLASS聽(class_name,聽base_class_name,聽wSchema,聽pfnNew,聽class_init)聽\

聽聽聽聽AFX_COMDAT聽const聽CRuntimeClass聽class_name::class##class_name聽=聽
{聽\
聽聽聽聽聽聽聽聽銆銆#class_name,聽sizeof(class聽class_name),聽wSchema,聽pfnNew,聽\
聽聽聽聽聽聽聽聽銆銆RUNTIME_CLASS(base_class_name),聽NULL,聽class_init聽};聽\

聽聽聽聽CRuntimeClass*聽class_name::GetRuntimeClass()聽const聽\

聽聽聽聽
{聽return聽RUNTIME_CLASS聽(class_name);聽}聽\
鍏朵腑錛屽湪class#class_name鐨勫垵濮嬪寲涓拰RTTI鐩稿叧鐨勫彧鏈夛細
&name_class鐢ㄦ潵鍒濆鍖杕_lpszClassName
RUNTIME_CLASS(base_class_name)鐢ㄦ潵鍒濆鍖朇RuntimeClass* m_pBaseClass
NULL鐢ㄦ潵鍒濆鍖朇RuntimeClass* m_pNextClass錛堟鏃剁被鍒瀷褰曡繕娌℃湁寤虹珛璧鋒潵錛?
鍙﹀錛孯UNTIME_CLASS灝辨槸鐢ㄦ潵鑾峰緱class##class_name瀵硅薄鍦板潃鐨勫畯錛?br />
#define聽RUNTIME_CLASS聽(class_name)聽_RUNTIME_CLASS聽(class_name)
#define聽_RUNTIME_CLASS聽(class_name)聽\
聽聽聽聽((CRuntimeClass*)聽(&class_name::class##class_name))榪欐牱錛屽綋瀵圭▼搴忎腑鐨勬瘡涓涓被閮戒嬌鐢ㄤ簡DECLARE_DYNAMIC / IMPLEMENT_DYNAMIC瀹忎箣鍚庯紝灝變負璇ョ被鍦ㄧ被鍒瀷褰曚腑榪涜浜嗙櫥璁板伐浣溿傚綋鐒訛紝MFC涓墍鏈夌殑綾婚兘媧劇敓浜嶤Object錛屾墍浠ユ墍鏈夌殑璺嚎鏈緇堥兘瑕佸湪CObject澶勪細鍚堬紝鐢變簬CObject娌℃湁鍩虹被錛屾墍浠ュ畠鐨凜RuntimeClass瀵硅薄騫朵笉鑳界敤涓婇潰鐨勪袱涓畯鏉ュ疄鐜幫紝鍦╫bjcore.cpp涓紝涓篊Object鐨刢lassCObject瀵硅薄鍗曠嫭浣滀簡鍒濆鍖栫殑宸ヤ綔錛?/p>
const聽struct聽CRuntimeClass聽CObject::classCObject聽=

聽
{聽"CObject",聽sizeof(CObject),聽0xffff,聽NULL,聽NULL,聽NULL聽};鎴戜滑鍙互鐪嬪埌m_pBaseClass琚垵濮嬪寲涓篘ULL銆傚彟澶栵紝涔熷崟鐙疄鐜頒簡GetRuntimeClass():

CRuntimeClass*聽CObject::GetRuntimeClass()聽const聽
{
聽聽聽聽return聽_RUNTIME_CLASS聽(CObject);
}
鑷充簬_RUNTIME_CLASS錛屽墠闈㈠凡緇忚榪囦簡銆傝繖鏍鳳紝濡傛灉鎯寵鎶婅嚜宸辯殑綾諱粙緇嶇粰MFC錛屽彧瑕佸湪綾誨0鏄庝腑浣跨敤DECLARE_DYNAMIC錛屽湪綾葷殑瀹炵幇涓姞鍏MPLEMENT_DYNAMIC
錛屽氨鍙互鎶婅嚜宸辨敞鍐屽埌綾誨埆鍨嬪綍涓簡銆傝嚦姝わ紝涓轟簡瀹炵幇綾誨璞$殑RTTI錛屾垜浠凡緇忓仛濂戒簡鎵鏈夌殑鍑嗗宸ヤ綔錛屼笅闈㈠氨鏉ョ湅涓涓嬪畠鐨勫疄鐜幫紝瀹冧富瑕佹槸闈燙Object涓殑IsKindOf鍑芥暟瀹屾垚鐨勩?/p>
BOOL聽CObject::IsKindOf(const聽CRuntimeClass*聽pClass)聽const


{
聽銆銆//聽涓轟簡綆媧侊紝鐣ュ幓浜嗕笉鐩稿叧鐨勪唬鐮?/span>
聽銆銆CRuntimeClass*聽pClassThis聽=聽GetRuntimeClass();
聽銆銆return聽pClassThis->IsDerivedFrom(pClass);
}榪欓噷錛岀敱浜嶨etRuntimeClass鏄櫄鍑芥暟錛屾墍浠ClassThis浼氭寚鍚戣皟鐢↖sKindOf鍑芥暟鐨勭被瀵硅薄鐨刢lass##class_name錛屼箣鍚庡埄鐢ㄦ寚鍚戣瀵硅薄鐨勬寚閽堣皟鐢↖sDerivedFrom錛?/p>

BOOL聽CRuntimeClass::IsDerivedFrom(const聽CRuntimeClass*聽pBaseClass)聽const聽
{
聽聽聽聽//涓轟簡綆媧侊紝鐣ュ幓浜嗕笉鐩稿叧鐨勪唬鐮?/span>
聽聽聽聽if聽(pBaseClass聽==聽NULL)
聽聽聽聽聽聽聽聽return聽FALSE;

聽聽聽聽//聽simple聽SI聽case
聽聽聽聽const聽CRuntimeClass*聽pClassThis聽=聽this;

聽聽聽聽while聽(pClassThis聽!=聽NULL)聽
{
聽聽聽聽聽聽聽聽if聽(pClassThis聽==聽pBaseClass)
聽聽聽聽聽聽聽聽銆return聽TRUE;
聽聽聽聽聽聽聽聽pClassThis聽=聽pClassThis->m_pBaseClass;
聽聽聽聽}聽聽聽聽
聽聽聽聽return聽FALSE;聽聽聽聽聽聽聽//聽walked聽to聽the聽top,聽no聽match
}
鎴戜滑鐭ラ亾錛屾淳鐢熺被鍜屽熀綾誨叡浜熀綾葷殑static瀵硅薄錛屾墍浠ュ湪榪欓噷錛屾淳鐢熺被鍜屽熀綾諱竴瀹氬叡浜浉鍚岀殑class##class_name瀵硅薄錛岃繖灝變負鎴戜滑鍒ゅ畾涓や釜綾繪槸鍚︽湁緇ф壙鍏崇郴鎻愪緵浜嗙悊璁哄熀紜錛屽悓鏍鳳紝鍦↖sDerivedFrom涓紝while寰幆涓殑if涔熺殑紜槸榪欐牱鍋氱殑錛屽畠娌跨潃璇ョ被鐨勫悓瀹楄礬綰夸笂琛岋紝鍙涓嶅埌鍏卞悓鐨勭鍏圕Object錛屽氨鍐充笉緗紤銆傘
緇撹
濡傛灉鎯寵鎶婅嚜宸辯殑綾諱粙緇嶇粰MFC錛屽彧瑕佸湪綾誨0鏄庝腑浣跨敤DECLARE_DYNAMIC錛屽湪綾葷殑瀹炵幇涓姞鍏MPLEMENT_DYNAMIC
錛屽氨鍙互鎶婅嚜宸辨敞鍐屽埌綾誨埆鍨嬪綍涓簡銆傘銆錛堝緟緇︹︼級

]]> - 鍥炲http://www.shnenglu.com/nacci/archive/2006/05/16/7246.htmlnaccinacciTue, 16 May 2006 05:02:00 GMThttp://www.shnenglu.com/nacci/archive/2006/05/16/7246.htmlhttp://www.shnenglu.com/nacci/comments/7246.htmlhttp://www.shnenglu.com/nacci/archive/2006/05/16/7246.html#Feedback4http://www.shnenglu.com/nacci/comments/commentRss/7246.htmlhttp://www.shnenglu.com/nacci/services/trackbacks/7246.html
聽聽聽聽聽聽聽 涓嬈″伐浼氱粡鍘嗙殑鍧庡澐鎯沖埌鐨勩?br />
聽聽聽聽聽聽聽 紱誨錛屾槸涓涓繃紼嬶紱鍥炲錛屾槸涓涓繃紼嬨傚紑闂ㄣ佸叧闂紝榪欎簺灞炰簬鐢熷懡閲岀殑鎯呰妭銆傛瘡鏃ユ瘡鏈堟瘡騫撮兘鏈変漢鐢熺殑鑸炲彴涓婃紨鍑猴紝鐩村埌鐢熷懡鐨勮垶鍙版媺涓嬪ぇ騫曘?br />
銆銆鍒濈瀹舵椂鐨勯偅縐嶆劅瑙夎浜哄埢鑻﹂摥蹇冦備笉瑕佽紱誨鐨勭悊鐢憋紝涓洪冮伩涓鴻嚜鐢辯勘緲旇繕鏄負璋嬬敓銆傛垜紱誨紑浜嗭紝鑳岃搗琛屽泭錛屽湪蹇冧腑鏆楁殫鍙戜竴鍥炶獡錛岀劧鍚庡ご涔熶笉鍥炲湴璧板湪涓嶇煡寤蜂幾鍒頒綍鏂圭殑璺傚敖綆$煡閬撴湁鍏蟲鐨勭溂鐫涚壍鐫榪滃幓鐨勮韓褰憋紝鍙繕鏄蛋涓嬪幓銆傝蛋寰楄繙浜?璧板緱绱簡錛屾墠鐭ラ亾瀹舵槸鍦嗗績錛岃屾垜浠棤璁哄埌浣曟椂閮芥槸鍦嗕笂鐨勪竴涓偣錛屾垜浠瀹惰秺榪滐紝瀹跺鎴戜滑鐨勭蹇冪巼灝辮秺澶с傛垜浠湪鑼尗浜烘搗涓矇嫻佹專鎵庯紝濡備竴鍙湪鑼尗椋庨洦涓瑙呰胺綺掔殑灝忛笩錛屾繁鎰熻嚜宸辯殑娓哄皬錛岃繖鏃舵墠鎰熷埌瀹剁殑娓╂殩涓庡畨鍏ㄣ傛垜浠湪紱誨鐨勬椂鍊欎箟鏃犲弽欏撅紝鍙槸紱誨鍚庯紝鎴戜滑鍙堝鐩告濈殑鎮h呭湪蹇冧腑鐪嬬潃瀹訛紝鎵嶇煡閬撳鏄垜浠竴鐢熺殑娓存湜銆?br />
銆銆鍥炲鏄竴縐嶆復姹傜殑蹇冩儏錛岄偅縐嶅績鎯咃紝鏄瀹剁殑寤剁畫銆傝椋庨洦媧楃ぜ鍚庣殑鑸瑰埢婊″ぇ嫻風殑鍒鐥曪紝甯嗙牬浜嗐傝埞婕忎簡錛屾按鎵嬩篃涔忎簡銆傚彧鏈夋鏃舵垜浠墠鑳戒綋浼氬嚭褰掑績浼肩榪欎釜璇嶇殑浠介噺銆傚氨濡傞鍊︾殑楦熷効鎯寵鎵懼埌鑷繁鐨勫發錛屾姌浜嗙繀鑶鍦ㄩ闆ㄤ腑鐥涜嫤鍦版悘鍑誨瑙咃紝鎯寵绱у紶鐨勭緇忔斁涓亣錛岃鐤叉儷鐨勭簿紲炴瓏涓姝囥傛帹闂ㄧ殑涓鍒歸偅錛岃矊鐨勬磼鑴憋紝楠ㄥ瓙閲屽嵈鏈変笌鐢熶勘鏉ョ殑杞急涓庣柌涔忋傛湰鎯沖埌瀹惰瘔璇撮伃鍙楃殑鍒涗激鍜屽灞堬紝鍗存弧鑴稿啓鐫鏄ラ寰楁剰鐨勭瑧瀹逛笌鎴愬姛鐨勮嚜璞備綘韙㈡帀闉嬪瓙鍏夌潃鑴氬湪鍦版澘涓婅蛋鏉ヨ蛋鍘伙紝浣犵湅鍒頒綘紱誨鏃剁偣鐫鐨勮湣鐑涜繕鍦ㄧ噧鐑э紝浣犵瀹舵椂鎵撳紑鐨勯偅鏈功榪樻斁鍦ㄦ涓娿備綘涓浼氬効鐪嬬湅涔︼紝涓浼氬効鍠濆嚑鍙h尪鎴栧伐鐐歸浂椋熷悆錛屼綘灝卞湪娓╂殩涓潯涓涓俯棣ㄧ殑瑙夛紝鏀掑埌瓚沖鐨勫姏閲忋?br />
鐣欎笅
甯屾湜韜竟鐨勬瘡涓漢鐣欎笅
姣忎釜浜虹殑鍐呭績閮芥湁鑴嗗急鐨勮钀?br />鐜板湪錛岃鍚垜璇?br />鍥犱負鎴戝凡緇忔垚涓轟簡浼ゅ浣犲績鐏電殑浜?br />灝辨敞瀹氳鎵垮彈蹇冪伒瀛ゅ崟鐨勮繖孌墊棩瀛?br />鎰熻阿澶у榪囧幓鍋氳繃鐨勪竴鍒?br />閭d簺緹庝附宸茬粡姘稿瓨浜庡績
鍦ㄦ垜鐨勮蹇嗛噷錛屽己鐑堟復鏈涘拰紱誨紑璇村啀瑙?br />蹇冮噷鏀懼0鐥涘摥
鍥犱負鐪熺殑寰堥毦璇村啀瑙?br />鐪嬬潃浣犱滑浼稿嚭鍙屾墜
鎴戠浉淇′綘浠兘鏄庣櫧鎴戠殑蹇冩儏
欏轟粠鑷繁鐨勫績鎯咃紝鎵懼埌鑷繁鐨勭洰鏍?br />涓嶇粡鎰忔帀钀界殑娉按
媧嬫孩鐨勭埍鐨勫厜鑺?br />鍥犱負榪欓噷鎵胯澆鐫鎴戜滑鐜板疄鐨勬ⅵ鎯?br />鍦ㄩ偅浜涙渶浜茬埍鐨勮蹇嗛噷
鏈夋垜浠竴璧峰垱閫犵殑濂囪抗
鎰熷彈鍒頒簡蹇冪伒鐨勫懠鍞?br />浠庤繙鏂逛紶鏉ョ殑澹伴煶錛屽0澹頒笉緇?br />閭f槸鐢熷懡鐨勬棆寰?br />鏇劇粡鐨勫0闊充粖澶╂垚浜嗙編濡欑殑鏃嬪緥
鐩樻鍦ㄥ績澶達紝涔呭埌鎴戜滑澶卞幓璁板繂
鍗充究鏄偅鏍?
鎴戠浉淇★紝鎴戜緷鏃у彲浠ュ枈鍑?鎭嬬埍涔嬪+榪欎釜鍚嶅瓧錛?/font>
聽

]]> - 鍦ㄧ紪璇戞椂鍐沖畾綾誨瀷鐨勫彲緇ф壙鎬?/title>http://www.shnenglu.com/nacci/archive/2006/05/15/7200.htmlnaccinacciMon, 15 May 2006 09:20:00 GMThttp://www.shnenglu.com/nacci/archive/2006/05/15/7200.htmlhttp://www.shnenglu.com/nacci/comments/7200.htmlhttp://www.shnenglu.com/nacci/archive/2006/05/15/7200.html#Feedback0http://www.shnenglu.com/nacci/comments/commentRss/7200.htmlhttp://www.shnenglu.com/nacci/services/trackbacks/7200.html
2涓被鍨?span lang="EN-US">U
鍜?span lang="EN-US">T錛屼綘濡備綍鏉ョ‘瀹?span lang="EN-US">U鏄惁緇ф壙浜?span lang="EN-US">T鍛紵鍦ㄧ紪璇戞椂鍙戠幇涓や釜綾誨瀷鐨勮繖縐嶅叧緋誨浜庢硾鍨嬪簱鐨勪紭鍖栨槸鏋佷負閲嶈鐨勩傚湪娉涘瀷鍑芥暟涓紝濡傛灉鏌愪釜綾誨疄鐜頒簡鐗瑰畾鐨勬帴鍙o紝浣犲彲浠ユ牴鎹繖縐嶅叧緋諱負鍏跺埄鐢ㄧ壒瀹氱殑浼樺寲綆楁硶銆傚彟澶栵紝濡傛灉鎴戜滑鍙互鍦ㄧ紪璇戞湡鍐沖畾2涓被鐨勫叧緋伙紝鎴戜滑涔熷彲浠ヨ繙紱?span lang="EN-US">dynamic_cast錛屼粠鑰岄伩鍏嶈繍琛屾椂鐨勬晥鐜囧紑閿銆?br />
2涓換鎰忕被鍨?span lang="EN-US">U鍜?span lang="EN-US">T錛屽浣曠‘瀹?span lang="EN-US">T鑳藉惁鑷姩杞崲鎴?span lang="EN-US">U鍛紵
sizeof鐢ㄥ湪浠諱綍澶嶆潅鐨勮〃杈懼紡涓婏紝 sizeof鍙互榪斿洖榪欎釜琛ㄨ揪寮忓肩殑澶у皬錛岃屼笉浼氬湪榪愯鏃惰瘎浼拌〃杈懼紡鐨勫箋傝繖涔熷氨鎰忓懗鐫錛屼綘鍙互鎶婂嚱鏁伴噸杞姐佹ā鐗堝疄渚嬪寲銆佽漿鎹㈣鍒欑瓑絳夋墍鏈変綘鍙互鍦?span lang="EN-US">C++琛ㄨ揪寮忎腑浣跨敤鐨勮鏂界粺緇熷鍒?span lang="EN-US">sizeof涓潵銆傚疄闄呬笂錛?span lang="EN-US">sizeof闅愯棌浜嗕竴涓彲浠ユ紨緇庤〃杈懼紡綾誨瀷鐨勮鏂斤紝鏈緇堬紝sizeof浼氳繑鍥炶〃杈懼紡緇撴灉鐨勭被鍨嬨?span lang="EN-US">
sizeof鍜岄噸杞藉嚱鏁版潵瑙e喅鍒ゆ柇綾誨瀷涔嬮棿鐨勫彲杞崲鎬х殑闂銆傛濊礬寰堢畝鍗曪細鎴戜滑鎻愪緵2涓噸杞藉嚱鏁幫紝涓涓嚱鏁扮殑鍙傛暟鏄垜浠杞崲鎴愮殑綾誨瀷錛堟垜浠敤U琛ㄧず錛夛紝鑰屽彟涓涓垯鐢ㄦ潵鎺ユ敹鍏朵粬鎵鏈夌被鍨嬬殑鍙傛暟銆傜劧鍚庢垜浠妸瑕佹嫻嬬殑綾誨瀷錛堢敤T琛ㄧず錛変紶閫掔粰閲嶈澆鍑芥暟銆傚鏋滄帴鍙楃被鍨?span lang="EN-US">U涓哄弬鏁扮殑鍑芥暟琚皟鐢ㄤ簡錛屾垜浠氨璁や負T鍙互杞崲涓?span lang="EN-US">U錛屽弽涔嬪垯涓嶅彲浠ャ傚浣曠‘瀹氬摢涓嚱鏁拌璋冪敤浜嗗憿錛熸垜浠埄鐢?span lang="EN-US">sizeof鍑洪┈錛屾垜浠彧瑕佽閲嶈澆鍑芥暟榪斿洖涓嶅悓鐨勭被鍨嬶紝鐒跺悗媯鏌ヤ竴涓嬭繑鍥炲煎氨鍙互浜嗐?span lang="EN-US">
2涓笉鍚岀殑綾誨瀷錛?span lang="EN-US">
typedef聽
char
聽Small;

class
聽Big聽
{聽
char
聽dummy[
2
];聽}
;

榛樿鎯呭喌涓嬶紝
sizeof(Small)
鏄?/span>
1
錛岃?/span>
Big
鐨勫ぇ灝忓垯鏃犲叧绱ц錛屾垜浠彧瑕佺煡閬撹偗瀹氫笉鏄?/span>
1
灝卞ソ浜嗐?/span>
鍏舵錛屽畾涔?/span>
2
涓噸杞藉嚱鏁幫紝涓涓帴鏀惰杞崲鎴愮殑綾誨瀷錛?/span>
Small Test(U);
鍙︿竴涓敤鏉ユ帴鏀垛滃叾浠栫殑鎵鏈夌被鍨嬧濓紝鎴戜滑瑕佷繚璇佸湪鎺掗櫎鎵鏈夌殑杞崲涔嬪悗鎵嶈皟鐢ㄨ繖涓嚱鏁幫紝
OK,
鐢ㄧ渷鐣ュ彿琛ㄧず鐨勫弬鏁板垪琛ㄧ湡濂芥弧瓚抽渶姹?/span>
Big Test(...);
灝界鎶婁竴涓?/span>
C++
瀵硅薄浼犻掔粰
...
鍙傛暟綾誨瀷鐨勫嚱鏁幫紝鍏剁粨鏋滄湭瀹氫箟錛屼絾鏄疄闄呬笂鎴戜滑騫舵病鏈夎皟鐢ㄨ繖涓嚱鏁般傛垜浠敋鑷沖彲浠ヤ笉鐢ㄥ疄鐜板畠銆?/span>
鏈鍚庯紝鎴戜滑鐢?/span>
sizeof
鍒ゆ柇涓涓嬪氨瀹屾垚浠誨姟浜嗭細
const
聽
bool
聽convExist聽
=
聽
sizeof
(Test(T()))聽
==
聽
sizeof
(Small);

浣犱篃璁鎬細璇達紝灝辨槸瀹冧簡錛?/span>
Test
鐨勮皟鐢ㄤ細鍒涘緩涓涓復鏃跺璞?/span>
T
錛屼箣鍚庡彲鑳界殑緇撴灉鍙兘鏄?/span>
sizeof(Small)
鎴?/span>
sizeof(Big)
銆傚叴濂嬩箣浣欙紝鎴戜滑榪樿鐪嬪埌涓涓棶棰樸傚鏋?/span>
T
鐨勬瀯閫犲嚱鏁拌璁捐鎴?/span>
private
錛屾垜浠氨鍓嶅姛灝藉純浜嗐傚綋鐒惰В鍐崇殑鏂規硶涔熷緢綆鍗曪紝瀹氫箟涓涓嚱鏁幫紝璁╀粬榪斿洖綾誨瀷涓?/span>
T
鐨勫璞°?/span>
T聽MakeT();
const
聽
bool
聽convExist聽
=
聽
sizeof
(Test(MakeT()))聽
==
聽
sizeof
(Small);

鏈鍚庯紝鎶婂垰鎵嶇殑涓滆タ灝佽鍒頒竴涓被閲岋細
template聽
<
class
聽T,聽
class
聽U
>
class
聽Conversion聽
{
聽聽聽聽typedef聽
char
聽Small;

聽聽聽聽
class
聽Big聽
{聽
char
聽dummy[
2
];聽}
;

聽聽聽聽
static
聽Small聽Test(U);
聽聽聽聽
static
聽Big聽Test(
);
聽聽聽聽
static
聽T聽MakeT();

public
:

聽聽聽聽
enum
聽
{聽exist聽
=
聽
sizeof
(Test(MakeT()))聽
==
聽
sizeof
(Small)聽}
;
}
;

鍙﹀錛屾垜浠繕鍙互璁劇疆鍙﹀涓涓父閲?/span>
Conversion::SameType
錛屽鏋?/span>
T
鍜?/span>
U
琛ㄧず鍚屼竴涓被鍨嬶紝閭d箞榪斿洖
true
錛?/span>
template聽
<
class
聽T,聽
class
聽U
>
class
聽Conversion聽
{
聽聽聽聽..聽
as
聽above..

聽聽聽聽
enum
聽
{聽sameType聽
=
聽
false
}
}
;

涔嬪悗涓哄悓涓涓被鍨嬭璁′竴涓亸鐗瑰寲鐗堟湰錛?/span>
template聽
<
class
聽T
>
class
聽Conversion
<
T,聽T
>
聽
{

聽聽聽聽
enum
聽
{聽exists聽
=
聽
1
,聽sameType聽
=
聽
1
聽}
;
}
;
鏈鍚庯紝鍥炲埌鎴戜滑鐨勪富棰橈紝閫氳繃
Conversion
鐨勫府鍔╋紝鎴戜滑鍙互鏉ュ喅瀹氫袱涓被鍨嬬殑緇ф壙鎬т簡銆?/span>
#define
聽SUPERSUBCLASS(T,聽U)聽\
聽聽聽聽(Conversion
<
const
聽U
*
,聽
const
聽T
*
)::exists聽
&&
聽\
聽聽聽聽
!
Conversion
<
const
聽T
*
,聽
const
聽
void
*>
::sameType)
褰?/span>
U
緇ф壙浜?/span>
T
鎴栬?/span>
U
鍜?/span>
T
鏄悓涓涓被鍨嬬殑鏃跺欙紝
SUPERSUBCLASS
榪斿洖
true
銆傛葷粨涓涓嬶紝鍙湁涓嬮潰榪?/span>
3
縐嶆儏褰?/span>
const U*
鍙互闅愬紡杞崲鍒?/span>
const T*
錛?/span>
1.聽聽聽聽聽
T
鍜?/span>
U
鏄悓涓涓被鍨?/span>
2.聽聽聽聽聽
T
鏄?/span>
U
鐨勪換鎰忎竴涓熀綾?/span>
3.聽聽聽聽聽
T
鏄?/span>
void
鎴戜滑閫氳繃絎?/span>
2
涓祴璇曞睆钄戒簡鏈鍚庝竴縐嶆儏褰€傚綋鐒訛紝濡傛灉浣犺涓哄悓涓縐嶇被鍨嬩篃涓嶇畻鏄戶鎵垮叧緋葷殑璇濓紝鍙互榪涗竴姝ヤ弗鏍煎叾鏉′歡錛?/span>
#define
聽SUPERSUBCLASS_STRICT(T,聽U)聽\
聽聽聽聽(SUPERSUBCLASS(T,聽U)聽
&&
聽\
聽聽聽聽
!
Conversion(
const
聽T,聽
const
聽U)::sameType)

]]>
高清免费久久午夜精品|
99久久精品国产免看国产一区|
99久久精品免费看国产一区二区三区
|
久久香蕉超碰97国产精品|
国内精品免费久久影院|
蜜桃麻豆www久久国产精品|
精品久久久一二三区|
…久久精品99久久香蕉国产|
99久久无码一区人妻|
久久婷婷是五月综合色狠狠|
久久91精品国产91久久小草
|
精品无码久久久久国产动漫3d|
97久久精品无码一区二区天美
|
99久久婷婷国产综合精品草原
|
久久中文娱乐网|
亚洲色婷婷综合久久|
久久无码AV中文出轨人妻|
久久夜色精品国产噜噜麻豆|
久久无码国产|
青青青国产成人久久111网站|
一本色道久久综合亚洲精品|
国产精品伊人久久伊人电影|
久久国产精品成人片免费|
一级A毛片免费观看久久精品|
久久国产精品免费|
91久久成人免费|
国产韩国精品一区二区三区久久|
日日狠狠久久偷偷色综合免费|
嫩草影院久久99|
免费观看成人久久网免费观看|
精品乱码久久久久久久|
奇米综合四色77777久久|
久久久久av无码免费网|
久久国产亚洲精品|
久久99久久99精品免视看动漫|
免费精品久久久久久中文字幕|
久久国产影院|
久久笫一福利免费导航|
7777精品伊人久久久大香线蕉|
久久成人小视频|
亚洲精品无码久久一线|