2013年11月2日

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

摘要: 在前面的教程里,虽然图片都放到了skin文件夹里,但是XML却都在外面,当XML比较多时,就不太好看啦,如下图: 所以需要整理一下,将XML也放入skin文件夹,这样exe的目录就简洁多了: 将XML放入skin文件夹后,代码也要跟着变化哦,在duilib的Demo里经常可以看到如下代码: (其中SetResourcePath是设置资源的路径,包括XML和图片等各种资源;SetResourceZip是指资源都放到ListRes.zip文件里了。) CPaintManagerUI::SetInstance(hInstance); CPaintManagerUI::S... 阅读全文

posted @ 2013-11-02 23:23 Alberl 阅读(8589) 评论(0) 推荐(0) 编辑

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

摘要: 在《duilib进阶教程 -- TreeView控件的bug (9)》里,Alberl发现了两个bug,并解决了其中一个,现在教程已经接近尾声啦,所以Alberl就解决了另外一个bug。 Bug现象: 第一次启动软件时,由于播放列表并没有文件,所以没有显示垂直滚动条,当我们拖入文件后,就显示了垂直滚动条,这个时候会自动调整子控件的宽度,于是一切显示正常。 但是当我们第二次启动软件时,由于软件会加载文件到播放列表,所以一开始就显示了垂直滚动条,但这个时候并没有自动调整子控件的宽度,所以子控件显示到了列表的外面,如图: 其实不仅TreeView有问题,而且List也有问题,用如下代... 阅读全文

posted @ 2013-11-02 22:21 Alberl 阅读(6750) 评论(0) 推荐(0) 编辑

duilib进阶教程 -- 响应windows原生消息和自定义消息(13)

摘要: 一、windows原生消息 同样,入门教程只是给出了响应windows原生消息的方法,并没给出例子,这里以自适应屏幕分辨率为例。迅雷播放器虽然可以在启动的时候自动调整窗口大小,但是当屏幕分辨率实时改变时并没有调整窗口。我们做个改进,即可以实时调整大小,很明显,应该响应WM_DISPLAYCHANGE消息,而duilib自己处理windows消息的函数是在HandleMessage里,因此重载HandleMessage函数,加入如下代码:LRESULT CDuiFrameWnd::HandleMessage( UINT uMsg, WPARAM wParam, LPARAM lParam ){. 阅读全文

posted @ 2013-11-02 22:00 Alberl 阅读(9172) 评论(0) 推荐(0) 编辑

duilib进阶教程 -- 改进窗口拖动 (12)

摘要: 现在大家应该都知道caption="0,0,0,32",是指示标题栏区了吧,如果想要整个窗口都能拖动呢? 那直接把高度改成和窗口一样不就得了~O(∩_∩)O~ 嗯,这样是可以,比如窗口高度是600,那么我们指定caption="0,0,0,600",这样整个窗口就可以拖动了,但是如果窗口大小改变了呢?假如调整窗口的大小到800,这个时候最下面的200个像素的高度就不能拖动啦,因此这里进行一个改进,也是举手之劳,在WindowImplBase::OnNcHitTest里的 RECT rcCaption = m_PaintManager.GetCaption 阅读全文

posted @ 2013-11-02 21:33 Alberl 阅读(8137) 评论(4) 推荐(0) 编辑

duilib进阶教程 -- 扩展duilib的消息 (11)

摘要: duilib并没有提供双击和右键消息,所以需要我们自行扩展,这里以添加双击消息为例, 在UIDefine.h里,我们只看到了DUI_MSGTYPE_CLICK消息,却没有看到双击消息,因此需要在这里添加一个双击消息: #define DUI_MSGTYPE_DBCLICK (_T("dbclick")) 在UIManager.h里可以看到UIEVENT_DBLCLICK、UIEVENT_RBUTTONDOWN等消息,这是因为它的右键和双击等消息只给了内部的控件使用,这时我们需要让他传递出来,所以需要在CControlUI::DoEvent函数里传递双击消... 阅读全文

posted @ 2013-11-02 20:15 Alberl 阅读(7269) 评论(2) 推荐(0) 编辑

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

摘要: 到上一个教程为止,界面显示的代码就都介绍完啦,现在开始介绍控件的响应,其实在《2013 duilib入门简明教程 -- 事件处理和消息响应 (17)》里已经列出了duilib自己定义的所有消息,并且前面也介绍了Button和Tab的响应,还是有小伙伴们不知道怎么响应其他控件,因此这里介绍一下其他控件的响应。 需要注意的是,如果要响应控件,则必须给控件指定一个唯一的ID,在windows编程里,每个控件的ID都是一个数字,如IDC_BUTTON_ 等等,可以用GetDlgItem()来获取控件的指针;而duilib的ID却不是数字,而是一个字符串,如name="button1" 阅读全文

posted @ 2013-11-02 14:55 Alberl 阅读(11002) 评论(5) 推荐(0) 编辑

duilib进阶教程 -- TreeView控件的bug (9)

摘要: 一、不自动调整子控件的宽度(TreeView宽度小于260时) 相信亲们用同样的代码,显示效果肯定和Alberl不一样吧~O(∩_∩)O~ 嘿嘿,仔细对比下,看看你们的列表头背景图片是下面这样的么? 细心的小伙伴们应该早就发现了,可以看到右边那个箭头并没有完全显示出来,这是因为TreeView又调皮啦! 最开始觉得是TreeView没有自动调整控件的宽度,去看了下代码,没啥问题,并且TestApp1里面那个tree也没出现这种现象,所以就一直以为是自己的XML代码出了问题。由于对duilib并不熟,所以只是稍微调试了一下,并没找到问题,就暂时没管。到后面其他效果都OK了,只剩下这个... 阅读全文

posted @ 2013-11-02 08:53 Alberl 阅读(7283) 评论(5) 推荐(0) 编辑

duilib进阶教程 -- Label控件的bug (8)

摘要: 上个教程说到了TreeView的文字不能垂直居中的问题,而我们用LabelUI其实是可以垂直居中的,为什么不说是TreeView的bug,而说是Label控件的bug呢?因为影响TreeView垂直居中的就是Label,可以发现LabelUI的【属性列表.XML】里有valign属性,而代码里却找不到,是因为valign属性被合并到align属性里去了,只要设置align="center"就可以水平垂直都居中,但是想要垂直居中,水平左对齐啥的,就犯难了,因此这里需要将两个属性分开,valign管垂直,align管水平,这样想要怎么组合都OK啦。 将CLabelUI::Set 阅读全文

posted @ 2013-11-02 00:02 Alberl 阅读(8476) 评论(0) 推荐(0) 编辑

导航