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++一些注意点之转换操作符

    转换操作符定义 类可通过一个实参调用的非explicit构造函数定义一个隐式转换(其他类型—>类类型).当提供了实参类型的对象而需要一个类类型的对象时,编译器将使用该转换.这种构造函数定义了到类 ...

  2. 关于Dictionary字典和List列表

    命名空间System.Collections.Generic中有两个非常重要,而且常用的泛型集合类,它们分别是Dictionary<TKey,TValue>字典和List<T> ...

  3. json序列化NHibernate的实体

    在使用nhibernate时,想将实体对象序列化成json字符串,然后打印在日志中. 序列化时会出现问题,应该是因为这个实体被hibernate管理的原因.具体原因没有分析. 解决方案:为实体创建一个 ...

  4. WCF MSMQ

    基于WCF MSMQ 的企业应用解决方案   最近研究了一下基于MSMQ的WCF应用,从书上.网上查了很多资料,但始终没能彻底理解WCF-MSMQ的工作原理,也没能得到一个合理的应用解决方案.索性还是 ...

  5. MvcMovieStore实例 教程

    转原创:MvcMovieStore 实例教程(新概念版:mvc5.0,EF6.01)-初露锋芒 如需转载,请注明出处:http://www.cnblogs.com/DoduNet/ 最近趁业余时间,把 ...

  6. Go Code

    目录 备注工作空间(Workspaces)GOPATH环境变量包路径(Package Path)你的第一个程序你的第一个类库包名字(Package Name)测试集成备注 备注返回目录 此文主要是对官 ...

  7. XSD实例

    XSD实例 在前面的XSD笔记中,基本上是以数据类型为主线来写的,而在我的实际开发过程中,是先设计好了XML的结构(元素.属性),并写好了一份示例,然后再反过来写XSD文件(在工具生成的基础上修改), ...

  8. Matlab内置函数

    [原创]Matlab.NET混编技巧之——找出Matlab内置函数   Matlab与.NET的混合编程,掌握了基本过程,加上一定的开发经验和算法基础,肯定不难.反之,有时候一个小错误,可能抓破脑袋, ...

  9. 字符串匹配算法 -- Rabin-Karp 算法

    字符串匹配算法 -- Rabin-Karp 算法 参考资料 1 算法导论 2 lalor 3 记忆碎片 Rabin-karp 算法简介 在实际应用中,Rabin-Karp 算法对字符串匹配问题能较好的 ...

  10. easyui小清新俺也晒晒 视频管理软件bs项目

    easyui小清新俺也晒晒 视频管理软件bs项目 针对设备的管理软件 这是我听到最多的话.视频管理软件bs项目.easyui 好与坏我不去评价 项目做了好几个月,其实代码看来也没用多少,但是做需求,时 ...