duilib

duilib入门简明教程 -- XML配置界面(6)

|▌冷眼眸甩不掉的悲伤 提交于 2021-01-04 09:19:25
前面那些教程都是为了让小伙伴们从win32、MFC过渡到duilib,让大家觉得duilib不是那么陌生,如果大家现在还对duilib非常陌生的话,那就说明前面的教程做得不好,请大家在下面留言,我会一一查看,并做出改进。 从这个教程开始就是见证奇迹的时刻啦~\(^o^)/~ 其实duilib主打的界面制作方式是XML + UI引擎 + win32框架,其实和浏览器HTML + CSS + 渲染引擎的方式非常类似,可以将其理解为一个非常mini的浏览器。 而用duilib写界面时,大部分是在写XML,类似于写HTML,这点可能会让习惯MFC等windows界面的伙伴们有点不习惯,需要克服克服,相信在看完Alberl的教程之后,就会习惯啦~ 前面的教程所使用的界面制作方式大家应该不算陌生,那么如果用XML来实现,会是什么样子呢? 其实也是很简单的, 1、把if( uMsg == WM_CREATE ) 里面的代码改成下面这样: if( uMsg == WM_CREATE ) { m_PaintManager.Init(m_hWnd); CDialogBuilder builder; CControlUI* pRoot = builder.Create(_T("duilib.xml"), (UINT)0, NULL, &m_PaintManager); // duilib

duilib 小知识 之 类样式的编写

此生再无相见时 提交于 2020-10-24 17:02:48
如果一样的控件经常被用到,最后写成一个类样式,这样再使用的时候就方便多了。 示例 比如: 滑动条类: <Class name="VolSlider" value="height="14" width="80" value="50" max="100" min="0" thumbsize="14,14" margin="20,0,0,0" valign="center" thumbnormalimage="slider_thumb.png" progresscolor="xnw_client_vedio_green" bkimage="slider_hor_bk.png" progressbarpadding="0,6,0,6" "/> 使用的时候,直接 <Slider class="VolSlider" name="SpeakVolumnSlider" /> 就可以了。 书写规则: 类书写还是很严格的,不小心就会出错, 绘制规则 有时候,要用文字图片组合控件 比如,写一个样式类实现下面的UI,这个特殊之处在于既有图片又有文字 可以用下面的样式 <Class name="handup_ver" value="height="64" width="60" textpadding="0,50,0,0" font="1" normaltextcolor="bk_wnd_darkcolor1

duilib 实现 可复用的模态对话框基类

早过忘川 提交于 2020-09-30 11:02:00
序 本文旨在 打造可复用的 duilib 模态对话框 基类 所谓模态对话,就是模态对话框出现时,主窗口不能进行任何操作。 duilib中的Msgbox就是模态对话框 模态对话框的核心实现很简单 但本文关注点在于打造 可服用的模态基类 构造一个自己的 模态框基类, 有具体模态显示需求时,只需由此基类,派生下就可以了。 0)模态对话框核心代码 模态对话框显示的时候 ,使得此模态对话框的 拥有者窗口,通常是父窗口 禁止响应 ::EnableWindow(hwnd, FALSE); 模态对话框销毁的时候, 重新使得拥有者窗口 进行响应 ::EnableWindow(hWndParent, TRUE); 一 模态对话框设计 1.1)返回值 当模态对话框销毁时,要告诉调用者 返回值信息, 比如点击的是 确定还是取消 这可通过枚举来实现 enum ModalRet { MB_YES_Modal, MB_NO_Modal }; 1.2)模态对话框需要有一个CALLBACK ,返回给调用者相关信息 typedef std::function<void(Moda 来源: oschina 链接: https://my.oschina.net/u/4387680/blog/4626830

duilib 窗口创建流程梳理

a 夏天 提交于 2020-08-19 05:45:09
1 duilib窗口类 <Window size="400,150" caption="0,0,0,60" roundcorner="16,16" shadowattached="false"> duilib自己封装了Window类 class UILIB_API Window : public virtual nbase::SupportWeakCallback { public: Window(); ~Window(); /** * @brief 获取窗口所属的 Windows 句柄 * @return 返回窗口关联的 Windows 窗口句柄 */ HWND GetHWND() const; /** * @brief 注册窗口类 * @return 返回 true 表示成功,否则表示失败 */ bool RegisterWindowClass(); /** * @brief 注册控件窗口类(与窗口的过程函数不同) * @return 返回 true 表示成功,否则表示失败 */ bool RegisterSuperClass(); /** * @brief 获取窗口类名称 * @return 返回窗口类名称 */ virtual std::wstring GetWindowClassName() const; /** * @brief 获取控件窗口类 * @return

学习c++ (五) 用duilib 编写界面

丶灬走出姿态 提交于 2020-08-15 16:31:38
还是那句话,不想用MFC,写的界面丑,不想依赖MFC的一些库,在网上闲逛,发现duilib还可以,至于QT,有时间再研究, dulib已经没人更新了,估计也是翻不出什么花样了,但研究一下总算是C++的一个扩展吧 这个并不是框架,也不是语言,就可以理解为一个c++类库,封装了一些做界面的常用的,但跟MFC还不同,它的界面上的东西都是画出来的,而且消息的处理方式也不太一样 另外一点,如何画,是用xml定义的,跟WPF的味道相似,其实来讲,感觉现在的网页,做前后端分离是一样的感觉,UI跟业务逻辑分离 比如现在的360,网易,微信,迅雷等都是这个画的。 这个哥们讲得比较多,但代码和资源都在CSDN上,没分下不来,谁能告诉我怎么赚分? (讲真的,csdn这事有点恶心,跟那个视觉中国一样德行) https://www.cnblogs.com/Alberl/p/3341956.html 但这博客讲得很粗,只适合有基础需要加大宽度的朋友 这个讲得很细,不过用的网易的分支版本,大家自己决定 https://www.cnblogs.com/feipeng8848/p/11912613.html 我自己的过程大概是这样 一、从git拉下来 二、用的vs2019打开的,升级后有些不能编译,按照提示做些简单修改即可 #include "afxres.h" LANGUAGE LANG_CHINESE,

duilib 实现截屏选取功能分析

☆樱花仙子☆ 提交于 2020-08-15 11:05:02
本文关注点 不再截屏 而是截屏选取工具 1 首先肯定是个透明窗口,且置顶 并且是工具窗口(任务栏不显示窗口图标) 窗口样式 <?xml version="1.0" encoding="utf-8"?> <Window shadowattached="false"> <Box > <VBox name="track_box" margin="200,200,200,200" bkimage="file='screen_border.png' corner='30,30,30,30'" > <HBox height="auto" margin="15,15,15,0" > <Control name="track_NW" width="17" height="17" bkimage="screen_point.png" /> <Control /> <Control name="track_T" width="17" height="17" bkimage="screen_point.png" /> <Control /> <Control name="track_NE" width="17" height="17" bkimage="screen_point.png" /> </HBox> <Control /> <HBox height="auto" margin="15,0,15

duilib 绘图机制分析

旧时模样 提交于 2020-08-14 22:47:07
注:本文使用的是云信duilib 1 绘图功能基本接口 抽象类 不负责具体实现功能,而是定义绘图时,应该具有的功能,由纯虚函数定义 在duilib中,将与绘制相关的功能,定义成了抽象类纯虚函数接口,定义了绘图使用的渲染上下文环境 在IRender.h中,定义了各种接口 抽象类 其中,最重要的就是IRenderContext ,渲染上下文接口类,此抽象类中定义了绘图所应该有的常用功能 class UILIB_API IRenderContext : public nbase::SupportWeakCallback { public: virtual HDC GetDC() = 0; virtual bool Resize(int width, int height, bool flipBItmap = true) = 0; virtual void Clear() = 0; virtual std::unique_ptr<IRenderContext> Clone() = 0; virtual HBITMAP DetachBitmap() = 0; virtual BYTE* GetBits() = 0; virtual int GetWidth() = 0; virtual int GetHeight() = 0; virtual void ClearAlpha(const

用Duilib界面库开发的一个日历控件

送分小仙女□ 提交于 2020-04-11 13:48:39
估考虑使用Duilib这一免费开源的利器,在业务功能实现上,办公自动化少不了日历控件的使用,在网上寻了半天,没有好的开源的日历控件,更多的是web版的日历控件,估决定参考web版的日历控件,使用duilib实现一个winform版的日历,在网上找到的比较炫的一个日历如下: 做web开发的朋友可以在这里找到此控件: http://www.open-open.com/ajax/ajax20091109225817.htm 下面我们使用Duilib实现winform版的日历控件: a、将其web版的资源文件,主要是图片,下载到本地; b、编写duilib需要使用到的xml文件,Calendar.xml; View Code 1 <? xml version="1.0" encoding="utf-8" standalone="yes" ?> 2 < Window size = "429,470" sizebox = "4,4,6,6" caption = "0,0,0,30" > 3 < VerticalLayout name = "VerticalLayoutUI1" pos = "205,186,265,216" width = "60" height = "30" bkimage = "body.png" bordercolor = "#009DABCE" > 4 <

给CEF 加载网页时,增加蒙版

烂漫一生 提交于 2020-04-10 16:28:05
加载网页一般费时,所以需要再开始加载网页时,添加蒙版,再加载网页后,取消蒙版 具体方法如下: duilib UI布局端: <VBox bkcolor="xnw_client" bordercolor="green" bordersize="1,1,1,1" padding="1,1,1,1"> <!-- 客户端名称设置 --> <HBox height="30" bkcolor="xnw_yellow"> <Control /> <Label text="" valign="center" font="2" normaltextcolor="black" /> <Control /> <Button class="btn_wnd_close_black" name="myClosebtn" margin="0,0,10,0" valign="center" /> </HBox> <VBox name="loading" height="stretch" visible="true"> <Control /> <Control bkimage="loading.gif" width="auto" height="auto" halign="center" /> <Control /> </VBox> <CefControl name="cef_control" visible=

2013 duilib入门简明教程 -- XML配置界面(6)

假如想象 提交于 2020-03-03 17:01:23
前面那些教程都是为了让小伙伴们从win32、MFC过渡到duilib,让大家觉得duilib不是那么陌生,如果大家现在还对duilib非常陌生的话,那就说明前面的教程做得不好,请大家在下面留言,我会一一查看,并做出改进。 从这个教程开始就是见证奇迹的时刻啦~\(^o^)/~ 其实duilib主打的界面制作方式是XML + UI引擎 + win32框架,其实和浏览器HTML + CSS + 渲染引擎的方式非常类似,可以将其理解为一个非常mini的浏览器。 而用duilib写界面时,大部分是在写XML,类似于写HTML,这点可能会让习惯MFC等windows界面的伙伴们有点不习惯,需要克服克服,相信在看完Alberl的教程之后,就会习惯啦~ 前面的教程所使用的界面制作方式大家应该不算陌生,那么如果用XML来实现,会是什么样子呢? 其实也是很简单的, 1、把if( uMsg == WM_CREATE ) 里面的代码改成下面这样: if( uMsg == WM_CREATE ) { m_PaintManager.Init(m_hWnd); CDialogBuilder builder; CControlUI* pRoot = builder.Create(_T("duilib.xml"), (UINT)0, NULL, &m_PaintManager); // duilib