如图,运行后RichEdit的滚动条显示如下:

滚动条的属性设置是在Window节点下设置的,无论在xml里怎么样设置都不行:

<Default name="VScrollBar" value="button1normalimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;0,90,16,106&apos; mask=&apos;#FFFF00FF&apos;&quot; button1hotimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;18,90,34,106&apos; mask=&apos;#FFFF00FF&apos;&quot; button1pushedimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;36,90,52,106&apos; mask=&apos;#FFFF00FF&apos;&quot; button1disabledimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;54,90,70,106&apos; mask=&apos;#FFFF00FF&apos;&quot; button2normalimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;0,108,16,124&apos; mask=&apos;#FFFF00FF&apos;&quot; button2hotimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;18,108,34,124&apos; mask=&apos;#FFFF00FF&apos;&quot; button2pushedimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;36,108,52,124&apos; mask=&apos;#FFFF00FF&apos;&quot; button2disabledimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;54,108,70,124&apos; mask=&apos;#FFFF00FF&apos;&quot; thumbnormalimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;0,126,16,142&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; thumbhotimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;18,126,34,142&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; thumbpushedimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;36,126,52,142&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; thumbdisabledimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;54,126,70,142&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; railnormalimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;0,144,16,160&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; railhotimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;18,144,34,160&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; railpushedimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;36,144,52,160&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; raildisabledimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;54,144,70,160&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; bknormalimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;0,162,16,178&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; bkhotimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;18,162,34,178&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; bkpushedimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;36,162,52,178&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; bkdisabledimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;54,162,70,178&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; "/><Default name="HScrollBar" value="button1normalimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;0,0,16,16&apos; mask=&apos;#FFFF00FF&apos;&quot; button1hotimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;18,0,34,16&apos; mask=&apos;#FFFF00FF&apos;&quot; button1pushedimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;36,0,52,16&apos; mask=&apos;#FFFF00FF&apos;&quot; button1disabledimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;54,0,70,16&apos; mask=&apos;#FFFF00FF&apos;&quot; button2normalimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;0,18,16,34&apos; mask=&apos;#FFFF00FF&apos;&quot; button2hotimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;18,18,34,34&apos; mask=&apos;#FFFF00FF&apos;&quot; button2pushedimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;36,18,52,34&apos; mask=&apos;#FFFF00FF&apos;&quot; button2disabledimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;54,18,70,34&apos; mask=&apos;#FFFF00FF&apos;&quot; thumbnormalimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;0,36,16,52&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; thumbhotimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;18,36,34,52&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; thumbpushedimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;36,36,52,52&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; thumbdisabledimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;54,36,70,52&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; railnormalimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;0,54,16,70&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; railhotimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;18,54,34,70&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; railpushedimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;36,54,52,70&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; raildisabledimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;54,54,70,70&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; bknormalimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;0,72,16,88&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; bkhotimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;18,72,34,88&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; bkpushedimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;36,72,52,88&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; bkdisabledimage=&quot;file=&apos;scrollbar.bmp&apos; source=&apos;54,72,70,88&apos; corner=&apos;2,2,2,2&apos; mask=&apos;#FFFF00FF&apos;&quot; "/>

猜测可能的原因:

duilib核心代码的版本不对?因为duilib的版本网上有很多,googlecode上一份,github上一份,这两份虽然是官方团队自己维护的竟然也不一样,更别说网上散步的别的版本了,我们的工程代码就是不知道用了哪份代码。
由于比较想用DuiDesigner来设计资源,github上把DuiDesigner砍掉了,因为改到最后发现DuiDesigner支持不了了,比较坑。
所以,后面就以googlecode上的代码为准开始做分析

第一步,验证googlecode的代码RichEdit是否能正确显示滚动条。
网上下载了一个duilib的显示程序,使其引用googlecode这一版本的duilib代码,修改使之编译通过(省略N个步骤):

证实是可以正确显示滚动条的。于是就打算把项目中的duilib代码更换为googlecode这一版本的。

工程是采用vs2015,而duilib是vs2008来开发的,所以还是会有一些问题,这里一并罗列一下:
工程中需要导入库:

#pragma comment( lib, "comctl32.lib" )
#pragma comment( lib, "Gdi32.lib" )
#pragma comment( lib, "comdlg32.lib" )

