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. How feedback work for your improvement

    Why generally feedback is the perspective from others for some event. In China there is story,some k ...

  2. Docker 01 Introduction

    Docker的组成: Docker Engine,一个轻量级.强大的开源容器虚拟化平台,使用包含了工作流的虚拟化技术,帮助用户建立.并容器化一个应用. Docker Hub,提供的一个SaaS服务,用 ...

  3. worker进程中线程的分类及用途

    worker进程中线程的分类及用途 欢迎转载,转载请注明出版,徽沪一郎. 本文重点分析storm的worker进程在正常启动之后有哪些类型的线程,针对每种类型的线程,剖析其用途及消息的接收与发送流程. ...

  4. 用Python复习离散数学(二)

    这次复习的是计数问题,立刻走起吧! 1.乘法原理 如果一项工作需要t步完成的,第一步有n1种不同的选择,第二步有n2种不同的选择,……,第t步有nt中不同的选择,那么完成这项工作所有可能的选择种数为: ...

  5. [Usaco2007 Jan]Running贝茜的晨练计划[一般DP]

    Description 奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行N(1 <= N <= 10,000)分钟的晨跑.在每分钟的开始,贝茜会选择下一 ...

  6. Orchard网上商店模块

    从头开始编写一个Orchard网上商店模块(1) - 介绍 原文地址:http://skywalkersoftwaredevelopment.net/blog/writing-an-orchard-w ...

  7. IOS学习之路二十四(custom 漂亮的UIColor)

    下面简单列举一下漂亮的和颜色,大家也可以自己依次试一试选出自己喜欢的. 转载请注明 本文转自:http://blog.csdn.net/wildcatlele/article/details/1235 ...

  8. js漫谈

    不久前在武汉这边找到了自己的第一份软件方面工作,当时还很欢喜,可惜最后因为家里的事情,公司的情况等等,最近又成了待业状态,正好安静的考虑一下以后怎么走,是考研还是继续找工作,非计算机专业学生自学找软件 ...

  9. 系统架构、网络通信、IM、视频会议技术

    专注于系统架构.网络通信.IM.视频会议技术. 主要作品: ESFramework 强悍的通信框架.P2P框架.群集平台. OMCS 简单易用的 网络语音视频 框架. MFile 语音视频录制组件. ...

  10. javascript遍历select下拉框判断其中值是否与指定值相等

    用jquery多了,就忘了原生的js是如何写的了,还需要多加巩固. 需求:jsp回显一select下拉框.选中指定值. 用户点击修改 该select进行已有值回显.有两种解决方法 一.js中获取用户的 ...