![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Duilib
Jinchx_NightSong
这个作者很懒,什么都没留下…
展开
-
Duilib 源码分析之 xml 解析篇
上一篇文章介绍了 Duilib 是如何读取 xml 的 (Duilib 源码分析之 xml 加载篇),接下来介绍 Duilib 是如何解析加载到内存的 xml 的。首先列出解析 xml 的几个关键类: - UIDlgBuilder - UIMarkup - CMarkupNode在 xml 加载篇的帖子中,已经介绍过,在窗口创建的消息相应函数 OnCreate 中,调用了 UIDl原创 2017-04-28 10:34:25 · 1363 阅读 · 0 评论 -
Duilib 源码分析之 PaintBorder 篇
Duilib 中的控件在调用 DoPaint 进行绘制当前控件的最后一步是绘制边框,其中边框的绘制又分为圆角矩形边框和直角矩形边框,边框的样式也可以自定义。 首先, 绘制边框的三个方法:void CRenderEngine::DrawRoundRect(HDC hDC, const RECT& rc, int width, int height, int nSize, DWORD dwPe原创 2017-12-15 10:44:43 · 776 阅读 · 0 评论 -
Duilib 源码分析之 COptionUI 篇
COptionUI 继承自 CButtonUI, 按钮的各个状态会显示不同的文字颜色啊、背景图片啊什么的这个就不再介绍了,每个版本的 Duilib 对 COptionUI 的状态支持可能不同,大家参考一下自己的代码就可以了。这部分内容也可以看一下 Duilib 源码分析之 CButtonUI 篇。 这篇帖子中着重介绍一下 COptionUI 自己的特色的功能bool m_bS原创 2017-12-28 14:50:38 · 3179 阅读 · 0 评论 -
Duilib 源码分析之 CButtonUI 篇
Duilib 中的 CButtonUI 继承自 CLabelUI, 在可以显示文字的基础上可以显示不同状态下的图片,不同状态的文字也可能显示不同。 但由于重写了 void PaintText(HDC hDC) 方法,CButtonUI 绘制文字的功能并没有 CLabelUI 多关于 CButtonUI 设置不同的图片、文字颜色等相关的代码就不一一介绍了,现在所一下比较重要的成员方法和成员变量。原创 2017-12-21 14:07:38 · 1939 阅读 · 0 评论 -
Duilib 源码分析之 CScrollBarUI 篇
Scrollbar 的创建时机是在解析 UIContainer 类型的控件时,发现有 hscrollbar 或 vscrollbar 时,调用 void CContainerUI::EnableScrollBar(bool bEnableVertical = true, bool bEnableHorizontal = false) 实现,请关注下方法中的以下代码:void CScrollB原创 2017-12-19 14:13:51 · 1712 阅读 · 2 评论 -
Duilib 源码分析之 CControlUI 篇
今天来介绍一下 Duilib 中所有类型控件的基类: CControlUI,后续后陆续介绍各个不同的控件的实现。对于基类 CControlUI 主要介绍下共通的方法和属性 (由于本人水平有限,以下内容只是个人见解,仅供参考,如有错误请指正,不胜感激,本贴基于 Duilib 的版本是 “Duilib 开源项目圈2群” 中下载的版本,在代码上可能会有些出入)CDuiString GetName()原创 2017-12-14 15:33:58 · 4854 阅读 · 0 评论 -
Duilib 源码分析之 Shortcut 篇
Duilib 中的快捷键实现方式也很简单,为控件添加属性 shortcut 即可,值设置为某个字母,当按下 Alt+字母时,窗口会接收到 WM_SYSCHAR 消息,然后找到对应的控件进行响应。 代码如下:case WM_SYSCHAR: {if( m_pRoot == NULL ) return false; // Handle ALT-shortcut key-combinatio原创 2017-12-15 17:43:04 · 744 阅读 · 0 评论 -
Duilib 源码分析之 ToolTip 篇
首先关于 ToolTip 的相关资料,建议先看一下百度百科的介绍:TOOLINFODuilib 中对 Tooltip 的用法还算是比较简单易懂的,而且实现方法也很简单,只需要为控件添加属性 tooltip , 值是希望提示的字符串就可以了,当鼠标移动到控件上停留时,会发送 WM_MOUSEHOVER 消息,Duilib 此时就会开始显示 tooltip 窗口了。 接下来看一下实现 tooltip 的原创 2017-12-15 16:41:05 · 1723 阅读 · 0 评论 -
Duilib 源码分析之 Timer 篇
Duilib 中的 Timer 是封装了 Windows 的 Timer, 将事件绑定到了具体的控件上。 相关逻辑实现代码如下:内部 Timer 的数据结构typedef struct tagTIMERINFO{CControlUI* pSender;UINT nLocalID;HWND hWnd;UINT uWinTimer;bool bKilled;} TIMERINFO;pS原创 2017-12-14 18:01:38 · 1800 阅读 · 0 评论 -
Duilib 源码分析之 CResourceManager 篇
今天介绍下类 CResourceManager , 本帖基于的 Duilib 版本为 “Duilib 开源项目圈2群” 中下载的版本,有些版本可以没有这部分代码。 这个类主要分为两大作用:加载控件的文字 加载文字具体的实现方式也有两种: 在 xml 中定义界面文字,像如下代码: “` 之后通过调用 `BOOL LoadLanguage(LPCTSTR pstrXml)` 将 x原创 2017-12-14 15:14:31 · 1018 阅读 · 0 评论 -
Duilib 源码分析之控件 name 篇
今天来介绍一下 Duilib 中控件的 name 的保存及查询方法吧,使用 Duilib 的过程中,大家最常使用的一个功能可能就是 FindControl(LPCTSTR pstrName) 了吧,我们来看一下到底是怎么进行 Find 的。先上源码:CControlUI* CPaintManagerUI::FindControl(LPCTSTR pstrName) const{ ASSE原创 2017-05-27 20:46:20 · 582 阅读 · 0 评论 -
Duilib 源码分析之消息流程篇
Duilib 中的消息处理过程:我们首先从窗口的创建开始,RegisterWindowClass 时注册了消息处理函数 CWindowWnd::__WndProc,在 CreateWindowEx 创建窗口之后,static void CPaintManagerUI::MessageLoop() 首先进行消息的过滤,未处理的消息再发送给窗口。除了 WM_NCCREATE 和 WM_NCDES...原创 2017-12-12 14:02:13 · 567 阅读 · 0 评论 -
Duilib 源码分析之工具类 CDuiRect 篇
今天介绍一个比较简单的类,但是用起来还是挺方便的: CDuiRect 老规矩,二话不说,直接贴代码 :typedef struct tagRECT{ LONG left; LONG top; LONG right; LONG bottom;} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;class DU原创 2017-05-31 16:21:29 · 576 阅读 · 0 评论 -
Duilib 源码分析之 CLabelUI 篇
本帖基于的 Duilib 版本为 “Duilib 开源项目圈2群” 中下载的版本,和大家使用的可能有些出入。我曾使用过的一个版本的 Duilib 中的 CLabelUI 实现的内容较少,本帖中的 CLabelUI 功能都相当于我曾经使用的 CTextUI 了,但这个区别没有关系,大家只需要了解各个功能是如何实现的就可以了,具体使用的时候参考自己使用的 Duilib 版本,稍看下源码,就知道自己使用的原创 2017-12-20 15:40:28 · 2922 阅读 · 0 评论 -
Duilib 源码分析之 CTextUI 篇
Duilib 中的 CTextUI 和 CLabelUI 差别并不大,主要的区别有两点:CTextUI 默认多行显示,而 CLabelUI 默认单行居中显示当绘制 html 内容的时候,若其中有超链接,则需要使用 CTextUI,其中分装了对超链接的处理我们来着重看一下 CTextUI 中对 html 中的超链接的处理。先看一个例子。设置控件的text="<a http://www.baidu原创 2017-12-20 18:06:43 · 790 阅读 · 0 评论 -
Duilib 源码分析之 文字样式(m_uTextStyle) 篇
本帖基于的 Duilib 版本为 “Duilib 开源项目圈2群” 中下载的版本。Duilib 中的 CLabelUI 等控件含有成员变量 m_uTextStyle,代表绘制文字时的绘制样式。现在来详细说明一下具体的样式类型。 未标明可通过 key=”value” 控制的代表这个版本中的 Duilib 不支持对应的样式控制。大家若使用到了具体的属性可以自己添加属性来实现。文字对其相关样式DT_TO原创 2017-12-19 17:28:44 · 2087 阅读 · 0 评论 -
Duilib 源码分析之字体篇
在 Duilib 中,我们可以定义多种字体,不同的控件使用不同的字体来丰富我们的界面,今天我们来介绍一下 Duilib 是如何使用字体的。首先,Duilib 中定义字体的方法如下:<Font id="0" name="Microsoft YaHei" size="12" bold="false" italic="false" default="true"/><Font id="1" name="M原创 2017-05-15 18:40:52 · 1613 阅读 · 3 评论 -
Duilib 源码分析之 xml 加载篇
大家都知道, Duilib 的界面内容除了在代码中动态加入外,最常用的就是通过写好 xml 来加载了。今天就介绍一下 Duilib 是如何读取到 xml 并将 xml 内容加载到内存中的。我们来按加载的流程来分析一下,流程如下:Created with Raphaël 2.1.0开始创建 WindowsOnCreate加载 xml结束其实这个流程图并没有太大意义,在这里只不过是想说原创 2017-04-27 11:24:33 · 2262 阅读 · 1 评论 -
Duilib 源码分析之 CRichEditUI 篇
CRichEdit 的代码较多,主要是因为富文本控件可实现的操作和控制较多,在 Duilib 中的代码实现了很多功能,在只有部分功能被实际调用了,所以要想真正学会用富文本控件,最好是自己动手做一个例子,将大部分的方法自己手动调用一遍,看看效果。碰到一个新控件,我的习惯还是先看下控件的父类、SetAtrribute 方法,扫一眼成员函数名称和成员变量名称。这样会对这个控件的功能有一个大体的认识。先看原创 2018-02-27 14:50:31 · 4452 阅读 · 1 评论