加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
更新日志.txt 15.92 KB
一键复制 编辑 原始数据 按行查看 历史
//////////////////////////////////////////////////////////////////////////////////
DuiEditor使用说明
//////////////////////////////////////////////////////////////////////////////////
首先说明的是, 使用DuiEditor编辑界面的前提是, 你要会手写. 比如DuiEditor并不会禁止在Window下面直接插入一个List.
由于duilib有许多的个人维护版本, 为了更大的兼容, 设计器从duilib.xml载入控件属性. 需要给设计器增加新控件的话, 只需要编辑duilib.xml就可以. 如果一个控件在duilib.xml定义, 但界面库没定义, 设计器依然可以编辑属性, 但无法预览.
BUG或者建议可以给我发邮件, 53751257@qq.com, 欢迎赞助.
QQ群:819272442。
1, 控件的默认属性float=false, 非float控件的pos.left和pos.top总是为0, 不要用鼠标直接拖拽非float控件的位置. 这是duilib的布局特点决定的.
2, 关于pos,width,height属性值的冗余, 实际上duilib代码里面, width和height属性就是冗余的. 实在纠结这个的话, 非float控件不要用鼠标或键盘方向键调准位置大小,直接在属性面板中设置pos的值. 毕竟float控件用的很少.
3, 自定义控件的使用, 插入CustomControl时,修改类名.
4, DuiEditor附带一个xml编辑页面, 与NodePad++等专业工具比起来, 只有一个小小的优点, 实现了简单的语法提示. 我是经常会把VerticalLayout和HorizontalLayout写错的人. ^_^
5, 建议直接在面板中修改属性, 而不是用鼠标拖动位置,改变大小等等.
6, 软件可能有时候会崩溃, 随时保存文件.
2017-xx-xx
1, 完善绝对定位控件的对齐大小等等的设置
2, 类似于MFC编辑对话框资源, 直接输入文本设置控件的text.
2017-07-06
1, 测试窗体使用新建进程的方式, 设计器输出页面有测试窗体的事件显示. 有助于了解控件的触发事件.
DuiPreviewer.exe是设计器带的预览程序, 支持命令行. 如: DuiPreviewer.exe "-f c:\skin.xml".
另外, 可以设置附加测试程序.
2, 完善XML编辑页面, 看起来有点像nodepad++了.
增加代码折叠、颜色显示、查找替换、文件信息行列位置.
保存文件时XML解析错误提示,错误提示精确到行.
3, 增加选项设置, 载入文档时控件树展开的层数.
4, 增加样式表定义.
5, 增加控件视图中TabLayout右键菜单, 可以快速切换页面.
6, 增加自定义控件, 自定义控件有个custombasedfrom属性, 仅仅在设计器中使用. 表示父类名,设计器只创建它的父类。 如果没有这个属性,设计器不创建控件。
7, 增加选项直接插入float控件
8, 增加xml注释解析. 可以在布局文件中写入注释内容了.
9, 其他小修改等等.
2017-06-26
1, 控件属性字段的位置, 强制按照duilib.xml中属性定义的顺序.
2, 非float控件的pos.left和pos.top设置为0.
3, 修改了图片编辑页面.
4, 每次修改控件属性, 过滤一次默认属性值, 防止属性冗余. 原先是保存文件时才过滤.
2018-08-24
1, ui界面显示使用子窗口的方式,使设计器更加脱离库
2,优化编辑代码页面。
3, 增加设计界面显示UI效果,比如鼠标悬停点击等。
4,重新核对属性文件duilib.xml
目前已知的问题:
1, undo redo无法完美还原,因为没有保存ItemIndex.
2, default style font 这类定义设计器没有做即时更新,修改后,需要重新打开文件。 另外,如果share=true,设计器关闭之前一直有效,因为这是CPaintManager的静态函数设置的,设计器没有清理这类资源。
2019-02-05
1, 增加界面模板
2019-03-01
1, 新增 按住Ctrl键, 移动控件, 是为复制控件
2, 切换文档时, 更新属性窗口
2020-03-16
1,即时更新Style, 这个修改许要改动CPaintManagerUI::AddStyle(). 要重新打开文件才能刷新显示。
2, 即时更新Default. 要重新打开文件才能刷新显示。
3, 即时更新Font属性,即时显示.
2020-04-11
1, 设计器默认载入一个叫config.xml的配置文件,文件中集中定义Font,default,style信息。
这样定义的原因是,我们经常写一些子窗口,
然而设计器单独打开子窗口的时候,字体等信息都没载入,又要打开主窗口才有,这样很痛苦。
一般来说,应该把Shared属性的放config里面,但是并不强求。
项目文件打开后,config只能被载入一次。
注意原版的duilib并不支持build一个无控件的UI文件。
同样的,DuiPreviewer也会默认的载入config.xml
2020-07-26
1,设计器下方增加即时xml编辑窗口,编辑完成右键更新到设计界面。
2,选中控件自动定位到xml代码行,原本的代码编辑窗口也可以的。
2020-09-02
1, 我总觉得pos属性太多余了。
选项里面加了一条,保存文件时,非float控件,pos属性的大小等于width和height属性,移除pos属性
2, 选项里面增加了一条,设计界面是否显示duilib窗口阴影。处理不好,就不显示了吧。
3,优化了属性搜索。
4,整理选项参数结构,参数配置不写注册表了,存在当前目录下,DuiEditor.xml。
5, CComboExUI 增加了一个Type属性,dropdown支持编辑框。
5,其他一些优化
2020-10-05
1, 实现xml增量更新,手写xml实时响应,再不是reload,rebuild了.
2020-10-21
1,BUG修复,设计模式调整float控件时,更新xml文档错位了。
2, BUG修复,编辑Window属性时,没有刷新设计视图
3,设计视图,增加EnsureVisible功能。
4, 按键盘ESC关闭预览窗口
2020-10-23
1, 完善部分控件箱图标
2, 当Window的size为0时,使用设计视图客户区大小作为Window的size。
3, 状态栏增加一个图标,用于指示自动解析xml是否成功。鼠标悬停该图标时有tooltip错误信息。
4, BUG修复,没有关闭预览窗口时,直接关闭DuiEditor, 死掉了。
5, BUG修复,删除Window下的根节点,再插入布局控件时,xml的定位又错了。
6, 增加AccordionPane控件
目前来看增量更新还是存在问题的,更新出错时,如下解决方法:
如果是设计模式更新XML出错,编辑器中右键选择“刷新(重新载入文档并格式化)”,这个操作是reload文档。
如果是编写XML更新到设计视图出错,编辑器中右键选择“强制更新到设计视图”,这个操作是rebuild界面。
然后告诉我出错的操作流程。
2020-11-05
1,BUG修复,鼠标拖动复制控件时,定位错了。
2,部分优化
3,增加DuiLib控件展示demo
2020-11-28
1,无意间打开一个朋友的布局文件,手写的,无法达到xml输出格式的标准,比如多个空格空行啥的。原来设计器载入文档时,先解析xml,再从解析完的pugixml中格式化输出到编辑器中,显然就出错了。改为,打开文档第一次输出到编辑器中,直接从文件中载入。
2,把Scintilla编辑器加到DuiPlugins插件了,名称为SciEdit。
2021-01-06
1,多语言字符串列表读取接口改了,原先是GetString1(),GetString2(),去除GetString3()。GetString1()改成GetString(), GetString2改成GetStringExtra()。改动原因是GetString1(),GetString2()我经常写错。
2021-01-29
1,完善缓存文件功能,再也不怕崩溃未保存了。
2,增加VC2019项目配置。
2021-02-23
1,增加CGridList类,用于替代MFCGridCtrl
2,个别类从plugin移入duilib。
2021-03-05
1,设计界面,右键菜单增加命令“设置Style属性”。 这个命令支持选中多个控件去设置。
2021-03-16
1,通过框架创建的菜单,自动析构, 不需要外部delete m_pMenuWnd。
2,CIPAddressUI控件,SetWindowFont(m_hWnd, m_pOwner->GetManager()->GetFontInfo(m_pOwner->GetFont())->hFont, TRUE),窗口关闭时,会把相关hFont一起卸载掉。暂时找不到原因。所以在类的内部创建自己的hFont。
3, 优化设置Style属性的菜单
2021-03-25
1, 增加静态链接。
2,RichEdit默认改为rich=false。
3, 处理DateTimeExUI发送DTM_GETSYSTEMTIME消息连续接收两次的问题,并且增加DuiLib消息DUI_MSGTYPE_TEXTCHANGED。
4, EditUI增加大小写属性。
5,CComBoExUI 增加DeleteString函数,根据字符串删除下来项。
6, 数据交换类CUIDataExchange,增加绑定TabLayoutUI当前序号。
7, 修正VC2019编译问题
2021-03-30
1,升级图像库stb_image 2.25
2, 增加PictureUI控件
3, 修正BUG,设计器关闭已修改的文件,点击不保存时,下次打开设计器依然提示是否载入未保存的文件。
4, 整理代码
5, 增加vc2010模板向导
6, 优化图像编辑窗口, 新增SVG图片设定填充颜色。
7, 右键菜单增加字体设定
2021-05-01
1, 由于很多朋友编译CxImage失败,决定去除CxImage支持,Plugins删除PictureControlUI和ImageBoxUI。新版本对应的图像控件使用PictureUI和PictureBoxUI,功能基本差不多,唯一区别是Picture控件不支持ico。CxImage会保留在3rd中,如果项目中需要用到图片的简单操作,建议使用。
2,增加CTreeCtrlUI,这是我重写的tree控件,目前展开收缩支持动画显示。后续可能会支持虚树(虚表)机制。
3, 删除原来旗舰版中的UIComboBox,这个控件只是内部对combo的资源图片做解析,没什么大作用,但是搞得我经常写错,所以删了。
4, 删除UIAnimationPane和UIAccordionPane,整合到Container中。
5,其他一些零碎改动。
2021-05-07
1, 修复svg填充颜色的bug,优化图片编辑器中文件的图标显示。
2021-06-16
1, CGridListUI改名CGridUI,实表为“虚表实数据”,支持纯虚表。
2,CTreeCtrlUI改名CTreeUI,实表为“虚表实数据”,不支持纯虚表。
3, ApplyAttributeList嵌套style时,内部属性使用双引号解析失败的问题。
2021-06-28
1, duilib, 按钮增加bindtabindexname属性,指定页面名字。因为我有10几个页面,如果都用序号,后期中间再插入页面,我。。。。
2, 设计器,属性列表改动项显示为粗体,就是非默认值的属性。
3, 设计器,新建UI文件时可能因为滚条范围负数崩溃的问题,原因未知,直接过滤负数了。
4, 设计器,控件箱已选中控件时,在设计视图点击右键取消选中。原先是会弹出右键菜单。
5, 设计器,支持从控件箱拖控件,拖放控件会自动寻找容器,与左键点击添加控件有点区别。
6,duilib,配置x64工程,修复x64编译失败问题,暂时只有duilib和duiplugins可以编译x64。
2021-07-05
1, 设计器,支持xml皮肤文件存放多个文件夹。 加强project.dui项目文件的作用。
2, 增加TableLayout布局,想法是遵从html的属性标准,未完成。
3, 替换CMarkup为pugixml1.11。
4, 修复v2019编译选项/permissive-时,编译失败的问题。微软说,从vs2017 版本15.8 开始 /permissive- 为默认选项。 -_*!!!
5, 设计器优化语言包文本编辑
6, 设计器右键菜单增加生成部分常用代码
2021-08-18
1, 修复BUG,可编辑的ComboxEx,在选择后,如果把编辑框的文本删了,然后你再去选就选不了。
2,TableLayout增加统一设置默认行高。
3,简化CDialogBuilder代码,去除builder时TreeNode的特殊代码,修改TreeView的Add/AddAt/Remove。如果有问题,请反馈给我。
2021-08-21
1, 绝对定位的floatpercent属性独立出来,不要夹带在float属性中,独立出来的属性用整数设置。作为兼容,原来的夹带方式保留。
2, 增加floatposition属性,绝对定位时,相对父控件的左上角百分比位置。 优先级比pos低。 也就是说,只有left==0或top==0时,对应百分比才会生效。
3, 增加widthpercent和heightpercent,相对父控件的宽度和高度。 优先级比width和height低。也就是说,只有with==0或height==0时,对应百分比才会生效。
4,原来的floatalign也是夹带设置的,如 floatalign="right,vcenter"。不符合设计器的规则,现增加floatvalign属性。兼容旧版。
2021-08-25
1, CEditUI支持多行,但是没有滚动条。
2,UIDialog增加默认按键响应
3, 增加CDynamicLayoutUI,支持参数设置横向布局或纵向布局。以后LabelLayout可能会从这个类继承。
4, 设计器,右键控件,弹出菜单增加生成样式表定义,把当前控件定义的属性转为Style定义。
5, 调整一些自动计算高度的问题。可能会有些不兼容,原来CEdit和CCombo的height=0时,会根据字体自动计算高度,改动之后以前没设置高度的这两控件会变成自动布局高度。
6, 修复加载svg偶尔崩溃的问题。
7, DuiLib内部使用的pugixml命名空间改为ui_pugi,避免静态编译时与外部使用pugixml冲突。
8, unzip.h,unzip.cpp,downloadmgr.h,FlashEventHandler.h,flash11.tlh 改为仅Include,不再包含在项目中。
2021-09-16
1, 感谢JonYang处理DuiScript编译64位的问题。包括设计器在内,整体项目可以支持64位编译。
2,把MFC的CWinApp操作注册表和Ini文件的函数移植到CUIAppliacation。
2021-10-12
1, 表格布局TableLayout的单元格TD的属性Inset,TextPadding,改为TableLayout列共用。
2, 代码中一律改为GetInset()和GetTextPadding(),而不是直接使用属性m_rcInset和m_rcTextPadding。
3, CMsgWndUI有个BUG,在duilib异步消息中需要输出日志到CMsgWndUI时, 可能出现死锁。 修改后,不是从CUIFrameWnd继承的主窗口,需要在HandleCustomMessage处理UIMSG_INSERT_MSG消息。
4, 多字节界面文字乱码。 修改为,解析xml文档之前从UTF8转码为ASCII。
5,IPAddressUI 滚动时位置错误。
6,整理代码
2021-10-14
1, 滚动时,控件内嵌的hwnd没有更新位置。
2021-10-18
1,去除原版中w2a,a2w函数。
2,修复设计器64位编译的几处BUG。
2021-10-27
1, 去除原版中StrSplit函数。增加CDuiStringArray。
2, UIDataExchange,增加ComboUI下拉列表绑定字符串的处理。
3, 修复设计器视图刷新的问题
4, 项目视图右键增加菜单,一键导出Res.xml,一键导出原版语言包,一键导出控件名和文件名的宏定义。
2021-11-14
1, 设计器代码生成产生的变量名,取值于ControlName。如:
CComboExUI *p_cb_receive_char_type = static_cast<CComboExUI *>(GetManager()->FindControl(_T("cb_receive_char_type")));
UI_BINDCONTROL(CComboExUI, m_cb_receive_char_type, _T("cb_receive_char_type"));
设计器生成代码增加定义成员变量,如: CComboExUI *m_cb_receive_char_type;
设计器代码生成增加SaveControl,LoadControl. 配合使用CUIAppConfig
2, UIDataExchange传入父容器,用于绑定容器中的子控件。当传入容器时,优先绑定容器内的控件。用于解决子控件重名的问题。
3, CUIForm增加GetRoot(), InitWindow时,自动绑定到FormName,如果存在的话。
4, CXmlDocumentUI允许载入文件夹文件,如果不想用其他第三方类,可以用它读写xml。
5, 增加类CUIAppConfig,用于配置文件,保存控件状态。通过uiApp.Config.调用。
6, 单独NeedUpdate某个控件时,float控件定位有问题。
2021-11-22
1, List表头拖动问题
2,设计器控件箱增加tip提示
3,导出Res.xml写错了,path写成了value
2022-01-01
1, 魔改,封装Render,UIFont, UIBrush, UIPen, UIBitmap, UIImage。统一使用Render接口进行绘制。
2, 魔改,把一些常用的属性,比如TextColor, TextStyle, NormalImage等等属性统统都丢到CControlUI了。其实duilib的控件都差不多一样的套路,这样可以避免扩展控件时频繁的出现重复代码。代价是牺牲了一丢丢的内存。
3,魔改,修改CDuiString为内存池版本,仿照CString做的,使用了内存复用技术。 可以完全不用CDuiString::GetData()这个函数了。
代码中除了GetClass()的返回值依然是LPCTSTR,其他看到的都改成了CDuiString,还有很多没改。 两者返回的效率是相等的。但是新版的,CDuiString sText = GetText(),相比旧版,少了一次字符串拷贝,效率应该要高点。
相同的,传递参数用CDuiString效率还可能更高,实参和引用的差别非常小
这个改动会产生一个问题,比如 LPCTSTR s = pControl->GetNormalImage(),由于GetNormalImage返回一个临时对象CDuiString,s总是会返回空字符串的。不过一定要这么写的话,当初GetText就有这个坑的。
基于这个原因,GetClass不能改成返回CDuiString,因为有极大的可能各位代码中有出现过 LPCTSTR pClassName = pControl->GetClass()。
4,增加StringConverterUI,相应的提供了一系列的 A <==> W <==> UTF8 转换宏,转换过程中使用的是CDuiString的内存池。
5, 魔改,增加了3个模板类,TemplateLabelUI,TemplateButtonUI,TemplateOptionUI。
因此又衍生出了几个类。
CLabelHLayoutUI,CLabelVLayoutUI,CLabelLayoutUI。
CButtonHLayoutUI,CButtonVLayoutUI,CButtonLayoutUI。
COptionHLayoutUI,COptionVLayoutUI,COptionLayoutUI。
6, 删除了showhtml属性。
7, 增加了ForceHSL属性,强制所有图片和颜色进行HSL转换。可以在设计器中预览。
注:不兼容的地方只有一点, 一堆的PaintXXX函数,传递的参数不再是“HDC hDC”,而是 “UIRender *pRender”。要避免pRender->GetDC()然后继续用gdi绘制,应该使用Render提供的绘图函数。
2022-01-09
1, DuiLib:void DrawText(RECT& rc, const RECT &rcTextPadding ....), 当调用参数为DT_CALCRECT,计算结果错误。
2,设计器:项目文件右键,增加菜单“在资源管理器中查看”。
3, DuiLib: 修改函数 CStdPtrArray::InsertAt(int iIndex, LPVOID pData)。插入位置超出原有长度时,总是插入到最后。
修改原因是,当编辑器中字符变化时,导致之后的所有控件重构,设计器可能会崩溃。
有些控件,重写了AddAt函数,并且偷偷插入到类内部的容器中,比如List。
根据xml结构推断iIndex显然是错误的,这个值会大于实际的数组长度(+1),然后AddAt失败............世界都乱了。
2022-01-21
1,更新脚本接口。
脚本中有个BUG,暂时无法解决。
比如脚本中这么写,SetText("1234"),首先"1234"初始化为CDuiString,然后是脚本引擎调用opImplConv转为LPCTSTR,转完后,原先的CDuiString被释放掉了。看起来是作用域没写好。导致真正调用CControlUI::SetText时,是个空字符串。要避免这个问题,注册到脚本内的函数都不能使用LPCTSTR作为参数。。。。又要改一大片-_-!!
那么以前怎么不会出错呢。因为原先CDuiString内部有个szBuffer[64],短字符串是存在这个数组里,转换之后,SetText()接收到的LPCTSTR实际上指向的是一片野内存。
目前脚本中应该这么写,CDuiString s = "1234"; SetText(s);
不要在传递参数过程中,产生CDuiString临时对象。
3,CMsgWnd,增加配置显示日期和时间,增加接口CMsgWnd::ClearMsg()。
4, 一组Option,当改变Selected时,取消和选中的那个都会收到 DUI_MSGTYPE_SELECTCHANGED 消息。
2022-02-24
1,增加消息DUI_MSGTYPE_ACCEPTFILE,控件属性acceptfile=true时,会接收到文件拖放消息。
2,zip解压时,如果文件名包含中文,会导致读取失败。原因是代码中把文件名转为了utf8格式。
3,dpi设置中,IsWindows8Point1OrGreater() 这个函数无效的,始终会返回win8.0,所以我改成了IsWindows8OrGreater() ,如果碰到了win8.0系统。。。。无效而已。
4,CPaintManager增加FindSubControlsByInterface。
5,GridUI。Cell(x,y)增加SetTextColor函数。增加消息DUI_MSGTYPE_STARTSELCHANG和DUI_MSGTYPE_ENDSELCHANGE,开始选择和结束选择。
6,处理bug。按钮SetEnable(false)时会保留hot状态;菜单弹出时主菜单项右边框不显示;使用资源xml时语言包出错。AutoCalcWidth和AutoCalcHeight有些问题。
2022-03-22
1,CDuiString有2处BUG,Unicode版本直接赋值多字节字符串时 和 多字节版本直接赋值Unicode字符串时,缓冲区分配错误。
2,CGridUI::GetCellUI 效率太低。
3,多语言管理增加新的字符串接口: CLangManagerUI::LoadString(LPCTSTR defaultString).
程序退出时, 调用CLangManagerUI::SaveStrings(LPCTSTR filePathName),保存已更新的StringResource.lng,在当前语言包路径下。
2022-09-21
1, 增加CBarCodeUI, CQRCodeUI。条码控件和二维码控件。
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化