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. }
至此终于把滚动条显示出来了。

最新文章

  1. 补发:用Meal Prep+模块化饮食来减肥之实操
  2. Selenium-xpath详解
  3. python基础-基本数据类型
  4. 数据库一次性插入10w条数据,怎么插入效率快
  5. UVA 11078 Open Credit System(扫描 维护最大值)
  6. block没那么难(二):block和变量的内存管理
  7. [Word使用笔记]分类简介
  8. js-自定义事件
  9. BZOJ 3809: Gty的二逼妹子序列 &amp; 3236: [Ahoi2013]作业 [莫队]
  10. LINUX PID 1和SYSTEMD 专题
  11. C# 《编写高质量代码改善建议》整理&amp;笔记 --(五)成员设计
  12. django 单点登录思路-装饰器
  13. 【学习总结】GirlsInAI ML-diary day-4:变量/Variable
  14. opencv setTo()
  15. OCM_第十八天课程:Section8 &mdash;》RAC 数据库 _ RAC DB 搭建/RAC DB 配置使用
  16. Android GridView使用View.GONE只隐藏内容而不隐藏空间的解决方案
  17. Ms.office2010安装教程
  18. Docker(十七)-修改Docker容器启动配置参数
  19. datatable删除一行方法
  20. Acrobat 无法在本页面上执行OCR识别

热门文章

  1. python包
  2. Vijos:P1001谁拿了最多奖学金
  3. SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY
  4. url在线编码和解码
  5. 1047找环环&amp;1503整数探究
  6. Nginx 配置基于域名的虚拟
  7. NuGet的本地服务器安装与Package的发布
  8. Rotativa 转换html 为pdf时遇到的问题
  9. 简单的mvc之三:灵活的路由(上)
  10. .net调用Outlook 批量发送邮件,可指定Outlook中的账号来发送邮件