分类 C++ 下的文章

Duilib BUG总结

如果用 new 的方式生成,则不会崩溃,所以给出一个临时的快速解决方案,即主窗口都用 new 生成,_tWinMain 改为下面这样:

其根本原因是 ActiveX 控件使用了类似 COM 的方式,而却没有控制好作用域,所以导致析构时,CActiveXCtrl 的成员变量 m_pViewObject 所指向的内存已经无效,因此产生了崩溃。之所以用 new 的方式不会崩溃,是因为 new 出来的内存,即使对象析构后,其内存还是有效的。

由于其使用了类似 COM 的行为,有几处 delete this,而 Alberl 并不了解微软自己的 COM 和 ActiveX 内部是怎么处理的,所以也就无法评价 duilib 的 COM 和 ActiveX,当然啦,Alberl 还是调试了一下,发现 ActiveXUI.cpp 里面的那几个类都是模拟了 COM 的方式,采用了引用计数,但是那几个类的 Release 顺序貌似有点乱,而且那几个类互相包含,所以才造成析构时的那些问题

另外如果在 MFC 中这样使用,则不会有问题

具体原因有待调试查找

如果不用指针的方式,而直接用变量的方式显示菜单CDuiMenu menu(_T("Menu/menu.xml")),则不能用 ShowWindow,否则会崩溃,因为出了作用域后窗口被销毁了,所以此时可以将 CDuiMenu 定义为成员变量、全局变量、或者静态变量,但是做为一个局部使用的类,这些方法显然不怎么好;

这时可以用 ShowModal 代替 ShowWindow,于是就能看到窗口啦,但是却产生了一个问题,那就是菜单窗口不会失去焦点,或者说点击主窗口的其他区域,菜单不会消失,当然,小伙伴们可以自己捕获鼠标,来判断是否点击了主窗口的其他区域,但显然这种方法也不太好;

阅读全文

duilib札记

昨天在编程群里聊天,提到了ListCtrl,然后有网友找我,他需要做一个ListCtrl控件,我看过需求后接下了这个活。今天就把大致的思路和过程记录一下。首先看《任务书》:

 -----------------------------------------------------------任务书开始-------------------------------------------------------------------

任务书:

1.效果图

1.这是一个ListItem,内容可以自定义,可以由Button,Label等等组成。每一个Item都是独立的,可以产生事件,

2.New,在List尾部增加一个Item,

3.Edit:显示当前Item的Index

4.Copy是复制一个当前的Item放置在尾部

5.Delete删除一个Item.如果下方有Item,则自动替换当前Item.

6.在某个Item上双击,显示当前Item,Idex.

7.在某个Item上单击,使该Item处理焦点状态。例如

-----------------------------------------------------------任务书结束-------------------------------------------------------------------

一、任务分析:

看一下这个效果图,这是类似于windows的资源管理的控件,如下图,控件的要求是可以动态的增加,删除,编辑和赋值其中的每一个子项目,而每一个子项目都是独立的,其中的内容可以自定义。

阅读全文

仿迅雷播放器教程

2011年12月份的时候发了这篇博客 http://blog.csdn.net/qq316293804/article/details/7107049 ,博文最后说会开源一个播放器,没想到快两年了,才有时间发博客。

两年前的博客和大部分博客一样,以结果为主,也就是开源一个软件,直接把代码一扔,效果图一截,发一篇介绍性的博客就完事,里面没有任何技术分析。而Alberl在学习的过程中,虽然找到的绝大部分资料也都是这种类型的,帮助也很大,但还是感觉缺点什么。这就是Alberl喜欢CodeProject的原因,因为几乎每一篇文章都提供了以下资料:1、源码下载。 2、使用教程、3、技术分析。 这样不管是新手还是高手,都可以得到自己想要的。  但是国内的资料连第一点都很难做到,就更别说后面的了。 所以Alberl要是开源个什么东西,会尽量向这三点靠拢。

不过本节教程除外~O(∩_∩)O~,因为ffmpeg实在是个蛋疼的东西,下面会有介绍~~~

唠叨完毕,进入正题:

一、ffmpeg资料 -- 无语

2011年, 看的是2003年的这个教程http://dranger.com/ffmpeg/。 2013年的时候,还是只有这个教程,就算是谷歌【ffmpeg Tutorial】,第一篇出来的还是这个家伙,说明连英文资料都少(Aberl没有仔细去找啦)。

人家dranger.com上用这么大的字体说了这个教程已经过时了,但国内现在还是到处转载这个教程,并且人家有8个教程,不知道翻译过来怎么只有7个了。

阅读全文

duilib入门简明教程

关于duilib的介绍就不多讲了,一来不熟,二来小伙伴们想必已经对比了多个界面库,也无需赘述。下面进入正题:

不看广告看疗效! 已有众多知名公司采用duilib做为界面库,如华为网盘、PPS(PPS和华为之前都是用UIPower)、金山快盘(也没用自家的界面库)、酷我音乐、爱奇艺视频、百度杀毒、百度卫士、百度管家等一系列产品。而duilib自己提供的Demo有QQ、QQ旋风、360等等。下面是一部分截图:

疗效就不用再多说了吧~O(∩_∩)O~

这么好的东东,都开源三年多了,肿么一直没有个像样的文档和入门教程咧? 那些知名公司的界面小伙伴们能马上用么??? 此处省略N字...

这就是Alberl写入门教程的原因。

Alberl虽然关注DirectUI快三年了,但是一直处于观望状态,几年前duilib牵头,使很多想寻求商业合作的界面库也纷纷开源或免费,当时Alberl还想等着他们出2.0时再用呢,结果眼一睁一闭,别说2.0了,能勉强活下来的就剩duilib了。duilib的历史简介就这样了。

阅读全文

仿酷狗音乐播放器开发日志

学习duilib界面库有一段时间了,除了仓鼠软件共享以外还没用它开发过什么完整的软件项目。今天看到酷狗音乐播放器做得不错,经过几年的改革,酷狗现在的UI已经相当不错了。在这个假期,我决定做一个仿酷狗音乐播放器,模仿酷狗的软件界面,并加入基本的音乐播放功能,在QQ空间写出开发日志以作记录~~

首先分析一下酷狗播放器的界面布局。

很简单明了的布局方式,我把它先大致分为3部分,在Firework里贴上酷狗的软件的截图,然后使用切片工具对三部分进行精确分割,得到这三个部分的的大小和坐标,然后编写到xml文件里。

在duilib的布局里,根容器肯定是一个纵向布局VerticalLayout,然后,放置三个横向布局HorizontalLayout,一个HorizontalLayout是标题栏。其中又包含了工具栏,播放控制按钮,菜单栏等细分元素。

第二个HorizontalLayout是播放器的主体部分。这部分从左到右又可以分为三小部分,最左侧是切换到不同页面的Tab布局,中间是音乐列表,最后变是音乐搜索的页面,也属于Tab布局。

第三个 HorizontalLayout是播放器的状态栏,这个布局里包含一些提示信息,比较简单。

这是今天做出来的效果:

今天早上把整个软件的标题栏部分做得差不多了。

阅读全文