C++ is so magic !!!
问题起源:
我在业余时间编写基于WTL的控件重绘,为了灵活设置控件的各种样式,我选择了使用xml来配置控件的样式(比如文字颜色,字体,背景颜色)。其中build.xml用来设置控件类型、位置、文字、样式,skin.xml来设置颜色、字体、图片。
首先定义一个类UIData,提供接口LoadCtrl(从build.xml读取位置信息)和LoadCss(从skin.xml读取样式)。
然后定义一个类ICtrl(继承UIData)作为控件基类,提供接口Create。
在IForm中提供一个接口Find
build.xml
<main type="Form" rect="0,0,500,400" css="public">
<label type="Label" rect="0,0,120,20" text="hello" css="public">
</main>
ICtrl* Find(const string name); 将name传入后在Find内部先找出该name对应的type,接着发现该type是Label于是new ILabel,之后再LoadCtrl(该函数最后会调用LoadCss的),最后返回这个ILabel(也可以在返回前调用Create)。
上面是铺垫,下面是问题&