??xml version="1.0" encoding="utf-8" standalone="yes"?>
题目很简单,昄aname中重复的W一?br>{案应当如此Q调试通过Q?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行到Wn行数据的题也比较常见
不过应当注意是否包含Wm行,如果包含Wm行,则应该(q是针对上面的表Q:
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、命令管理器理命o
void testCommandManagerArrangeCommand()
{
cout<<">>>>>>>>>>>>命o理器调度命?
<<<<<<<<<<<<"<<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();
}
执行效果Q?/p>
>>>>>>>>>>>>命o理器调度命?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、命令管理器理命o理?
//命o理器调度命令管理器
void testCommandManagerArrangeCommandManager()
{
cout<<">>>>>>>>>>>>命o理器调度命令管?
?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();
}
执行效果Q?
>>>>>>>>>>>>命o理器调度命令管理器<<<<<<<<<<<<
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.
注意Q?
1、确保命令的Execute和UnExecute是完全可逆的操作?
2、要保障Execute和UnExecute的可逆性,特别要关注他们执行的环境Q比如绘囄时候,q些操作要有同样的尺寸标准,否则很难实现互逆的操作Q?
3、注意不要插入空命o?/p>
KeyNameQSession或ViewState的KeyQ?br>ControlIdQ要被赋值的控gQ?br>ControlPropertyNameQ要被赋值的控g属性;
PropertyNameQSession或ViewState中保存的对象的一个属性,q个属性g被赋l控件?br>代码
q里是用了CTypedPtrMapQ声明了一个变量m_ctrlMapQ它的烦引是一个CString型变量,然后内容Z个CWnd型的指针。我们知道,一切窗体、按钮等{的东西都是从CWndl承的。我们用CWnd来代指一切需要动态生成的控gQ其实在q个E序中,主要动态生成CEdit型和CStatic型控ӞQ这应当是一个装操作了吧?/p>
ҎcreateCtrl用来创徏控gQƈ攑ֈMap里面QgetCtrl用来从Map中取得相应的控g对象?br /> 下面是createCtrl的详l实玎ͼ
首先lg的相关信息是攑֜xml配置文g里面?要想使用q个配置文g,׃得不用到xml的parser,当然我们在windows底下写程?微Y已经提供了一个封装好的强有力的工具——XmlDom。其中提供了很多有用的类和接口。用q些东西操作xml是非常简单的。不q对于目前我们调用matlablg的程序来Ԍq不一定都能够用到。另外,我还希望能够在我的配|文仉面进行遍历的操作。所以我自行把感兴趣的一些操作按照自q调用方式装了一下。下面是关于q个cȝ定义情况Q?br />
假如惌从当前节点向上移动到它的父亲节点Q在CMyXml中是q样实现的:
主要是用了IXMLDOMNodePtr的selectNodesҎ?br /> 以上是几个方法,在这里只是简单的描述一下。具体XmlDom中的ҎQMSDN里面描述的非常清晎ͼq里不再多说?/p>
具体代码会在稍后的时候给出?/p>
1?span style="FONT: 7pt 'Times New Roman'"> ~写m文g?/span>
打开Matlab6Q依ơ选择File->New->M-FileQ创Z?/span>M文gQƈ键入如下信息Q?/span>
试可运行后Q保存ƈ关闭。这里保存得文g名ؓdraw2D.m。回C界面?br />
2?span style="FONT: 7pt 'Times New Roman'"> 生成lg
在主界面中键入如下命令ƈ回RQ?/span>
Comtool
此时q入lg创徏界面?/span>
此时Q在菜单中依ơ选择File->New Project?/span>?br />
则进入组仉|界面。参照下图进行配|?/span>
其中Component name为组件名U。在q里命名?/span>c1?/span>
以前?/span>Classes处会自动填入?/span>c1”。这里我们选中c1?/span>Remove原名称U除Qƈ?/span>Class name中填入?/span>Draw2D”,?/span>Add>>?/span>
Project directory为组件的保存路径?/span>
Compile code in选项选择C++?/span>
Compiler options中按照如图进行钩选?/span>
?/span>OK。这样就创徏好了一个组件的配置?/span>
?/span>ok回到l徏创徏界面?/span>
然后选中Draw2DQ依ơ在菜单上选择Project->Add File?/font>引入刚才~写?/span>m文g?/span>
点“打开”,q样在lg中引入了m文g?/span>
然后回到lg创徏界面Q依ơ选择菜单中的Build->Com Object?/span>
因ؓ可能要在没有安装matlab的电脑上面搭建环境,所以这里我们顺便打个包Qؓ搭徏环境q行准备。依ơ选择菜单上面?/span>Component->Package Component?br />
在步?/span>2的最后,我们看一下文件的输出l果?/span>
?/span>c1的工作目录中看到q样一些文件?/span>
其中文g?/span>src里面是在~写c++E序中能够引入的头文件和接口定义文g、类定义文g{文件?/span>Distrib中是生成的组件组件文件。首先看一?/span>distrib 文g夏V?img height="113" alt="matlab11.JPG" src="http://m.shnenglu.com/images/cppblog_com/qzb2006e/matlab11.JPG" width="593" border="0" />
C1.exe为打包文Ӟ用于q行环境搭徏?/span>C1_1_0.dll是构建的lg库文件。其他文件我们不用关心?/span>
我们在再一?/span>src文g夏V里面包含很多文件?br />
q里我们只关?/span>c1_idl_i.c?/span>c1_com.cpp文gQ因为其中包含了我们需要的lg的GUID、接口的RIID以及Ҏ的定义。至于配|文件的内容定义{方面的内容放C一部分说明?/span>