UIFlash.h中有一处需要改动的:

#import "..\Utils/Flash11.tlb" raw_interfaces_only, named_guids, rename("IDispatchEx","IMyDispatchEx")

更改为:

//ref: http://blog.163.com/tijijun@126/blog/static/6820974520141201844104/
//#import "..\Utils/Flash11.tlb" raw_interfaces_only, named_guids
#import "PROGID:ShockwaveFlash.ShockwaveFlash" raw_interfaces_only, named_guids, \
rename("IDispatchEx", "IMyDispatchEx")    \
rename("ICanHandleException", "IMyICanHandleException")

编译通过后运行程序,发现RichEdit的滚动条仍然不能正常显示,为什么呢?

  1. 网上下载的duidemo可以正常显示
  2. 自己的工程不能正常显示

同一份核心代码,那就不是引擎的问题,于是就想到是不是设计的方式不对导致的?
对比了一下发现,duidemo的不同TAB页面都是在同一个Window里设计完成的,TAB页不同的switch页面也都是在同一个xml里设计完成的。这种设计方法有一个很大弊端就是:所有的子页面都是在同一个窗口区里设计,又不能通过设置visible的属性在设计阶段切换不同的设计页面,所以设计起来比较痛苦费时。我们的设计方法是添加自定义节点:

<HorizontalLayout bkcolor="#FFFFFFFF" bordercolor="#FF768D9B"><TabLayout name="tabSwitch"><HorizontalLayout><pageWrapper bkcolor="ffffffff"/></HorizontalLayout><HorizontalLayout><pageSign /></HorizontalLayout><HorizontalLayout><pageSetting /></HorizontalLayout><HorizontalLayout><pageAbout /></HorizontalLayout></TabLayout></HorizontalLayout>

每个节点代表一个子窗口,在代码中通过设置IDialogBuilderCallback来根据节点名动态加载对应的子页面资源配置文件:

class CDialogBuilderCallbackEx : public IDialogBuilderCallback
{
public:CControlUI* CreateControl(LPCTSTR pstrClass) {if (_tcscmp(pstrClass, _T("pageWrapper")) == 0) {returnnew CPageWrapperUI;}elseif (_tcscmp(pstrClass, _T("pageSign")) == 0) {returnnew CPageSignUI;}elseif (_tcscmp(pstrClass, _T("pageSetting")) == 0) {returnnew CPageSettingUI;}elseif (_tcscmp(pstrClass, _T("pageAbout")) == 0) {returnnew CPageAboutUI;}return NULL;}
};
class CPageWrapperUI : public CContainerUI
{
public:CPageWrapperUI(){CDialogBuilder builder;CContainerUI* pPage = static_cast<CContainerUI*>(builder.Create(_T("pageWrapper.xml"), (UINT)0));if(pPage) {this->Add(pPage);}else {this->RemoveAll();return;}}
};

例如这里的子页面资源配置文件:pageWrapper.xml,我们要显示的RichEdit就是在这个页面显示的。它里面也有一个Window节点,即使在该xml以及main.xml里的Window节点下都设置了滚动条的属性,最终都不能正确显示出来。
想到,滚动条既然是Window的属性,何不把让pageWrapper.xml继承main.xml里的属性呢?于是

extern CPaintManagerUI* g_PM;class CPageWrapperUI : public CContainerUI
{
public:CPageWrapperUI(){CDialogBuilder builder;CContainerUI* pPage = static_cast<CContainerUI*>(builder.Create(_T("pageWrapper.xml"), (UINT)0, 0, g_PM, 0));if(pPage) {this->Add(pPage);}else {this->RemoveAll();return;}}
};
    m_pm.Init(m_hWnd);g_PM = &m_pm;

我们在CPaintManagerUI初始化后保存其指针,然后在IDialogBuilderCallback中创建CPageWrapperUI的时候把该指针传递进去,编译运行大功告成!

