DuiLib 很好用,同时在没有完全理解源码的前提下,坑也不少,比如今天遇到的添加滚动条不显示。。。

情况是这样的,将一个页面作为Tab控件的其中一页,为了代码不窝在一起,就没有在CreateControl函数中使用CDialogBuilder,而是直接new一个页面,在构造函数中使用CDialogBuilder,大致如下
  1. CControlUI * CMainView::CreateControl(LPCTSTR pstrClass) {
  2. if (0 == _tcscmp(pstrClass, _T("RealTimeInfoPage"))) {
  3. return new CRealTimeInfoPage();
  4. }
  5. return NULL;
  6. }
  1. class CRealTimeInfoPage : public CContainerUI {
  2. public:
  3. CRealTimeInfoPage();
  4. ~CRealTimeInfoPage();
  5. };
  1. CRealTimeInfoPage::CRealTimeInfoPage() {
  2. CDialogBuilder builder;
  3. this->Add(builder.Create(_T("xml\\RealTimeInfoPage.xml")));
  4. }
就这么个搞法,以前也这么用,不过没用到滚动条,没发现这个问题。页面创建,显示都没有问题,滚动条死活不出来。
没办法,跟踪源码吧,跟到这里,原来m_pManager为NULL。。。当然略过了xml中配置的Default
  1. void CContainerUI::EnableScrollBar(bool bEnableVertical, bool bEnableHorizontal) {
  2. if( bEnableVertical && !m_pVerticalScrollBar ) {
  3. m_pVerticalScrollBar = new CScrollBarUI;
  4. m_pVerticalScrollBar->SetScrollRange(0);
  5. m_pVerticalScrollBar->SetOwner(this);
  6. m_pVerticalScrollBar->SetManager(m_pManager, NULL, false);
  7. if ( m_pManager ) {
  8. LPCTSTR pDefaultAttributes = m_pManager->GetDefaultAttributeList(_T("VScrollBar"));
  9. if( pDefaultAttributes ) {
  10. m_pVerticalScrollBar->SetAttributeList(pDefaultAttributes);
  11. }
  12. }
  13. } else if( !bEnableVertical && m_pVerticalScrollBar ) {
  14. m_pVerticalScrollBar->Delete();
  15. m_pVerticalScrollBar = NULL;
  16. }
  17. if( bEnableHorizontal && !m_pHorizontalScrollBar ) {
  18. m_pHorizontalScrollBar = new CScrollBarUI;
  19. m_pHorizontalScrollBar->SetScrollRange(0);
  20. m_pHorizontalScrollBar->SetHorizontal(true);
  21. m_pHorizontalScrollBar->SetOwner(this);
  22. m_pHorizontalScrollBar->SetManager(m_pManager, NULL, false);
  23. if ( m_pManager ) {
  24. LPCTSTR pDefaultAttributes = m_pManager->GetDefaultAttributeList(_T("HScrollBar"));
  25. if( pDefaultAttributes ) {
  26. m_pHorizontalScrollBar->SetAttributeList(pDefaultAttributes);
  27. }
  28. }
  29. } else if( !bEnableHorizontal && m_pHorizontalScrollBar ) {
  30. m_pHorizontalScrollBar->Delete();
  31. m_pHorizontalScrollBar = NULL;
  32. }
  33. NeedUpdate();
  34. }
得想办法把PaintManager传进来,找了下CPaintManagerUI看能不能找到获取paintmanager对象的方法,结果是不好用的
  1. CPaintManagerUI* CPaintManagerUI::GetPaintManager(LPCTSTR pstrName) {
  2. if( pstrName == NULL ) return NULL;
  3. CString sName = pstrName;
  4. if( sName.IsEmpty() ) return NULL;
  5. for( int i = 0; i < m_aPreMessages.GetSize(); i++ ) {
  6. CPaintManagerUI* pManager = static_cast<CPaintManagerUI*>(m_aPreMessages[i]);
  7. if( pManager != NULL && sName == pManager->GetName() ) return pManager;
  8. }
  9. return NULL;
  10. }
  11. CDuiPtrArray* CPaintManagerUI::GetPaintManagers() {
  12. return &m_aPreMessages;
  13. }
有这么两个,明明CMainView继承自WindowImplBase,拥有成员变量m_PaintManager的Name为“”,却不能通过""获取,不说了,找到原因还是去改一下CRealTimeInfoPage的构造函数,把paintmanager传进来把,虽然很丑陋,但是能用啊!
  1. CRealTimeInfoPage::CRealTimeInfoPage(CPaintManagerUI *pManager) {
  2. CDialogBuilder builder;
  3. this->Add(builder.Create(_T("xml\\RealTimeInfoPage.xml"), NULL, NULL, pManager));
  4. }
  1. CControlUI * CMainView::CreateControl(LPCTSTR pstrClass) {
  2. if (0 == _tcscmp(pstrClass, _T("RealTimeInfoPage"))) {
  3. return new CRealTimeInfoPage(&m_PaintManager);
  4. }
  5. return NULL;
  6. }
至此终于把滚动条显示出来了。

