自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 资源 (1)
  • 收藏
  • 关注

原创 包含指向父结点指针的特殊二叉树的遍历,要求空间复杂度 O(1)

对于二叉树的遍历,最简单的有递归遍历,另外有比较常见的用栈来实现非递归遍历。今天讲的题目是一个特殊的二叉树,且不允许改变二叉树,实现 O(1) 空间复杂度的前序遍历,二叉树如下:这个二叉树比较特殊,多了一些蓝色的指针,指向父结点。所以我们可以不用栈来实现回溯了,可以做到空间复杂度为 O(1)。这是我碰到的一个面试题,当时面试官给我的提示是:从哪里来到哪里去。 我琢磨了一下,想到了其实要知道一个结点...

2018-04-10 11:46:57 910

原创 雨水灌墙算法实现

之前面试碰到的一道算法题,题目大概是: 假设最左边有一个无限高的墙,右侧有一排不同高度的紧挨着的墙,求下雨后雨水注满在墙内的量。 例如在下图中,例如给定数组为 {1, 2, 9, 4, 5, 5, 3, 6, 4, 3, 2, 4}, 则应该输出 25由于本人平时算法底子较薄,刚看到题目时没有在很短的时间内想到思路,结果越紧张越没思路,越没思路越紧张,导致最后虽然写出,但只在某种情况下是正确的。回...

2018-04-05 11:41:56 312

原创 C++11 变长模板之函数调用

C++11 新特新中的变长模板给我们写代码带来了很大的灵活性,方便了不少。现在我们终于可以写出调用不同参数的函数的代码了。变长模板的使用关键在于包的展开,在 C++11 的书中有介绍包展开的位置位置有以下几种:表达式初始化列表基类描述列表类成员初始化列表模板参数列表通用属性列表lamda 表达式列表由于本人对以上几种也不是完全理解,只用过几种情况。下面先看两个小例子例子1:  计算不定个数的自然数...

2018-03-19 11:44:09 738

原创 Duilib 源码分析之 CRichEditUI 篇

CRichEdit 的代码较多,主要是因为富文本控件可实现的操作和控制较多,在 Duilib 中的代码实现了很多功能,在只有部分功能被实际调用了,所以要想真正学会用富文本控件,最好是自己动手做一个例子,将大部分的方法自己手动调用一遍,看看效果。碰到一个新控件,我的习惯还是先看下控件的父类、SetAtrribute 方法,扫一眼成员函数名称和成员变量名称。这样会对这个控件的功能有一个大体的认识。先看

2018-02-27 14:50:31 4392 1

原创 Duilib 源码分析之 COptionUI 篇

COptionUI 继承自 CButtonUI, 按钮的各个状态会显示不同的文字颜色啊、背景图片啊什么的这个就不再介绍了,每个版本的 Duilib 对 COptionUI 的状态支持可能不同,大家参考一下自己的代码就可以了。这部分内容也可以看一下 Duilib 源码分析之 CButtonUI 篇。 这篇帖子中着重介绍一下 COptionUI 自己的特色的功能bool m_bS

2017-12-28 14:50:38 3149

原创 Duilib 源码分析之 CButtonUI 篇

Duilib 中的 CButtonUI 继承自 CLabelUI, 在可以显示文字的基础上可以显示不同状态下的图片,不同状态的文字也可能显示不同。 但由于重写了 void PaintText(HDC hDC) 方法,CButtonUI 绘制文字的功能并没有 CLabelUI 多关于 CButtonUI 设置不同的图片、文字颜色等相关的代码就不一一介绍了,现在所一下比较重要的成员方法和成员变量。

2017-12-21 14:07:38 1911

原创 Duilib 源码分析之 CTextUI 篇

Duilib 中的 CTextUI 和 CLabelUI 差别并不大,主要的区别有两点:CTextUI 默认多行显示,而 CLabelUI 默认单行居中显示当绘制 html 内容的时候,若其中有超链接,则需要使用 CTextUI,其中分装了对超链接的处理我们来着重看一下 CTextUI 中对 html 中的超链接的处理。先看一个例子。设置控件的text="<a http://www.baidu

2017-12-20 18:06:43 779

原创 Duilib 源码分析之 CLabelUI 篇

本帖基于的 Duilib 版本为 “Duilib 开源项目圈2群” 中下载的版本,和大家使用的可能有些出入。我曾使用过的一个版本的 Duilib 中的 CLabelUI 实现的内容较少,本帖中的 CLabelUI 功能都相当于我曾经使用的 CTextUI 了,但这个区别没有关系,大家只需要了解各个功能是如何实现的就可以了,具体使用的时候参考自己使用的 Duilib 版本,稍看下源码,就知道自己使用的

2017-12-20 15:40:28 2884

原创 Duilib 源码分析之 文字样式(m_uTextStyle) 篇

