代码下载:http://download.csdn.net/detail/qq316293804/6433937

  之前入门教程里已经讲过了自定义控件,这里借着迅雷播放器再次举个例子。

  1、我们先给迅雷播放器加入下面那一排按钮。

  和上个教程一样,我们可以选择直接放在主XML里面,也可以选择放到Container里面,在这里,为了让主XML的代码更简洁一点,我们选择放到单独的XML里面。而这个单独的XML就相当于一个自定义控件了,将控件名取为WndPlayPanel,XML取名为【WndPlayPanel.xml】,然后在CDuiFrameWnd::CreateControl里加入如下代码:

CControlUI* CDuiFrameWnd::CreateControl( LPCTSTR pstrClassName )
{
if (_tcsicmp(pstrClassName, _T("WndPlayPanel")) == )
{
CDialogBuilder builder;
CControlUI* pUI = builder.Create(_T("WndPlayPanel.xml"));
return pUI;
} return NULL;
}

  这样自定义控件就创建出来了,接着把主XML的<HorizontalLayout height="55" /> 换成<WndPlayPanel height="55" />,自定义控件WndPlayPanel就显示到最下方了。

  2、同样的道理,我们将标题栏也放到单独的XML里,取名为Caption,XML取名为【Caption.xml】,在CDuiFrameWnd::CreateControl里加入类似代码,即可显示标题栏区域。

  XML的嵌套是不是很简单呢,和入门教程里的一样哦,只不过入门教程里的自定义控件是一个win32按钮,而这里是一个XML。

仿迅雷播放器图片

  

迅雷播放器原图 

  对比一下正宗的迅雷播放器,可以发现咱们的仿制品还有很多粗糙的地方,比如【打开文件】按钮就完全见不得人啦,还有右上角的那三个按钮,再就是左上方的【播放】按钮、以及中间的那一块蓝色光影,都和正宗的有所差别。这些将留到后面的教程讲解~O(∩_∩)O~

duilib进阶教程 -- XML嵌套及自定义控件 (4)的更多相关文章

  1. duilib进阶教程 -- 总结 (17)

    整个教程的代码下载:http://download.csdn.net/detail/qq316293804/6502207 (由于duilib进阶教程主要介绍界面,所以这个教程只给出界面相关的代码,完 ...

  2. duilib进阶教程 -- Container控件的bug (14)

    在<duilib进阶教程 -- TreeView控件的bug (9)>里,Alberl发现了两个bug,并解决了其中一个,现在教程已经接近尾声啦,所以Alberl就解决了另外一个bug. ...

  3. duilib进阶教程 -- 在MFC中使用duilib (1)

    由于入门教程的反响还不错,因此Alberl就以直播的形式来写<进阶教程>啦,本教程的前提: 1.请先阅读<仿迅雷播放器教程> 2.要有一定的duilib基础,如果还没,请先阅读 ...

  4. duilib进阶教程 -- Container控件 (3)

    前面两个教程的目的是教大家与MFC结合,那么从这篇起,将不再使用MFC,而使用纯win32项目,本文的所有知识已经在<duilib入门教程>里面讲过了,因此基础知识不再赘述. 代码下载:h ...

  5. duilib进阶教程 -- TreeView控件(6)

    代码下载:http://download.csdn.net/detail/qq316293804/6483905 上一个教程中,界面已经和迅雷一模一样啦,大小和位置一个像素都不差哟,亏得Alberl调 ...

  6. duilib进阶教程 -- 在duilib中使用MFC (2)

    好人做到底,送佛送到西.虽然上一篇教程已经说得很详细了,但Alberl还是再举一个例子.上一篇教程的主窗口是MFC的,所以这篇教程把主窗口换成duilib的~O(∩_∩)O~ 1.我们利用<20 ...

  7. duilib进阶教程 -- 设置资源路径 (15)

    在前面的教程里,虽然图片都放到了skin文件夹里,但是XML却都在外面,当XML比较多时,就不太好看啦,如下图: 所以需要整理一下,将XML也放入skin文件夹,这样exe的目录就简洁多了: 将XML ...

  8. duilib进阶教程 -- 各种控件的响应 (10)

    到上一个教程为止,界面显示的代码就都介绍完啦,现在开始介绍控件的响应,其实在<2013 duilib入门简明教程 -- 事件处理和消息响应 (17)>里已经列出了duilib自己定义的所有 ...

  9. duilib进阶教程 -- 图片和文字的位置调整 (5)

    已经有8个晚上没写教程啦,因为之后遇到了一些问题,主要是TreeView控件的问题,这个问题搞了几个晚上,然后还需要调试代码才能知道它的用法,虽然能够调试出来,但毕竟没什么含金量,只是重复劳动而已,相 ...

随机推荐

  1. oracle中类似indexof用法_instr函数

    oracle中类似indexof用法_instr函数 [sql] 在oracle中没有indexof()函数 但是提供了一个 instr() 方法 具体用法: select instr('保定市南市区 ...

  2. Github和Git上fork指南

    现在有这样一种情形:有一个叫做Joe的程序猿写了一个游戏程序,而你可能要去改进它.并且Joe将他的代码放在了GitHub仓库上.下面是你要做的事情: fork并且更新GitHub仓库的图表演示 For ...

  3. How to chain a command after sudo su?

    The idea is simple, for example: alias foo='sudo su foo && cd /tmp' However, it does not exe ...

  4. .NET Core Entity使用Entity Framework Core链接数据库

    首先安装Nuget包 Install-package Microsoft.EntityFrameworkCore Install-package Microsoft.EntityFrameworkCo ...

  5. oracle 11g 安装及netca,dbca乱码之解决

    在中文Linux下安装Oracle 11g,运行runInstaller后默认会出现乱码,解决办法如下: 1.准备字体zysong.ttf,点击下载,解压下载到的fallback 2.使用归档管理器打 ...

  6. Series转化为DataFrame数据

    out=groupby_sum.ix[:'to_uid','sum(diamonds)']使用ix在提取数据的时候,out的数据类型通常为<class 'pandas.core.series.S ...

  7. 【AI】Exponential Stochastic Cellular Automata for Massively Parallel Inference - 大规模并行推理的指数随机元胞自动机

    [论文标题]Exponential Stochastic Cellular Automata for Massively Parallel Inference     (19th-ICAIS,PMLR ...

  8. xcode9 报错 “Swift Language Version” (SWIFT_VERSION) build setting must be set to a supported value for targets which use Swift

    用xcode编译后会出现这个错误的情况: 1.使用cocopod导入第三方swift包后,swift的包是比较老的swift开发的. 2.用xcode9 打开老的swift(比如swift2.0)的工 ...

  9. 【C语言】数组名传递给函数,数组的sizeof变为4的原因

    C语言中,数组名作为参数传递给函数时,退化为指针,sizeof对指针操作结果应该是4.例子如下: #include<iostream> using namespace std; void ...

  10. mysql 编译安装 window篇

    传送门 # mysql下载地址 https://www.mysql.com/downloads/ # 找到MySQL Community Edition (GPL) https://dev.mysql ...