锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
棰樼洰寰堢畝鍗曪紝鏄劇ずaname涓噸澶嶇殑絎竴琛?br>絳旀搴斿綋濡傛錛堣皟璇曢氳繃錛?br>select (select top 1 id from aa as b where b.aname=c.aname) as id,aname from (select distinct aname from aa) c
鍙﹀鍑虹m琛屽埌絎琻琛屾暟鎹殑棰樹篃姣旇緝甯歌
涓嶈繃搴斿綋娉ㄦ剰鏄惁鍖呭惈絎琺琛岋紝濡傛灉鍖呭惈絎琺琛岋紝鍒欏簲璇ワ紙榪樻槸閽堝涓婇潰鐨勮〃錛夛細
select * from(select top (n-m+1)* from (select top (n)* from aa order by id)f order by id desc) h order by id
]]>
1銆佸懡浠ょ鐞嗗櫒綆$悊鍛戒護
void testCommandManagerArrangeCommand()
{
cout<<">>>>>>>>>>>>鍛戒護綆$悊鍣ㄨ皟搴﹀懡浠?
<<<<<<<<<<<<"<<endl;
CDeleteCommand *pCommand1=new CDeleteCommand("obj1");
CDeleteCommand *pCommand2=new CDeleteCommand("obj2");
CDeleteCommand *pCommand3=new CDeleteCommand("obj3");
CDeleteCommand *pCommand4=new CDeleteCommand("obj4");
CCommandManager manager;
manager.Do(pCommand1);
manager.Do(pCommand2);
manager.Do(pCommand3);
manager.Undo();
manager.Undo();
manager.Redo();
manager.Undo();
manager.Do(pCommand4);
manager.Undo();
manager.Redo();
}
鎵ц鏁堟灉錛?/p>
>>>>>>>>>>>>鍛戒護綆$悊鍣ㄨ皟搴﹀懡浠?lt;<<<<<<<<<<<
obj1 is deleted.
obj2 is deleted.
obj3 is deleted.
obj3 is undeleted.
obj2 is undeleted.
obj2 is deleted.
obj2 is undeleted.
obj4 is deleted.
obj4 is undeleted.
obj4 is deleted.
2銆佸懡浠ょ鐞嗗櫒綆$悊鍛戒護綆$悊鍣?
//鍛戒護綆$悊鍣ㄨ皟搴﹀懡浠ょ鐞嗗櫒
void testCommandManagerArrangeCommandManager()
{
cout<<">>>>>>>>>>>>鍛戒護綆$悊鍣ㄨ皟搴﹀懡浠ょ鐞?
鍣?lt;<<<<<<<<<<<"<<endl;
CDeleteCommand *pCommand1=new CDeleteCommand("cm1--obj1");
CDeleteCommand *pCommand2=new CDeleteCommand("cm1--obj2");
CDeleteCommand *pCommand3=new CDeleteCommand("cm1--obj3");
CDeleteCommand *pCommand4=new CDeleteCommand("cm2--obj1");
CDeleteCommand *pCommand5=new CDeleteCommand("cm2--obj2");
CDeleteCommand *pCommand6=new CDeleteCommand("cm2--obj3");
CCommandManager cm1;
CCommandManager cm2;
CCommandManager cmMain;
cm1.SetParentCommandManager(&cmMain);
cm2.SetParentCommandManager(&cmMain);
cm1.Do(pCommand1);
cm2.Do(pCommand4);
cm1.Do(pCommand2);
cm2.Do(pCommand5);
cm1.Do(pCommand3);
cm2.Do(pCommand6);
cmMain.Undo();
cmMain.Undo();
cmMain.Undo();
cmMain.Redo();
cmMain.Undo();
}
鎵ц鏁堟灉錛?
>>>>>>>>>>>>鍛戒護綆$悊鍣ㄨ皟搴﹀懡浠ょ鐞嗗櫒<<<<<<<<<<<<
cm1--obj1 is deleted.
cm2--obj1 is deleted.
cm1--obj2 is deleted.
cm2--obj2 is deleted.
cm1--obj3 is deleted.
cm2--obj3 is deleted.
cm2--obj3 is undeleted.
cm1--obj3 is undeleted.
cm2--obj2 is undeleted.
cm2--obj2 is deleted.
cm2--obj2 is undeleted.
娉ㄦ剰錛?
1銆佺‘淇濆懡浠ょ殑Execute鍜孶nExecute鏄畬鍏ㄥ彲閫嗙殑鎿嶄綔銆?
2銆佽淇濋殰Execute鍜孶nExecute鐨勫彲閫嗘э紝鐗瑰埆瑕佸叧娉ㄤ粬浠墽琛岀殑鐜錛堟瘮濡傜粯鍥劇殑鏃跺欙紝榪欎簺鎿嶄綔瑕佹湁鍚屾牱鐨勫昂瀵告爣鍑嗭紝鍚﹀垯寰堥毦瀹炵幇浜掗嗙殑鎿嶄綔錛夈?
3銆佹敞鎰忎笉瑕佹彃鍏ョ┖鍛戒護銆?/p>
KeyName錛歋ession鎴朧iewState鐨凨ey錛?br>ControlId錛氳琚祴鍊肩殑鎺т歡錛?br>ControlPropertyName錛氳琚祴鍊肩殑鎺т歡灞炴э紱
PropertyName錛歋ession鎴朧iewState涓繚瀛樼殑瀵硅薄鐨勪竴涓睘鎬э紝榪欎釜灞炴у間細琚祴緇欐帶浠躲?br>浠g爜
聽聽聽聽聽聽聽 榪欓噷灝辨槸鐢ㄤ簡CTypedPtrMap錛屽0鏄庝簡涓涓彉閲弇_ctrlMap錛屽畠鐨勭儲寮曟槸涓涓狢String鍨嬪彉閲忥紝鐒跺悗鍐呭涓轟竴涓狢Wnd鍨嬬殑鎸囬拡銆傛垜浠煡閬擄紝涓鍒囩獥浣撱佹寜閽瓑絳夌殑涓滆タ閮芥槸浠嶤Wnd緇ф壙鐨勩傛垜浠敤CWnd鏉ヤ唬鎸囦竴鍒囬渶瑕佸姩鎬佺敓鎴愮殑鎺т歡錛堝叾瀹炲湪榪欎釜紼嬪簭涓紝涓昏鍔ㄦ佺敓鎴怌Edit鍨嬪拰CStatic鍨嬫帶浠訛級錛岃繖搴斿綋綆楁槸涓涓綆辨搷浣滀簡鍚с?/p>
聽聽聽聽聽聽聽 鏂規硶createCtrl鐢ㄦ潵鍒涘緩鎺т歡錛屽茍鏀懼埌Map閲岄潰錛実etCtrl鐢ㄦ潵浠嶮ap涓彇寰楃浉搴旂殑鎺т歡瀵硅薄銆?br />聽聽聽聽聽聽聽 涓嬮潰鏄痗reateCtrl鐨勮緇嗗疄鐜幫細
聽聽聽聽聽聽聽
CWnd*聽CEditCtrlFactory::getCtrl(CString聽attributeName)

