duilib

duilib教程之duilib入门简明教程1.前言

大兔子大兔子 提交于 2019-11-28 20:39:36
关于duilib的介绍就不多讲了,一来不熟,二来小伙伴们想必已经对比了多个界面库,也无需赘述。下面进入正题: 不看广告看疗效! 已有众多知名公司采用duilib做为界面库,如华为网盘、PPS(PPS和华为之前都是用UIPower)、金山快盘(也没用自家的界面库)、酷我音乐、爱奇艺视频、百度杀毒、百度卫士、百度管家等一系列产品。而duilib自己提供的Demo有QQ、QQ旋风、360等等。下面是一部分截图: 疗效就不用再多说了吧~O(∩_∩)O~ 这么好的东东,都开源三年多了,肿么一直没有个像样的文档和入门 教程 咧? 那些知名公司的界面小伙伴们能马上用么??? 此处省略N字... 这就是Alberl写入门教程的原因。 Alberl虽然关注DirectUI快三年了,但是一直处于观望状态,几年前duilib牵头,使很多想寻求商业合作的界面库也纷纷开源或免费,当时Alberl还想等着他们出2.0时再用呢,结果眼一睁一闭,别说2.0了,能勉强活下来的就剩duilib了。duilib的历史简介就这样了。 首先要声明的是,虽然Alberl写入门教程,但不代表Alberl很熟悉duilib,相反Alberl是个大大的菜鸟,毕业才一年多点的小盆友,2013.09.09 才正式学习duilib,由于只是业余时间学习,所以教程可能会有很多误导或者错误的地方,还请各位大神不吝赐教~O(∩_∩)O~ 来源

duilib教程之duilib入门简明教程2.VS环境配置

荒凉一梦 提交于 2019-11-28 20:39:35
既然是入门 教程 ,那当然得基础点,因为搜索duilib相关资料时,发现有些小伙伴到处都是编译错误,以及路径配置错误等等,还有人不知道SVN,然后一个个文件手动下载的。 其实吧,duilib的定位好像是这样的: 有一定的界面基础,懂MFC、WTL、windows消息机制等等。 不然的话,即使环境配置好了,看Demo也绕晕你~(^o^)/~ 所以对于没有任何基础的童鞋,请先打好基础,不然学习duilib会走更多歪路,推荐以下资料: 书籍:《 windows程序设计 》 教程: 孙鑫视频(这个我只下载了,但没看过,不过评价不错) 网站: 国际知名网站 (国外网站:现在比codeguru好很多了,虽然是英文,但是有图文描述,加上翻译软件,源码面前了无秘密) 编程入门网 (国内网站:我大学做QQ申请器时根本就不懂MFC,结果硬是一个个控件的查资料,就靠它了) VC知识库 (国内网站:现在有些要收费了) 其他的网站就不一一列举了,因为后来找资料都直接上codeproject,所以很多网站早就记不清楚了。 最重要的一点 :善用搜索引擎,只要会搜索,上面的资料都是很容易搜出来的,这是第一要素。 一、下面首先介绍一下SVN的使用,怎么下载和安装我就不讲了~O(∩_∩)O~,直接进入使用阶段: 1、在资源管理器任意空白处点击右键菜单,选择【SVN Checkout】(中文版选择【SVN 检出】) 2

duilib教程之duilib入门简明教程3.第一个程序 Hello World

耗尽温柔 提交于 2019-11-28 20:39:31
小伙伴们有点迫不及待了么,来看一看Hello World吧:新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #include <tchar.h> int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { ::MessageBox(NULL, _T("Hello World !"), NULL, NULL); return 0; } 复制代码 运行即可看到如下结果: 咦,这不是win32程序么,你小子忽悠我? ~O(∩_∩)O~ 这正是Alberl想要说的:duilib仅仅是一个基于win32的UI库而已,并不是用了duilib以后,它就不是win32程序了。 很多小伙伴在群里问怎么加托盘,加程序图标等等,可能觉得duilib应该会像MFC一样提供很多封装好的类;或者觉得duilib有实现托盘的功能;或者觉得duilib完全替代了win32和MFC。所以这里Alberl提醒下: duilib并没有像MFC那样把所有的东西全包了,它仅仅包装了UI部分而已,其他的还是需要用win32、MFC的知识,所以除了UI部分,其他的都和duilib木有关系