DuiLib 中滚动条不显示的问题的更多相关文章

  1. java中JScrollPane不显示水平滚动条的解决办法

    在JPanel中添加了表格,表格中对东西太多,需要水平滚动条滑动才能够完全找到所有数据,如果没有水平滚动条的话,数据堆积在一起,无法分开 做法是: 第一步:先将表格自动调整的状态给关闭掉:table. ...

  2. 让UIScrollView、UITableView的滚动条一直显示

    先用xcode5.1.1或更低版本创建一个Category,如图: 然后拷贝以下代码到刚创建的UIImageView+ForScrollView.m文件中: - (void) setAlpha:(fl ...

  3. WPF的项目,ListBox 纵向滚动条不显示

    最近在做WPF的项目,ListBox 纵向滚动条不显示,但是鼠标滚轮可以在ListBox中使用,但是必须要出现纵向滚动条.  索性就直接在listBox外面包裹一个ScrollViewer. Scro ...

  4. css设置滚动条并显示或隐藏

    看效果,没有滚动条,超出div,开发中肯定不行. 有滚动条 最后就是想隐藏滚动条 代码 有滚动条并显示 <!DOCTYPE html> <html lang="en&quo ...

  5. DuiLib中FlashDemo的例子经验杂粹1

    转载:https://www.jianshu.com/p/3e958ae9e5ab 最近用duilib做个东西,经常卡壳 ,而且以前学的现在又忘.现在觉得应该好好做笔记,以前老是觉得博客是很郑重的东西 ...

  6. Firebug中调试中的js脚本中中文内容显示为乱码

    Firebug中调试中的js脚本中中文内容显示为乱码 设置 页面 UFT-8 编码没用, 解决方法:点击 "Firebug"工具栏 中的"选项"---" ...

  7. MongoVue中Collections无法显示的问题

    问题描述: 通过Python向MongoDB写入数据后,MongoVue中Collections无法显示的问题 原因: Mongodb 3.0之后默认的 storageEngine为wiredTige ...

  8. OpenGL中glVertex、显示列表(glCallList)、顶点数组(Vertex array)、VBO及VAO区别

    OpenGL中glVertex.显示列表(glCallList).顶点数组(Vertex array).VBO及VAO区别 1.glVertex 最原始的设置顶点方法,在glBegin和glEnd之间 ...

  9. winform中dataGridView隔行显示不同的背景色,鼠标移动上显示不同颜色,离开后变回原色

    winform中dataGridView隔行显示不同的背景色,鼠标移动上显示不同颜色,离开后变回原色 先设置奇数行颜色,这个有个自带的属性AlternatingRowsDefaultCellStyle ...

随机推荐

  1. Prototype,创建型模式

    读书笔记_探索式测试_混合探索式测试   一.测试场景 1.讲述用户故事 2.描述需求 3.演示产品功能 4.演示集成场景 5.描述设置和安装 6.描述警告和出错情况 二.使用基于场景的探索式测试 1 ...

  2. C#socket通信1

    .net平台下C#socket通信(上) 完全是基础,新手可以随意看看,大牛可以关闭浏览页了,哈哈. 在开始介绍socket前先补充补充基础知识,在此基础上理解网络通信才会顺理成章,当然有基础的可以跳 ...

  3. [原]MobileSubstrate 工作流程

    [附-腾讯安全管家替换 MobileSubstrate 的流程] com.qq.mqqsecure.deb-postinst--->QSCommand--->QSTempRunner

  4. springMVC3学习(一)--框架搭建

    由于项目需要,学习下springMVC,在此简单记录一下. 如有十万个为什么,暂且忽略,待以后研究. 本人是基于3.1.1版本开发,如遇jar包版本冲突等其他问题,概不负责. 下载地址:上传此zip资 ...

  5. struts1 logic:iterate bean:write标签使用

    只是截取项目中部分代码,供参考及日后查阅 用struts1标签html:select 展现select下拉列表 刚开始为如下代码: <html:select name="Shuiwuj ...

  6. Exchange 2016 创建日程,远程服务器返回错误: (401) 未经授权

    背景:在测试环境中一切正常,使用的是Exchange2013,上生产环境Exchange2016,部署后产生如下错误: Microsoft.Exchange.WebServices.Data.Serv ...

  7. Hadoop Streaming框架学习(一)

    Hadoop Streaming框架学习(一) Hadoop Streaming框架学习(一) 2013-08-19 12:32 by ATP_, 473 阅读, 3 评论, 收藏, 编辑 1.Had ...

  8. 依赖注入DI

    说AOP不得不提依赖注入,先来看看一个实例.通过实例来解释依赖注入和它的用途. 我们现在要设计一个关于衣服的上架功能,有时候需要进行促销,我们现在知道的促销方式有打1折,和打2折. 最初的方案: pu ...

  9. IOS Objective-C 协议,委托

    IOS Objective-C 协议,委托 IOS开发使用的语言Objective-C(以下简称OBJ-C)是一种扩展自C语言的面向对象语言.在OBJ-C中有一个很重要概念:消息.在最近的学习当中逐渐 ...

  10. Arduino 串口篇 Arduino发送十六进制 send HEX via serial port RS232-to-USB to PC

    发送十六进制比较直观,可以在上位机中直接获取十六进制的数据,然后在在上位机上将十六进制HEX转换成BIN(二进制)或者DEC(十进制)就十分简单有效了. 下面是在Arduino上怎么演示直接发送16进 ...