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. 话谈c#拷贝

    c#中类型分为值类型和引用类型,值类型对象赋值是本身就是赋的自身的一个副本,而引用类型赋值时则赋的是指向堆上的内存,假如我们不想赋这个地址而想将对象赋过去要怎么做呢?首先要知道拷贝分为浅表拷贝和深层拷 ...

  2. C/S应用升级更新完整解决方案

    年末福利,C/S应用升级更新完整解决方案放送 程序员,工作累寿命短,大家应该学会分享,别浪费有限的生命与健康做重复的事情. C/S方式实现的应用有个升级更新功能是必需的,以前整过一个但是没考虑多套C/ ...

  3. 记录在IIS中安装部署Orchard遇到的问题

    本机环境:Windows 8.1 + IIS8.5 + VS2013+SQLServer2012 首先是从官网直接下载Orchard.Web 1.7.2版的安装包,在本机IIS上部署,按官方文档一步步 ...

  4. ASP.NET网站单独

    解决ASP.NET网站单独发布指定页面问题 目录 前提 开始 aspx.cs文件放到单独的类库项目 一个可选择勾选页面的发布工具:LimusicAddin 前提 Asp.net 发布分为:动态编译和预 ...

  5. IOS学习之路五(代码实现UITableView)

    先展示一下运行结果: 代码实现: 1.先创建一个空项目: 2.创建一个Controller:(TableViewController) 在AppDelegate.h中声明属性: //  AppDele ...

  6. Oracle中忘记sys和System密码的办法

    打开cmd:sqlplus/nolog connect/as sysdba; alter user sys identified by ***; alter user system identifie ...

  7. 如何对软件开发工具 WebBuilder 进行安装?

    WebBuilder是一款开源的可视化Web应用开发和运行平台.基于浏览器的集成开发环境,采用可视化的设计模式,支持控件的拖拽操作,能轻松完成前后台应用开发:高效.稳定和可扩展的特点,适合复杂企业级应 ...

  8. Arduino 各种模块篇 震动模块 vibrator

    vibrator is a good thing. it has multi-funtionality . :) Now the  vibrator we choose is the one whic ...

  9. java.lang.ClassNotFoundException: [Ljava.lang.String解决办法

    原来jdk5.0的时候不会报这个错,用了jdk6.0就出现了这个错误,因为没有重载java.lang.String这个类 解决方法: 在vm缺省参数里添加-Dsun.lang.ClassLoader. ...

  10. 查找附近的wifi密码

    无意之间看到能破解附近wifi密码的诀窍,赶紧存储下来. 1. 首先打开终端 2. 在没有网路的情况下输入: netsh wlan show profiles 结果如下(自己的): 这些'用户配置文件 ...