{
聽聽聽聽//浠庢槧灝勮〃涓彇寰梒edit瀵硅薄
聽聽聽聽CWnd聽*pWnd;
聽聽聽聽m_ctrlMap.Lookup(attributeName,pWnd);
聽聽聽聽return聽pWnd;
}聽聽聽聽聽聽聽 棣栧厛緇勪歡鐨勭浉鍏充俊鎭槸鏀懼湪xml閰嶇疆鏂囦歡閲岄潰鐨?瑕佹兂浣跨敤榪欎釜閰嶇疆鏂囦歡,灝變笉寰椾笉鐢ㄥ埌xml鐨刾arser,褰撶劧鎴戜滑鍦╳indows搴曚笅鍐欑▼搴?寰蔣宸茬粡鎻愪緵浜嗕竴涓皝瑁呭ソ鐨勫己鏈夊姏鐨勫伐鍏封斺擷mlDom銆傚叾涓彁渚涗簡寰堝鏈夌敤鐨勭被鍜屾帴鍙c傜敤榪欎簺涓滆タ鎿嶄綔xml鏄潪甯哥畝鍗曠殑銆備笉榪囧浜庣洰鍓嶆垜浠皟鐢╩atlab緇勪歡鐨勭▼搴忔潵璁詫紝騫朵笉涓瀹氶兘鑳藉鐢ㄥ埌銆傚彟澶栵紝鎴戣繕甯屾湜鑳藉鍦ㄦ垜鐨勯厤緗枃浠墮噷闈㈣繘琛岄亶鍘嗙殑鎿嶄綔銆傛墍浠ユ垜鑷鎶婃劅鍏磋叮鐨勪竴浜涙搷浣滄寜鐓ц嚜宸辯殑璋冪敤鏂瑰紡灝佽浜嗕竴涓嬨備笅闈㈡槸鍏充簬榪欎釜綾葷殑瀹氫箟鎯呭喌錛?br />
class
聽CMyXml聽聽
{
聽聽聽聽
//
鏈嚱鏁板彲浠ヨ闂換鎰廋MyXml綾誨璞$殑縐佹湁鍙橀噺
聽聽聽聽friend聽CMyXml::AppendChild(CMyXml聽xml);
public
:
聽聽聽聽BOOL聽AppendChild(CMyXml聽xml);
//
灝唜ml鎸囧畾鑺傜偣闄勫姞涓哄瓙鑺傜偣
聽聽聽聽_bstr_t聽GetDocXml();
//
鑾峰彇xml鏂囨。鍐呭
聽聽聽聽BOOL聽GetChildNodes();
//
鑾峰彇褰撳墠鑺傜偣鎵鏈夊瓙鑺傜偣
聽聽聽聽BOOL聽DeleteNode();
//
鍒犻櫎褰撳墠鑺傜偣
聽聽聽聽BOOL聽CreateNewNode(LPTSTR聽NodeName);
//
浠庡綋鍓嶈妭鐐瑰垱寤哄瓙鑺傜偣
聽聽聽聽BOOL聽AddAttrbuteDefinition(LPTSTR聽AttrbuteName);
//
涓哄綋鍓嶈妭鐐瑰鍔犲睘鎬?/span>
聽聽聽聽BOOL聽DeleteAttrbuteDefinition(LPTSTR聽AttrbuteName);
//
涓哄綋鍓嶈妭鐐瑰垹闄ゅ睘鎬?/span>
聽聽聽聽_bstr_t聽GetAttrbuteValue(LPTSTR聽AttrbuteName);
//
鑾峰彇鑺傜偣鍊?/span>
聽聽聽聽BOOL聽SetAttrbuteValue(LPTSTR聽AttrbuteName,LPTSTR聽AttrbuteValue);
//
璁劇疆鑺傜偣鍊?/span>
聽聽聽聽_bstr_t聽GetCurrentNodeValue();
//
鑾峰彇褰撳墠鑺傜偣鐨勫?/span>
聽聽聽聽BOOL聽SetCurrentNodeValue(LPTSTR聽NodeValue);
//
璁劇疆褰撳墠鑺傜偣鐨勫?/span>
聽聽聽聽BOOL聽MoveToParent();
//
縐誨姩褰撳墠鑺傜偣鍒扮埗鑺傜偣
聽聽聽聽BOOL聽MoveCurrentTo(
long
聽nIndex);
//
縐誨姩褰撳墠鑺傜偣鍒拌妭鐐瑰垪涓寚瀹氫綅緗?/span>
聽聽聽聽BOOL聽LoadXmlFromFile(LPTSTR聽XmlFileName);
//
浠庢枃浠惰鍏ml
聽聽聽聽BOOL聽LoadXmlFromString(LPTSTR聽XmlDocSTR);
//
浠庡瓧絎︿覆璇誨叆xml
聽聽聽聽BOOL聽GetMatchedSubElementList(LPTSTR聽ElementName);
//
浠庡綋鍓嶆寚鍚戝厓绱犵殑瀛愬厓绱犲綋涓幏鍙栧拰鎵緇欏悕瀛楀尮閰嶇殑鍏冪礌鍒?/span>
聽聽聽聽BOOL聽GetMatchedParentElementList(LPTSTR聽ElementName);
//
浠庡綋鍓嶈妭鐐圭殑鐖惰妭鐐圭殑鎵鏈夊瓙鑺傜偣涓幏鍙栧拰鎵緇欏悕瀛楁墍鍖歸厤鐨勫厓绱犲垪
聽聽聽聽BOOL聽GetMatchedRootElementList(LPTSTR聽ElementName);
//
浠庢牴鑺傜偣涓幏鍙栧尮閰嶇殑鑺傜偣鍒?/span>
聽聽聽聽CString聽GetCurrentNodeName();
//
鑾峰彇褰撳墠鑺傜偣鐨勫悕縐?/span>
聽聽聽聽
long
聽GetCurrentIndex();
//
鑾峰彇褰撳墠鑺傜偣鐨勪綅緗?/span>
聽聽聽聽
long
聽GetCurrentListLength();
//
鑾峰彇褰撳墠鑺傜偣鍒楀厓绱犱釜鏁?/span>
聽聽聽聽BOOL聽Save();
//
淇濆瓨xml
聽聽聽聽BOOL聽SaveAs(LPTSTR聽Filename);
//
鍙﹀瓨涓?/span>
聽聽聽聽CMyXml();
聽聽聽聽
virtual
聽
~
CMyXml();
聽聽聽聽
private
:
聽聽聽聽
//
縐佹湁鏂規硶
聽聽聽聽BOOL聽AssertDocument();
//
鍒ゆ柇褰撳墠鏂囨。鏄惁鏈夋晥
聽聽聽聽BOOL聽AssertNode();
//
鍒ゆ柇褰撳墠鏂囨。鏄惁鏈夋晥
private
:
聽聽聽聽CString聽m_sXmlFile;
//
xml鏂囦歡璺緞
聽聽聽聽IXMLDOMDocumentPtr聽m_xmlDocument;
//
xml鏂囨湰
聽聽聽聽IXMLDOMNodePtr聽m_xmlCurrentNode;
聽聽聽聽IXMLDOMNamedNodeMapPtr聽m_xmlAttrbuteMaps;
//
鑺傜偣灞炴у垪琛?/span>
聽聽聽聽IXMLDOMNodeListPtr聽m_xmlMatchedList;
聽聽聽聽
long
聽m_Index;
//
褰撳墠鑺傜偣浣嶇疆
聽聽聽聽CString聽m_sCurrentNodeName;
//
褰撳墠鑺傜偣鐨勫悕縐?/span>
}
;
聽聽聽聽聽聽聽 鍋囧鎯寵浠庡綋鍓嶈妭鐐瑰悜涓婄Щ鍔ㄥ埌瀹冪殑鐖朵翰鑺傜偣錛屽湪CMyXml涓槸榪欐牱瀹炵幇鐨勶細
聽聽聽聽聽聽 涓昏鏄嬌鐢ㄤ簡IXMLDOMNodePtr鐨剆electNodes鏂規硶銆?br />聽聽聽聽聽聽 浠ヤ笂鏄嚑涓柟娉曪紝鍦ㄨ繖閲屽彧鏄畝鍗曠殑鎻忚堪涓涓嬨傚叿浣揦mlDom涓殑鏂規硶錛孧SDN閲岄潰鎻忚堪鐨勯潪甯告竻鏅幫紝榪欓噷涓嶅啀澶氳銆?/p>
聽聽聽聽聽聽聽鍏蜂綋浠g爜灝嗕細鍦ㄧ◢鍚庣殑鏃跺欑粰鍑恒?/p>
1銆?span style="FONT: 7pt 'Times New Roman'">聽 緙栧啓m鏂囦歡銆?/span>
鎵撳紑Matlab6錛屼緷嬈¢夋嫨File->New->M-File錛屽垱寤轟竴涓?/span>M鏂囦歡錛屽茍閿叆濡備笅淇℃伅錛?/span>
嫻嬭瘯鍙繍琛屽悗錛屼繚瀛樺茍鍏抽棴銆傝繖閲屼繚瀛樺緱鏂囦歡鍚嶄負draw2D.m銆傚洖鍒頒富鐣岄潰銆?br />
2銆?span style="FONT: 7pt 'Times New Roman'">聽 鐢熸垚緇勪歡
鍦ㄤ富鐣岄潰涓敭鍏ュ涓嬪懡浠ゅ茍鍥炶濺錛?/span>
Comtool
姝ゆ椂榪涘叆緇勪歡鍒涘緩鐣岄潰銆?/span>
姝ゆ椂錛屽湪鑿滃崟涓緷嬈¢夋嫨File->New Project鈥?/span>銆?br />
鍒欒繘鍏ョ粍浠墮厤緗晫闈€傚弬鐓т笅鍥捐繘琛岄厤緗?/span>
鍏朵腑Component name涓虹粍浠跺悕縐般傚湪榪欓噷鍛藉悕涓?/span>c1銆?/span>
浠ュ墠鐨?/span>Classes澶勪細鑷姩濉叆鈥?/span>c1鈥濄傝繖閲屾垜浠変腑c1鐐?/span>Remove灝嗗師鍚嶇О縐婚櫎錛屽茍鍦?/span>Class name涓~鍏モ?/span>Draw2D鈥濓紝鐐?/span>Add>>銆?/span>
Project directory涓虹粍浠剁殑淇濆瓨璺緞銆?/span>
Compile code in閫夐」閫夋嫨C++銆?/span>
Compiler options涓寜鐓у鍥捐繘琛岄挬閫夈?/span>
鐐?/span>OK銆傝繖鏍峰氨鍒涘緩濂戒簡涓涓粍浠剁殑閰嶇疆銆?/span>
鐐?/span>ok鍥炲埌緇勫緩鍒涘緩鐣岄潰銆?/span>
鐒跺悗閫変腑Draw2D錛屼緷嬈″湪鑿滃崟涓婇夋嫨Project->Add File鈥?/font>寮曞叆鍒氭墠緙栧啓鐨?/span>m鏂囦歡銆?/span>
鐐光滄墦寮鈥濓紝榪欐牱灝卞湪緇勪歡涓紩鍏ヤ簡m鏂囦歡銆?/span>
鐒跺悗鍥炲埌緇勪歡鍒涘緩鐣岄潰錛屼緷嬈¢夋嫨鑿滃崟涓殑Build->Com Object銆?/span>
鍥犱負鍙兘瑕佸湪娌℃湁瀹夎matlab鐨勭數鑴戜笂闈㈡惌寤虹幆澧冿紝鎵浠ヨ繖閲屾垜浠『渚挎墦涓寘錛屼負鎼緩鐜榪涜鍑嗗銆備緷嬈¢夋嫨鑿滃崟涓婇潰鐨?/span>Component->Package Component銆?br />
鍦ㄦ楠?/span>2鐨勬渶鍚庯紝鎴戜滑鐪嬩竴涓嬫枃浠剁殑杈撳嚭緇撴灉銆?/span>
鍦?/span>c1鐨勫伐浣滅洰褰曚腑鐪嬪埌榪欐牱涓浜涙枃浠躲?/span>
鍏朵腑鏂囦歡澶?/span>src閲岄潰鏄湪緙栧啓c++紼嬪簭涓兘澶熷紩鍏ョ殑澶存枃浠跺拰鎺ュ彛瀹氫箟鏂囦歡銆佺被瀹氫箟鏂囦歡絳夋枃浠躲?/span>Distrib涓槸鐢熸垚鐨勭粍浠剁粍浠舵枃浠躲傞鍏堢湅涓涓?/span>distrib 鏂囦歡澶廣?img height="113" alt="matlab11.JPG" src="http://m.shnenglu.com/images/cppblog_com/qzb2006e/matlab11.JPG" width="593" border="0" />
C1.exe涓烘墦鍖呮枃浠訛紝鐢ㄤ簬榪涜鐜鎼緩銆?/span>C1_1_0.dll鏄瀯寤虹殑緇勪歡搴撴枃浠躲傚叾浠栨枃浠舵垜浠笉鐢ㄥ叧蹇冦?/span>
鎴戜滑鍦ㄥ啀涓涓?/span>src鏂囦歡澶廣傞噷闈㈠寘鍚緢澶氭枃浠躲?br />
榪欓噷鎴戜滑鍙叧蹇?/span>c1_idl_i.c鍜?/span>c1_com.cpp鏂囦歡錛屽洜涓哄叾涓寘鍚簡鎴戜滑闇瑕佺殑緇勪歡鐨凣UID銆佹帴鍙g殑RIID浠ュ強鏂規硶鐨勫畾涔夈傝嚦浜庨厤緗枃浠剁殑鍐呭瀹氫箟絳夋柟闈㈢殑鍐呭灝嗘斁鍒頒笅涓閮ㄥ垎璇存槑銆?/span>
聽聽聽聽聽聽聽聽