随笔分类 -  2013 duilib入门简明教程

1

2013 duilib入门简明教程 -- 总结 (20)
摘要:duilib的入门系列就到尾声了,再次提醒下,Alberl用的duilib版本是SVN上第387个版本,时间是2013.08.15~这里给出Alberl最后汇总的一个工程,戳我下载,效果如图:2013 duilib入门教程汇总:2013 duilib入门简明教程 -- 前言(1)2013 duilib入门简明教程 -- VS环境配置(2)2013 duilib入门简明教程 -- 第一个程序 Hello World(3)2013 duilib入门简明教程 -- 响应按钮事件(4)2013 duilib入门简明教程 -- 自绘标题栏(5)2013 duilib入门简明教程 -- XML配置界面(6 阅读全文

posted @ 2013-10-06 18:55 Alberl 阅读(64289) 评论(35) 推荐(19) 编辑

2013 duilib入门简明教程 -- FAQ (19)
摘要:虽然前面的教程几乎把所有的知识点都罗列了,但是有很多问题经常在群里出现,所以这里再次整理一下。需要注意的是,在下面的问题中,除了加上XML属性外,主窗口必须继承自WindowImplBase,才能够有效果,因为这个类帮我们处理了非常多的常用操作,如果想自己处理,请参见WindowImplBase的代码。1、怎么设置标题栏区域?只需在XML的Window节点加上caption="0,0,0,32"即可,其中32是指从窗口顶部开始,往下32个像素的区域,都设置成标题栏,这样就可以点击标题栏拖动窗口,或者双击最大化了。 不过可以发现有些Demo的标题栏文字区域不能拖动,比如360 阅读全文

posted @ 2013-10-06 17:16 Alberl 阅读(16079) 评论(5) 推荐(0) 编辑

2013 duilib入门简明教程 -- 其他 (18)
摘要:一、超链接按钮代码很简单,参见360Demo: 这里只需要加上showhtml="true",然后在text属性里写类html代码就可以了,不过duilib只支持小部分html代码,具体的格式请参见Demo以及源码~二、支持html由于html非常方便,所以duilib也提供了部分支持,上面的超链接按钮就是使用html来表示,在360Demo里面有大量的html支持,详情请参阅Demo,效果如图:三、改变字体前面介绍了Default属性,属于全局属性,而字体也是全局属性,也是定义到一级子节点。 序号从0开始,上述顺序中,第0个字体就是name为【20号字体】的字体,所以如果 阅读全文

posted @ 2013-10-06 16:45 Alberl 阅读(18131) 评论(9) 推荐(0) 编辑

2013 duilib入门简明教程 -- 事件处理和消息响应 (17)
摘要:界面的显示方面就都讲完啦,下面来介绍下控件的响应。前面的教程只讲了按钮和Tab的响应,即在Notify函数里处理。其实duilib还提供了另外一种响应的方法,即消息映射DUI_BEGIN_MESSAGE_MAP,可以将DUI_MSGTYPE_CLICK消息映射到指定的函数(比如OnClick),这和在Notify判断msg.sType是一样的效果,具体请参见duilib的RichListDemo。 先看看下面几段代码:DUI_BEGIN_MESSAGE_MAP(CPage1, CNotifyPump) DUI_ON_MSGTYPE(DUI_MSGTYPE_CLICK,OnClick) ... 阅读全文

posted @ 2013-10-05 21:46 Alberl 阅读(28840) 评论(1) 推荐(1) 编辑

2013 duilib入门简明教程 -- 结合win32和MFC (16)
摘要:虽然duilib自带在MFC中使用duilib的Demo,但只是MFC窗口和duilib窗口不重叠的情况。如果要在MFC窗口中嵌入duilib控件,或者在duilib控件中嵌入MFC的控件的话,就没有Demo可以看了,其实Alberl开始也不知道怎么办,看了下ActiveXUI控件,这个就是结合HWND的,但是由于接触duilib不久,所以一时无法看懂ActiveXUI到底是怎么将win32的HWND画上去的,只好在群里问啦,多谢铅笔群的Troy大神指导:当时解决完之后上传了代码,不过还是有网友看不懂,于是昨晚要求Alberl先写duilib结合MFC的教程,当然啦,这个教程本来就在Alber 阅读全文

posted @ 2013-10-05 18:39 Alberl 阅读(35422) 评论(17) 推荐(1) 编辑

2013 duilib入门简明教程 -- 自绘控件 (15)
摘要:在【2013 duilib入门简明教程 -- 复杂控件介绍 (13)】中虽然介绍了界面设计器上的所有控件,但是还有一些控件并没有被放到界面设计器上,还有一些常用控件duilib并没有提供(比如菜单控件)。虽然duilib没有提供这些控件,但是自己绘制起来也是非常方便的,不过duilib的自绘可比MFC方便得不止一点点了,其实duilib的自绘大都不用自己绘制,就是一些控件和图片的组合而已,相当简单方便~~~一、菜单控件其实菜单控件的外观和ListBox非常像,所以我们可以用教程13的ListBox控件模拟,也可以自行用其他的组合,由于duilib自带的Demo里有两个Menu,而且样式还很不错 阅读全文

posted @ 2013-10-05 15:31 Alberl 阅读(37193) 评论(10) 推荐(2) 编辑

2013 duilib入门简明教程 -- 部分bug 2 (14)
摘要:上一个教程中提到了ActiveX的Bug,即如果主窗口直接用变量生成,则关闭窗口时会产生崩溃如果用new的方式生成,则不会崩溃,所以给出一个临时的快速解决方案,即主窗口都用new生成,_tWinMain改为下面这样:int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){ CPaintManagerUI::SetInstance(hInstance); HRESULT Hr = ::CoInitialize(NULL); if( F... 阅读全文

posted @ 2013-10-05 09:29 Alberl 阅读(19275) 评论(5) 推荐(1) 编辑

2013 duilib入门简明教程 -- 复杂控件介绍 (13)
摘要:首先将本节要介绍的控件全部拖到界面上,并调整好位置,如图: 然后将Name属性改成其他名字,不能是【控件名+UI+数字】这种,因为这是DuiDesigner默认的名字,它不会实际写入到XML,所以如果控件的名字被取成ActiveXUI1、ActiveXUI2、ButtonUI1这种格式的话,Name属性会被忽略,可以看到XML是没有Name属性的:所以我们必须给它们指定其他的名字,这里格式统一为【控件名+Demo+数字】,如图: XML如下(删除了暂时没用到的属性,删除了标题栏区域,要关闭窗口请按Esc或者在任务栏右键关闭): ... 阅读全文

posted @ 2013-09-29 01:41 Alberl 阅读(51299) 评论(22) 推荐(3) 编辑

2013 duilib入门简明教程 -- 简单控件介绍 (12)
摘要:前面的教程应该让大家对duilib的整体有所映像了,下面就来介绍下duilib具体控件的使用。由于官方没有提供默认的控件样式,所以我就尽量使用win7或者XP自带的按钮样式了,虽然界面比较土鳖,但是想要换成百度杀毒那样的界面,只需要更换图片即可,如果有哪位小伙伴能够提供一些控件样式,那就再好不过啦~首先利用一下前面教程的框架,效果图如下:main.cpp的代码如下:class CDuiFrameWnd : public WindowImplBase{public: virtual LPCTSTR GetWindowClassName() const { return _T(... 阅读全文

posted @ 2013-09-28 23:42 Alberl 阅读(30955) 评论(7) 推荐(2) 编辑

2013 duilib入门简明教程 -- 部分bug (11)
摘要:一、WindowImplBase的bug在第8个教程【2013 duilib入门简明教程 -- 完整的自绘标题栏(8)】中,可以发现窗口最大化之后有两个问题,1、最大化按钮的样式还是没变,正确的样式应该是这样的2、再次点击最大化按钮,不能还原到正常大小。这个是WindowImplBase的bug,已经提交给官方有一段时间了,但是貌似没有被合并到SVN上去,所以这里说明一下,我们需要在WindowImplBase的OnSysCommand函数里,在if( ::IsZoomed(*this) != bZoomed )里面加上下面这段代码: if( ::IsZoomed(*this) != b... 阅读全文

posted @ 2013-09-28 22:56 Alberl 阅读(24518) 评论(21) 推荐(3) 编辑

2013 duilib入门简明教程 -- 界面设计器 DuiDesigner (10)
摘要:上一个教程讲解了怎么布局最大化、最小化、关闭按钮,但是如果手动去计算这三个按钮的位置和大小的话,非常的不直观,也很不方便。所以这一章准备介绍duilib的UI设计器,由于这个设计器很不完善,也有很多bug,有时候会导致XML数据丢失,所以很多大神都不建议用,不过我每次写代码都会用SVN,而且会原子提交,所以即使丢失也可以恢复。不过这不代表我赞同一直使用这个UI设计器,我建议大家布局的时候用设计器,布局完毕之后手写XML。这样按钮的大小和位置都很直观,很方便的可以确定,就用不着手动去计算了,当然,如果是美工给的界面,就没必要用设计器了,因为他们会把位置和大小都给过来。1、打开设计器:在duili 阅读全文

posted @ 2013-09-28 00:46 Alberl 阅读(43230) 评论(19) 推荐(2) 编辑

2013 duilib入门简明教程 -- 界面布局(9)
摘要:上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout、VerticalLayout,这样duilib就会帮我们自动布局按钮的位置和大小,顾名思义,HorizontalLayout就是水平布局,VerticalLayout就是垂直布局。最开始的教程里面,窗口大小变化时,Hello World按钮会沾满整个窗口,并且文字始终居中,这就是HorizontalLayout的效果: 那么HorizontalLayout和VerticalLa... 阅读全文

posted @ 2013-09-28 00:06 Alberl 阅读(38142) 评论(8) 推荐(1) 编辑

2013 duilib入门简明教程 -- 完整的自绘标题栏(8)
摘要:看了前面那么多教程,相信对duilib已有基本映像了,我们就快马加鞭,做出一个完整的自绘标题栏吧~看到下面这个效果图,小伙伴们是不是有点惊呆了呢~O(∩_∩)O~duilib实现以上效果非常简单, 1、将按钮图片的文件夹放到exe目录,点此下载 2、main.cpp的代码无需改动,只需改动XML,XML内容如下(受网页宽度限制,以下XML格式有点乱,请复制到本地的XML编辑器上,以方便查看): ... 阅读全文

posted @ 2013-09-27 23:19 Alberl 阅读(41039) 评论(29) 推荐(3) 编辑

2013 duilib入门简明教程 -- XML基础类(7)
摘要:现在大家应该对XML描述界面不那么陌生了,那么我们做进一步介绍。 前面的教程我们写了很多代码,为的是让大家了解下基本流程,其实duilib已经对常用的操作做了很好的包装,正式使用时无需像前面的教程那样写那么多代码,下面我们就来看看XML的包装类WindowImplBase: WindowImplBase类是一个duilib的基础框架类,封装了常用操作,以方便大家使用。 它是以XML作为界面描述的,所以用它的时候,我们必须将界面描述写到XML里。 下面将是我们第三次实现Hello World程序~O(∩_∩)O~class CDuiFrameWnd : public WindowImp... 阅读全文

posted @ 2013-09-27 23:04 Alberl 阅读(36234) 评论(35) 推荐(4) 编辑

2013 duilib入门简明教程 -- XML配置界面(6)
摘要:前面那些教程都是为了让小伙伴们从win32、MFC过渡到duilib,让大家觉得duilib不是那么陌生,如果大家现在还对duilib非常陌生的话,那就说明前面的教程做得不好,请大家在下面留言,我会一一查看,并做出改进。从这个教程开始就是见证奇迹的时刻啦~\(^o^)/~其实duilib主打的界面制作方式是XML + UI引擎 + win32框架,其实和浏览器HTML + CSS + 渲染引擎的方式非常类似,可以将其理解为一个非常mini的浏览器。而用duilib写界面时,大部分是在写XML,类似于写HTML,这点可能会让习惯MFC等windows界面的伙伴们有点不习惯,需要克服克服,相信在看 阅读全文

posted @ 2013-09-27 22:18 Alberl 阅读(44982) 评论(12) 推荐(0) 编辑

2013 duilib入门简明教程 -- 自绘标题栏(5)
摘要:如果大家有做过标题栏的自绘,肯定会感慨各种不容易,并且现有的一些资料虽然完美的实现了功能,但是代码比较乱,需要自行整理。如果用duilib,就是小case啦。duilib其实并没有区分标题栏和客户区,它的实现方法是屏蔽了系统自带的标题栏,用客户区来模拟标题栏,所以想怎么画就怎么画,非常方便。1、我们首先屏蔽一下系统自带的标题栏, 在HandleMessage函数里屏蔽以下三个消息即可 WM_NCACTIVATE、WM_NCCALCSIZE、WM_NCPAINT代码如下: virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPA... 阅读全文

posted @ 2013-09-27 21:56 Alberl 阅读(37158) 评论(9) 推荐(0) 编辑

2013 duilib入门简明教程 -- 响应按钮事件(4)
摘要:上一个Hello World的教程里有一句代码是这样的:CControlUI*pWnd=newCButtonUI;也就是说,其实那整块绿色背景区域都是按钮的区域。(这里简要介绍下,CControlUI 是duilib中所有控件的基类,而CButtonUI则是按钮类,更多的控件会在后面的教程一一介绍。)那么怎样响应按钮的点击消息呢?我们需要几个步骤:1、调用AddNotifier函数将消息加入duilib的消息循环2、给按钮设置一个唯一的控件ID(SetName函数)3、在Notify函数里处理按钮点击消息。代码如下:class CDuiFrameWnd : public CWindowWnd, 阅读全文

posted @ 2013-09-27 21:17 Alberl 阅读(44120) 评论(10) 推荐(2) 编辑

2013 duilib入门简明教程 -- 第一个程序 Hello World(3)
摘要:小伙伴们有点迫不及待了么,来看一看Hello World吧:新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去:#include #include int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){ ::MessageBox(NULL, _T("Hello World !"), NULL, NULL); return 0;}运行即可看到如下结果:咦,这不是win32程序么,你小子忽悠我?~O(∩_∩ 阅读全文

posted @ 2013-09-27 20:48 Alberl 阅读(59427) 评论(20) 推荐(3) 编辑

2013 duilib入门简明教程 -- VS环境配置(2)
摘要:既然是入门教程,那当然得基础点,因为搜索duilib相关资料时,发现有些小伙伴到处都是编译错误,以及路径配置错误等等,还有人不知道SVN,然后一个个文件手动下载的。其实吧,duilib的定位好像是这样的: 有一定的界面基础,懂MFC、WTL、windows消息机制等等。不然的话,即使环境配置好了,看Demo也绕晕你~\(^o^)/~所以对于没有任何基础的童鞋,请先打好基础,不然学习duilib会走更多歪路,推荐以下资料:书籍:《windows程序设计》教程: 孙鑫视频(这个我只下载了,但没看过,不过评价不错)网站:国际知名网站(国外网站:现在比codeguru好很多了,虽然是英文,但是有图文描 阅读全文

posted @ 2013-09-27 00:58 Alberl 阅读(62304) 评论(32) 推荐(10) 编辑

2013 duilib入门简明教程 -- 前言(1)
摘要:关于duilib的介绍就不多讲了,一来不熟,二来小伙伴们想必已经对比了多个界面库,也无需赘述。下面进入正题: 不看广告看疗效! 已有众多知名公司采用duilib做为界面库,如华为网盘、PPS(PPS和华为之前都是用UIPower)、金山快盘(也没用自家的界面库)、酷我音乐、爱奇艺视频、百度杀毒、百度卫士、百度管家等一系列产品。而duilib自己提供的Demo有QQ、QQ旋风、360等等。下面是一部分截图:疗效就不用再多说了吧~O(∩_∩)O~这么好的东东,都开源三年多了,肿么一直没有个像样的文档和入门教程咧? 那些知名公司的界面小伙伴们能马上用么??? 此处省略N字... 这就是Alberl写 阅读全文

posted @ 2013-09-26 23:27 Alberl 阅读(63867) 评论(12) 推荐(8) 编辑

1

导航