本帖基于的 Duilib 版本为 “Duilib 开源项目圈2群” 中下载的版本。Duilib 中的 CLabelUI 等控件含有成员变量 m_uTextStyle,代表绘制文字时的绘制样式。现在来详细说明一下具体的样式类型。 未标明可通过 key=”value” 控制的代表这个版本中的 Duilib 不支持对应的样式控制。大家若使用到了具体的属性可以自己添加属性来实现。文字对其相关样式DT_TO

2017-12-19 17:28:44 2079

原创 Duilib 源码分析之 CScrollBarUI 篇

Scrollbar 的创建时机是在解析 UIContainer 类型的控件时,发现有 hscrollbar 或 vscrollbar 时,调用 void CContainerUI::EnableScrollBar(bool bEnableVertical = true, bool bEnableHorizontal = false) 实现,请关注下方法中的以下代码:void CScrollB

2017-12-19 14:13:51 1685 2

原创 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 726

原创 Duilib 源码分析之 ToolTip 篇

首先关于 ToolTip 的相关资料,建议先看一下百度百科的介绍:TOOLINFODuilib 中对 Tooltip 的用法还算是比较简单易懂的,而且实现方法也很简单,只需要为控件添加属性 tooltip , 值是希望提示的字符串就可以了,当鼠标移动到控件上停留时,会发送 WM_MOUSEHOVER 消息,Duilib 此时就会开始显示 tooltip 窗口了。 接下来看一下实现 tooltip 的

2017-12-15 16:41:05 1672

原创 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 747

原创 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 1747

原创 Duilib 源码分析之 CControlUI 篇

今天来介绍一下 Duilib 中所有类型控件的基类: CControlUI,后续后陆续介绍各个不同的控件的实现。对于基类 CControlUI 主要介绍下共通的方法和属性 (由于本人水平有限,以下内容只是个人见解,仅供参考,如有错误请指正,不胜感激,本贴基于 Duilib 的版本是 “Duilib 开源项目圈2群” 中下载的版本,在代码上可能会有些出入)CDuiString GetName()

2017-12-14 15:33:58 4820

原创 Duilib 源码分析之 CResourceManager 篇

今天介绍下类 CResourceManager , 本帖基于的 Duilib 版本为 “Duilib 开源项目圈2群” 中下载的版本,有些版本可以没有这部分代码。 这个类主要分为两大作用:加载控件的文字 加载文字具体的实现方式也有两种: 在 xml 中定义界面文字,像如下代码: “` 之后通过调用 `BOOL LoadLanguage(LPCTSTR pstrXml)` 将 x

2017-12-14 15:14:31 995

原创 Duilib 源码分析之消息流程篇

Duilib 中的消息处理过程:我们首先从窗口的创建开始,RegisterWindowClass 时注册了消息处理函数 CWindowWnd::__WndProc,在 CreateWindowEx 创建窗口之后,static void CPaintManagerUI::MessageLoop() 首先进行消息的过滤,未处理的消息再发送给窗口。除了 WM_NCCREATE 和 WM_NCDES...

2017-12-12 14:02:13 559

原创 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 569

原创 Duilib 源码分析之控件 name 篇

今天来介绍一下 Duilib 中控件的 name 的保存及查询方法吧,使用 Duilib 的过程中,大家最常使用的一个功能可能就是 FindControl(LPCTSTR pstrName) 了吧,我们来看一下到底是怎么进行 Find 的。先上源码:CControlUI* CPaintManagerUI::FindControl(LPCTSTR pstrName) const{ ASSE

2017-05-27 20:46:20 575

原创 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 1544 3

原创 Duilib 源码分析之 xml 解析篇

上一篇文章介绍了 Duilib 是如何读取 xml 的 (Duilib 源码分析之 xml 加载篇),接下来介绍 Duilib 是如何解析加载到内存的 xml 的。首先列出解析 xml 的几个关键类: - UIDlgBuilder - UIMarkup - CMarkupNode在 xml 加载篇的帖子中,已经介绍过,在窗口创建的消息相应函数 OnCreate 中,调用了 UIDl

2017-04-28 10:34:25 1327

原创 Duilib 源码分析之 xml 加载篇

大家都知道, Duilib 的界面内容除了在代码中动态加入外,最常用的就是通过写好 xml 来加载了。今天就介绍一下 Duilib 是如何读取到 xml 并将 xml 内容加载到内存中的。我们来按加载的流程来分析一下,流程如下:Created with Raphaël 2.1.0开始创建 WindowsOnCreate加载 xml结束其实这个流程图并没有太大意义,在这里只不过是想说

2017-04-27 11:24:33 2157 1

C++11 变长模板类

这个变长模板类,可以绑定任意类的任意方法,这个变长模板类,可以绑定任意类的任意方法。在实际调用时,只要创建这样一个父类(实际实现在子类中),就可以在别的场合使用这个父类调用绑定的类的指定方法 开发环境是 VS2015(update3)

2018-03-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除