duilib问题解决:滚动条不见了相关推荐

  1. 凯利公式自动计算表_滚动条不见了?公式不计算了?工作表标签不见了等等,我们怎么办?...

    大家有没有在使用EXCEL的过程中,尤其是由别人发过来的文件,有时候打开后就发现各种不适应,比如滚动条不见了,公式不运行了,计算精度出问题了,单元格的列号怎么不是字母了,怎么变成数字了.....,总之 ...

  2. duilib设置滚动条自动滚动到底

    控件属性中添加 vscrollbar="true" autovscroll="true" 分别是启用竖向滚动条,是否随输入竖向滚动

  3. mysql滚动条不见了,11-JS处理滚动条

    [TOC] 前言 selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了. 常见场景: 当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见 ...

  4. 如何改变iframe滚动条的样式?

    如何改变iframe滚动条的样式?web前端开发cssjavascriptiframehtmlRayLiao 2014年11月19日提问 · 2014年11月20日更新 关注4关注 收藏0 收藏,3. ...

  5. css iframe 滚动,如何改变iframe滚动条的样式?

    通过css或者javascript都可以,能兼容不同浏览器. 有什么方法吗? 用公子介绍的插件malihu-custom-scrollbar-plugin (function($){ $(window ...

  6. CSS隐藏滚动条,保留滚动功能

    CSS隐藏滚动条,保留滚动功能 原理:设置父级为溢出隐藏,而子级不进行溢出隐藏设置同时改变子级的宽度使进度条溢出到父级外面. 设置父级overflow:hidden;是为了使父级溢出隐藏.再设置子级的 ...

  7. jquery DataTables 固定列(fixedcolumns)不生效问题

    首先我的表格是再iframe 中加载的,我的iframe通过js时时检测宽高,并给宽高赋值. 问题描述:我使用表格加载静态数据,没有ajax请求,当进页面的时候表格的滚动条一直在闪动,并且我的列固定失 ...

  8. realplayer java,realplayer插件_realplayer插件_下载realplayer播放器

    input框在ie下消失 Angular_1362018-05-14 World文档中所有的表格边框突然没有了,怎么办? giselite86482011-11-17 解决虚拟机中Ubuntu的左边框 ...

  9. cad布局怎么用_CAD施工图:绘制CAD

    为什么别人用CAD画图的速度总比我们快,原来他们早就掌握了这些实用的CAD小技巧,抽空来学一学吧,总有用得到的时候. 1.问题:在模型空间里的虚线比例设置好了,并且能够显成虚线,但是到了布局空间却显示 ...

最新文章

  1. [na]出口选路pbr小实验视频
  2. 美国火星车失联的7分钟,高清视频传回来了
  3. 0112作业 字符串练习
  4. Larbin 安装遇到的问题(fedora)
  5. python 安装包时出现红字_Python从入门到就业-1.1节:安装Python
  6. 如何使用facenet详解_如何使用冰箱更节能 使用冰箱节能技巧介绍【详解】
  7. react学习(73)--子组件this
  8. 从零开始学习PYTHON3讲义(二)把Python当做计算器
  9. 面试中几个基本的重要问题总结
  10. HighCharts/Highstock使用小结,使用汉化及中文帮助文档
  11. Android保存之SharedPreferences
  12. 欠拟合和过拟合的一般解决方法
  13. 【实验】简单实时300点采样逻辑
  14. python3 性能提升_5个提升Python性能的项目
  15. IDEA失去焦点,取消自动编译【已解决】
  16. 传感器模块(光敏电阻/热敏电阻/红外接收管等)介绍及使用
  17. 只有程序员才能读懂的三国演义(一)
  18. openpyxl:写入Excel工作表
  19. matlab坐标值旋转平移
  20. Hook函数三步走(SetWindowsHookEx、UnhookWindowsHookEx、CallNextHookEx)

热门文章

  1. 提高记忆力的唯一方法是进行记忆力训练(转载)
  2. Java基础之泛型反射
  3. 分享几个实用性爆棚的网站,快放进收藏夹里吃灰吧!(三)
  4. 检测网站速度和安全性的方法
  5. 常见微型计算机文件系统,微型计算机(PC机)的文件系统采用( )结构。
  6. 我国DTMB正式成为全球第四个数字电视国际标准
  7. Google Drive无限容量+网页网站式目录索引网盘
  8. 企业在部署物联网之前,必须要了解的几个问题
  9. 【数学】n次方差公式及证明方法
  10. 英语教师计算机研修总结报告,英语教师研修总结范文(精选7篇)