duilib还提供了另外一种响应的方法,即消息映射DUI_BEGIN_MESSAGE_MAP,可以将DUI_MSGTYPE_CLICK消息映射到指定的函数(比如OnClick),这和在Notify判断msg.sType是一样的效果,具体请参见duilib的RichListDemo。 先看看下面几段代码: DUI_BEGIN_MESSAGE_MAP(CPage1, CNotifyPump) DUI_ON_MSGTYPE(DUI_MSGTYPE_CLICK,OnClick) DUI_ON_MSGTYPE(DUI_MSGTYPE_SELECTCHANGED,OnSelectChanged) DUI_ON_MSGTYPE(DUI_MSGTYPE_ITEMCLICK,OnItemClick) DUI_END_MESSAGE_MAP()
前面介绍了Default属性,属于全局属性,而字体也是全局属性,也是定义到一级子节点。 <Font name="20号字体" size="20" bold="false" italic="false" /> <Font name="15号字体" size="15" bold="false" italic="false" /> 序号从0开始,上述顺序中,第0个字体就是name为【20号字体】的字体,所以如果想用这个字体,只需要在控件的属性里指定字体序号即可,如: <Button text="字体测试" font="0"/>
1. 怎么设置标题栏区域? 只需在XML的Window节点加上caption=”0,0,0,32”即可,其中32是指从窗口顶部开始,往下32个像素的区域,都设置成标题栏,这样就可以点击标题栏拖动窗口,或者双击最大化了。 <Window size="800,600" caption="0,0,0,32" > 不过可以发现有些Demo的标题栏文字区域不能拖动,比如360Demo,那是因为它的文字区域用的是Text,这里必须换成Label,或者将控件禁用(添加属性 enable=”false”),否则点击文字区域无法移动标题栏。
下面我们介绍一下duilib的另一种特性,那就是可以定制默认样式,这样做有什么好处呢?
CDuiString的bug (重温了一下 Effective C++,发现这就是条款24所指出的问题,看来读书百遍不如写代码一遍啊)
参考: ref:http://www.codeproject.com/Articles/43653/Visual-C-Express-Custom-Wizard
```c CControlUI* CDuiFrameWnd::CreateControl( LPCTSTR pstrClassName ) { if (_tcsicmp(pstrClassName, _T(“WndPlayPanel”)) == 0) { CDialogBuilder builder; CControlUI* pUI = builder.Create(_T(“WndPlayPanel.xml”)); return pUI; }
如图,运行后RichEdit的滚动条显示如下:
当资源中有RichEdit时,无论怎么样修改其属性,最终保存时并不会被写到XML中去,仅仅是一个节点:,属性一概没有保存。
duilib里面的relativepos设计的感觉不是很好用,采用CAnchorCtrl的模式以及C#窗口设计的模式,我们重新把相对位置的概念定义为“锚”。