duilib 修复combo控件打开下拉菜单后不会自动定位到上次选择的位置上的bug

简介: 转载请说明原出处,谢谢:http://blog.csdn.net/zhuhongshu/article/details/43484589                 今天群里一个网友向我反应combo控件的一个bug:单击combo控件,展开下拉菜单后,不会自动定位到上次选择的位置,而是定位到最开头的位置。

转载请说明原出处,谢谢:http://blog.csdn.net/zhuhongshu/article/details/43484589

       

        今天群里一个网友向我反应combo控件的一个bug:单击combo控件,展开下拉菜单后,不会自动定位到上次选择的位置,而是定位到最开头的位置。


       带有bug的效果图:                                                               修复后的效果图:


                                                                                   


       其实combo控件的下拉菜单是一个窗体,类名为CComboWnd,在他的初始化函数Init中已经得到了上次选择的项目的索引并保存到m_iOldSel变量中。所以只要使用这个变量,来初始化CComboWnd窗体的滚动条的位置就可以了。CComboWnd类中已经有了重定位函数EnsureVisible,所以在合适的时候调用这个函数就可以了。


      EnsureVisible函数需要得到上次选择项的控件的位置来初始化滚动条,而所有控件的初始化后会发送windowinit消息。所以需要做的解释给CComboWnd类继承INotifyUI接口,并且将CComboWnd添加到通知队列里,最后在windowinit消息里调用EnsureVisible函数就可以了。


修复步骤:

      

      1、给CComboWnd类继承INotifyUI接口

      2、为CComboWnd类添加 void Notify(TNotifyUI& msg) ; 成员函数

      3、在WM_CREATE消息里,把CComboWnd添加到消息队列:


m_pm.AddNotifier(this);


      4、在Notify函数添加如下代码:


void CComboWnd::Notify(TNotifyUI& msg)
{
	if (msg.sType == _T("windowinit"))
	{
		EnsureVisible(m_iOldSel);
	}
}


总结:

       

        修复后的代码已经更新到我的库里:点击打开链接


Redrain 2015.2.4


目录
相关文章
|
2月前
|
IDE 开发工具
Poco脚本的点击位置与点击偏移
Poco脚本的点击位置与点击偏移
|
5月前
|
前端开发
element-ui图标偶现乱码问题的原因和修复方法
之前很老的一个 webpack3 前端项目,用 vue-cli5 重构了一下,根据 vue-cli 文档安装的 sass 版本 ^1.32.7,sass-loader 版本 ^12.0.0,各种自测感觉没问题了就部署到线上了
92 0
|
7月前
|
Windows
排错实战——你知道拖动窗口时只显示虚框怎么设置吗?
你知道拖动窗口时只显示虚框怎么设置吗?
LabVIEW显示控件中内容过长设置自动滚动条
本篇博文分享程序设计时一个细节小技巧,在LabVIEW显示控件中内容过长设置自动滚动条。
PS的标题栏以选项卡方式打开名字太长,导致切换标题的时候不方便,如何缩短标题栏?
Q:如图:PS的标题栏以选项卡方式打开名字太长,导致切换标题的时候不方便,如何缩短标题栏?
346 0
PS的标题栏以选项卡方式打开名字太长,导致切换标题的时候不方便,如何缩短标题栏?
QT应用编程: QSlider设置滚动块定位到鼠标点击的地方
QT应用编程: QSlider设置滚动块定位到鼠标点击的地方
451 0
QT应用编程: QSlider设置滚动块定位到鼠标点击的地方
SVN替换图标后依然显示老图标的BUG
SVN替换图标后依然显示老图标的BUG
100 0
SVN替换图标后依然显示老图标的BUG