![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Duilib
asmcvc
这个作者很懒,什么都没留下…
展开
-
DuiDesigner修改:增加对RichEdit控件属性的保存
当资源中有RichEdit时,无论怎么样修改其属性,最终保存时并不会被写到XML中去,仅仅是一个节点:,属性一概没有保存。通过动态跟踪xml保存的调用过程,定位到函数:CLayoutManager::SaveProperties:switch(pExtended->nClass) {case classControl: SaveControlProperty(pC...原创 2019-03-13 20:12:40 · 273 阅读 · 0 评论 -
Duilib中list控件支持ctrl和shif多行选中的实现
一、 由于diulib不支持list控件的多选修改。下面是修改的原理。Ctrl+左键多选,按下Ctrl键点击,主要有三种情况:选中一个再点击,又选中一个再点击前一个,前一个选中状态消失总结分析:ctrl按下的情况,点击,不会使前一个(一部分)选中项失去选中状态,而只是让当前点击的项改变选中状态,并将焦点移到当前项。shift+左键,主要有4中情况点击选中一个(ID为2),向下...原创 2019-03-15 18:56:51 · 1289 阅读 · 0 评论 -
duilb常用xml
参考:Duilib总结与心得 简书Edit的边框两种设置方法设置背景图bkimage="res='search_bg.png' corner='6,6,6,6'"设置边框颜色bordersize="1" bkcolor="#FFFFFFFF" bordercolor="#FF4EA0D1"Button背景图:hotimage="res='button_hover.png'...原创 2019-03-15 18:56:25 · 422 阅读 · 0 评论 -
DuiDesigner修改:增加对控件CheckBox属性的保存
这次修改主要是DuiDesigner工程,duilib工程无须任何修改。stdafx.h中enum UIClass枚举增加:classCheckBox,并引用命名空间:using DuiLib::CCheckBoxUI;stdafx.cpp中gGetUIClass增加:if( _tcscmp(pstrClass, _T("CheckBoxUI")) == 0 ) nCla...原创 2019-03-15 18:55:57 · 442 阅读 · 0 评论 -
DuiDesigner修改:增加对控件vscrollbar,hscrollbar属性的显示和保存
1、显示:CUIProperties::ShowContainerProperty修改为://hscrollbarpPropContainer->GetSubItem(tagHScrollBar-tagContainer)->SetValue((_variant_t)(pContainer->GetHorizontalScrollBar()==NULL?false:true...原创 2019-03-15 18:55:32 · 664 阅读 · 0 评论 -
修复duilib使用的tinyxml的一个BUG
以RichListRes为例,用修改后的DuiDesigner重新载入xml皮肤配置文件,稍作修改并撤销然后保存,为的是重新保存xml文件,运行RichListRes工程会崩溃。然后发现DuiDesigner用的是tinyxml保存的xml,而加载的时候用的是CMarkup,以至于以为是两者操作xml的不同导致的问题,当时差点就要把这两者的操作改为同一个库了。实际上这是不可取的,毕竟工作量太大了...原创 2019-03-15 18:55:07 · 436 阅读 · 1 评论 -
duilib对CListUI的改造:支持checkbox
参考:http://blog.csdn.net/tragicguy/article/details/21893065注意:此处需要将内嵌控件的ListHeaderItem 添加一个inset属性,控制内嵌的控件不要铺满整个ListHeaderItem ,否则表头拖动不了,如:ListHeaderItem text="" inset="1,0,1,0"这个注意其实很容易被遗忘,而且duid...原创 2019-03-15 18:54:38 · 2060 阅读 · 0 评论 -
DuiDesigner修复编辑器不保存CComboUI的textpadding属性的bug
实际使用发现CComboUI的textpadding为 5 较好,在CComboUI::CComboUI中添加:m_rcTextPadding.left = 5;DuiDesigner中的CLayoutManager::SaveComboProperty增加:RECT rcTextPadding = pComboUI->GetTextPadding();_stprintf_s(sz...原创 2019-03-15 18:54:09 · 292 阅读 · 0 评论 -
duilib-CComboUI执行SelectItem无效果排查
动态跟进CComboUI::SelectItem:bool CComboUI::SelectItem(int iIndex, bool bTakeFocus){ if( m_pWindow != NULL ) m_pWindow->Close(); if( iIndex == m_iCurSel ) return true; int iOldSel = m_iCu...原创 2019-03-15 18:53:29 · 1456 阅读 · 0 评论 -
duilib创建IE浏览器的方式
方式一:<ActiveX name="web" clsid="{8856F961-340A-11D0-A96B-00C04FD705A2}" delaycreate="false" />这个方法更通用,也可以创建其他ActiveX控件,但是如果指定要创建浏览器的话不建议这么做,被坑了N多年。方式二:<WebBrowserEx name="web" clsid="{88原创 2019-03-15 18:57:14 · 531 阅读 · 0 评论 -
如何编译duilib
编译错误:1>f:\xxx\duilib\Control/UIWebBrowser.h(76) : error C2061: 语法错误: 标识符“ __RPC__out”1>f:\xxx\duilib\Control/UIWebBrowser.h(77) : error C2061: 语法错误: 标识符“ __RPC__deref_out_opt”1>f:\xxx\duil...原创 2019-03-13 20:07:53 · 293 阅读 · 0 评论 -
DUILIB相对位置修改为锚概念
duilib里面的relativepos设计的感觉不是很好用,采用CAnchorCtrl的模式以及C#窗口设计的模式,我们重新把相对位置的概念定义为“锚”。如图所示,锚可以设置为相对父窗口:顶部,底部,左侧,右侧,以及它们中间的任意组合:enum { Left = 1, Top = 2, Right = 4, Bottom = 8, LeftTop = Left | To...原创 2019-03-13 20:12:12 · 1090 阅读 · 0 评论 -
DUILIB界面设计技巧:如何设计可切换的TAB页面
如图所示的窗口TAB页面如何设计呢?主窗体的标题头我们设计一个HorizontalLayout,TAB页前面再增加一个HorizontalLayout用于显示LOGO,这不多表述。为TAB按钮们添加一个HorizontalLayout,然后添加四个Option作为TAB按钮:之所以选择Option是因为Option有选择状态(selected)属性可以设置,当被选择时我们就可以显示底部的...原创 2019-03-13 20:11:47 · 2494 阅读 · 0 评论 -
DuiDesigner改进:不绘制绿色边框
默认效果如上图,想修改为下图:代码中搜索RGB颜色表示:0,255,0,找到函数:CLayoutManager::DrawAuxBorder注释掉所有对此函数的调用即可。参考DuiDesigner修改:增强选择元素后的用户体验关于duilib中的list的扩展探索duilib CTileLayoutUI 控件duilib中ListCtrl控件的实现duiLib : 修改Dui...原创 2019-03-13 20:11:20 · 343 阅读 · 0 评论 -
duilib保存属性的代码CLayoutManager::SaveProperties
void CUIProperties::InitPropList() pProp=new CMFCPropertyGridProperty(_T("Class"),(_variant_t)_T(""),_T("控件的类型"),tagClass);//class pPropUI->AddSubItem(pProp);void CUIProperties::ShowControlPro...原创 2019-03-13 20:10:52 · 157 阅读 · 0 评论 -
关于duilib的CLayoutManager::SaveControlProperty代码
void CLayoutManager::SaveControlProperty(CControlUI* pControl, TiXmlElement* pNode){ TCHAR szBuf[MAX_PATH] = {0}; if(pControl->GetName() && _tcslen(pControl->GetName()) > 0) { ...原创 2019-03-13 20:10:19 · 196 阅读 · 0 评论 -
DuiDesigner控件Label无法设置文本对齐属性的BUG解决方案
修复duilib资源编辑器的bug:label、按钮控件无法设置除了center之外的文本对齐方式修复duilb文本显示对齐方式的逻辑错误代码,DT_LEFT和DT_RIGHT必须配合属性DT_SINGLELINE使用另外添加了左对齐和右对齐文本显示属性默认纵向居中的逻辑,便于编排控件首先解决文字绘制不支持左对齐的BUG,因为文字属于绘制逻辑实现的,所以我们先从视图的绘制开始找起。vo...原创 2019-03-13 20:09:50 · 868 阅读 · 0 评论 -
DuiDesigner文件被修改重新载入(BUG是改出来的)
预期效果:点击TAB切换不同xml皮肤文件的时候,如果文档在外发生变化则提示是否重新加载。MFC的单(多)文档设计不熟悉,页面激活状态不知道应该如何设置,这里从最熟悉的消息开始,重点看分析方法。DuiDesigner是支持文件拖放的,如果拖放进多个文件,势必是最后一次的视图是激活状态,如果再拖进去之前的某一个相同文件进去,那么之前的那个视图就会被选中并处于激活状态。资源布局文件拖放进来时的逻...原创 2019-03-13 20:09:13 · 597 阅读 · 0 评论 -
初识duilib
国内首个开源的DirectUI界面库–DuiLib,DuiLib开发语言为C++,采用纯Win32API,无其他额外依赖;支持图片等资源的压缩,方便携带传播;目前支持的开发平台为vc6-vc10,Demo比较丰富,非常容易上手。Duilib是一个windows下免费开源的directui界面库,本来代码是托管到谷歌代码的(https://code.google.com/p/duilib/),基于...原创 2019-03-13 20:08:27 · 337 阅读 · 0 评论 -
关于duilib控件richedit的appendmsg
if (m_logOutCtrl == NULL) return; int lines = m_logOutCtrl->GetLineCount(); //由于输出信息太多,所以当超过200行时,删除前100行 if (lines >= 200) { m_logOutCtrl->SetSel(0, m_logOutCtrl...原创 2019-03-14 19:18:20 · 491 阅读 · 0 评论 -
DuiDesigner增加:打开皮肤配置文件所在的文件夹
经常使用VisualStudio,习惯使用该功能:打开并选择对应的文档,但是DuiDesigner只是打开文件夹,并不选中对应的文档:void CUIDesignerDoc::OnMdiOpenFullPath(){ if(m_strPathName.IsEmpty()) { MessageBox(NULL, _T("请先保存当前文件。"), _T("提示"),...原创 2019-03-14 19:17:49 · 225 阅读 · 0 评论 -
DUILIB的消息处理HandleMessage
duilib还提供了另外一种响应的方法,即消息映射DUI_BEGIN_MESSAGE_MAP,可以将DUI_MSGTYPE_CLICK消息映射到指定的函数(比如OnClick),这和在Notify判断msg.sType是一样的效果,具体请参见duilib的RichListDemo。先看看下面几段代码:DUI_BEGIN_MESSAGE_MAP(CPage1, CNotifyPump) ...原创 2019-03-14 19:16:58 · 2672 阅读 · 0 评论 -
关于duilib的字体font
前面介绍了Default属性,属于全局属性,而字体也是全局属性,也是定义到一级子节点。<Font name="20号字体" size="20" bold="false" italic="false" /><Font name="15号字体" size="15" bold="false" italic="false&原创 2019-03-14 19:16:02 · 2044 阅读 · 0 评论 -
duilib设置标题栏区域调整窗口大小
1. 怎么设置标题栏区域?只需在XML的Window节点加上caption="0,0,0,32"即可,其中32是指从窗口顶部开始,往下32个像素的区域,都设置成标题栏,这样就可以点击标题栏拖动窗口,或者双击最大化了。<Window size="800,600" caption="0,0,0,32" >不过可以发现有些Demo的标题栏文字区域不能拖动,比如360Demo,那是因为...原创 2019-03-14 19:15:37 · 1799 阅读 · 1 评论 -
利用duilib的default属性定制默认样式
下面我们介绍一下duilib的另一种特性,那就是可以定制默认样式,这样做有什么好处呢?假如我们有10个按钮,按钮样式都一样,如果用之前介绍的方式,则需要在每个Button节点都指定图片背景、宽度、高度等信息,一旦需要改动任何一个属性,则需要在10个按钮里面都改一次,所以为了方便修改,我们可以指定一个默认样式,就算有100个按钮,我们也只需要改一次属性。方法如下:给节点添加一个Default节...原创 2019-03-14 19:15:13 · 1487 阅读 · 0 评论 -
duilib中判断是否相等和等于号重载的一个BUG
CDuiString的bug (重温了一下 Effective C++,发现这就是条款24所指出的问题,看来读书百遍不如写代码一遍啊)在Notify处理消息时会有很多if语句,我通常喜欢把常量放在双等号前面,变量放在后面,比如:if( _T("click") == msg.sType ) {}但是却发现并没有进到这个if里,调试发现,将常量调到前面时,并没有进入到CDuiString重...原创 2019-03-14 19:14:47 · 225 阅读 · 0 评论 -
可以考虑将DUILIB皮肤工程添加到VisualStudio的工程向导里去制作代码模板
参考:ref:http://www.codeproject.com/Articles/43653/Visual-C-Express-Custom-Wizard可重用的代码模板:class CDuiFrameWnd : public WindowImplBase{public: virtual LPCTSTR GetWindowClassName() const { ...原创 2019-03-14 19:14:17 · 238 阅读 · 0 评论 -
duilib在界面中创建自定义控件
CControlUI* CDuiFrameWnd::CreateControl( LPCTSTR pstrClassName ){ if (_tcsicmp(pstrClassName, _T("WndPlayPanel")) == 0) { CDialogBuilder builder; CControlUI* pUI = builder.Cre...原创 2019-03-14 19:13:47 · 650 阅读 · 0 评论 -
duilib问题解决:滚动条不见了
如图,运行后RichEdit的滚动条显示如下:滚动条的属性设置是在Window节点下设置的,无论在xml里怎么样设置都不行:<Default name="VScrollBar" value="button1normalimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;0,90,16,106&a...原创 2019-03-14 19:13:17 · 1800 阅读 · 0 评论