duilib教程之duilib入门简明教程4.响应按钮事件

廉价感情. 提交于 2019-11-28 20:39:21
上一个Hello World的 教程 里有一句代码是这样的:CControlUI *pWnd = new CButtonUI; 也就是说,其实那整块绿色背景区域都是按钮的区域。(这里简要介绍下,CControlUI 是duilib中所有控件的基类,而CButtonUI则是按钮类,更多的控件会在后面的教程一一介绍。) 那么怎样响应按钮的点击消息呢? 我们需要几个步骤: 1、调用AddNotifier函数将消息加入duilib的消息循环 2、给按钮设置一个唯一的控件ID(SetName函数) 3、在Notify函数里处理按钮点击消息。 代码如下: class CDuiFrameWnd : public CWindowWnd, public INotifyUI { public: virtual LPCTSTR GetWindowClassName() const { return _T("DUIMainFrame"); } virtual void Notify(TNotifyUI& msg) { if(msg.sType == _T("click")) { if(msg.pSender->GetName() == _T("btnHello")) { ::MessageBox(NULL, _T("我是按钮"), _T("点击了按钮"), NULL); } } } virtual

duilib教程之duilib入门简明教程5.自绘标题栏

一曲冷凌霜 提交于 2019-11-28 20:39:20
如果大家有做过标题栏的自绘,肯定会感慨各种不容易,并且现有的一些资料虽然完美的实现了功能,但是代码比较乱,需要自行整理。如果用duilib,就是小case啦。 duilib其实并没有区分标题栏和客户区,它的实现方法是屏蔽了系统自带的标题栏,用客户区来模拟标题栏,所以想怎么画就怎么画,非常方便。 1、我们首先屏蔽一下系统自带的标题栏, 在HandleMessage函数里屏蔽以下三个消息即可 WM_NCACTIVATE、WM_NCCALCSIZE、WM_NCPAINT 代码如下: virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) { LRESULT lRes = 0; if( uMsg == WM_CREATE ) { CControlUI *pWnd = new CButtonUI; pWnd->SetName(_T("btnHello")); // 设置控件的名称,这个名称用于标识每一个控件,必须唯一,相当于MFC里面的控件ID pWnd->SetText(_T("Hello World")); // 设置文字 pWnd->SetBkColor(0xFF00FF00); // 设置背景色 m_PaintManager.Init(m_hWnd); m_PaintManager

duilib教程之duilib入门简明教程6.XML配置界面

喜夏-厌秋 提交于 2019-11-28 20:39:05
前面那些 教程 都是为了让小伙伴们从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

淺唱寂寞╮ 提交于 2019-11-28 20:36:37
配置duilib库 一个简单的使用Duilib程序一般要在stdafx.h中进行配置(链接duilib的文件,包括头文件)。通常的配置代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #pragma once #define WIN32_LEAN_AND_MEAN #define _CRT_SECURE_NO_DEPRECATE #include <windows.h> #include <objbase.h> #include "..\DuiLib\UIlib.h" using namespace DuiLib; #ifdef _DEBUG #ifdef _UNICODE #pragma comment(lib, "..\\bin\\DuiLib_ud.lib") #else #pragma comment(lib, "..\\bin\\DuiLib_d.lib") #endif #else #ifdef _UNICODE #pragma comment(lib, "..\\bin\\DuiLib_u.lib") #else #pragma comment(lib, "..\\bin\\DuiLib.lib") #endif #endif 工程之间不同的相对目录,代码中的lib,头文件的目录一样

MFC中混合使用Duilib制作界面

那年仲夏 提交于 2019-11-28 20:36:29
因为公司项目最近入了MFC的这个大坑,用MFC做UI做了一段时间,感觉不是很方便,开发效率有点慢。 看了c++里面做界面的类库,感觉Duilib比较符合做界面的需求,而且很多大公司也在使用Duilib,那就随一下大流,并在此表达对Duilib作者及广大的开源作者的敬意。 Duilib支持win32程序及MFC程序。 步骤如下: 设置Duilib环境 可以去 https://github.com/duilib/duilib 下载框架,将Duilib框架在UnicodeDebug及Debug下编译生成库文件 下面都是VS2008的环境操作。在VC++ 选项->项目与解决方案-> VC++目录 引入Duilib的 包含文件 库文件 源文件 设置系统的环境变量 不设置环境变量的话,也可以直接把DuiLib_ud.dll及DuiLib_d.dll复制到应用程序的生成目录。否则会报缺少相关dll的错误。 添加引用及dll 在stdafx.h文件中加入duilib的头文件及库 1 #include <ObjBase.h> 2 #include <UIlib.h> 3usingnamespace DuiLib; 4#ifdef _DEBUG 5# ifdef _UNICODE 6 # pragma comment(lib, "DuiLib_ud.lib") 7 # else 8 # pragma

使用DUILIB建立项目

荒凉一梦 提交于 2019-11-28 20:36:05
使用DUILIB加载XML界面 这篇主要目的就是教给大家怎样在自己的工程中加载XML界面,这是最基本的应用,对于界面控件响应啥的,我就不讲了,在大家懂了这个之后,我会给大家一个其它人写的博客,再看他的文章,大家应该就更清楚明白 一,建立工程 建立win32应用程序,取名叫blog_try 这里有几点要注意: 1、选择.net framework 2.0 如果你在开发时没有选择这个,而你用了默认的3.5的话,当你发布APP的时候,你就只有哭了,因为,3.5以上的只能在WIN 7上的操作系统运行,这一点一定要注意。我有血的教训!!! 2、其它其实也没什么注意的了,选择win32下的win32项目 这里选择:windows应用程序 二、搭环境 1、删除部分生成的代码 到blog_try里,把自动生成的代码删成这个样子,即除了包含头文件和winmain函数以外,其它都不要 2、复制duilib相关文件到工程目录 2.1、把duilib源工程中的头文件全部复制到我们的blog_try工程目录下: 2.2、将lib文件同样放在blog_try工程目录下 2.3、将dll文件放在debug目录下 三、函数重写与加载界面文件 1、在stdafx.h中加入以下代码,以添加包含duilib的头文件和库文件 [cpp] view plain copy // TODO: 在此处引用程序需要的其他头文件

第一个duilib程序 - 实现HelloWorld详解

China☆狼群 提交于 2019-11-28 20:35:58
duilib是一个windows下的皮肤库,用win32写的。。。 先看个效果图吧: 要使用duilib库,必须先把库导入,代码如下: View Row Code 1 #include "xxx\UIlib.h" //xxx为UIlib.h的路径 2 usingnamespaceDuilib; //Duilib为库自定义的名字空间 3 4 #ifdef _DEBUG 5 #ifdef _UNICODE 6 #pragma comment(lib, "xxx\Duilib_ud.lib") 7 #else 8 #pragma comment(lib, "xxx\Duilib_d.lib") 9 #endif 10 #else 11 #ifdef _UNICODE 12 #progma comment(lib, "xxx\Duilib_u.lib") 13 #else 14 #progma comment(lib, "xxx\Duilib.lib") 15 #endif 使用duilib库的程序和win32程序一样也是从WinMain开始的。在WinMain函数中,一般是这样做的: View Row Code 1 CPaintManagerUI::SetInstance(hInstance);//将程序实例与皮肤绘制管理器挂钩 2 CPaintMamagerUI: