开发者社区> redrain.> 正文

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


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
duilib combo控件,当鼠标滚动时下拉列表自动关闭的bug的修复
转载请说明出处,谢谢~~       群里有朋友提到了使用Combo控件时,当下拉列表出现,此时鼠标滚轮滚动,下拉列表就自动消失了。我看了一下源码,这个bug的修复很简单。
1279 0
duilib List控件,横向滚动时列表项不移动或者显示错位的bug的修复
转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42264673         关于这个bug的修复我之前写过一篇博客,连接为:http://blog.csdn.net/zhuhongshu/article/details/40622705         本以为已经修复好,但是后来有网友私聊我,反映到还存在bug。
1196 0
修复duilib CEditUI控件和CWebBrowserUI控件中按Tab键无法切换焦点的bug
转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/41556615         在duilib中,按tab键会让焦点在Button一类的控件中切换,但是切换焦点一直存在bug,具体的描述如下:         1、在主窗体里弹出新的窗体,当新窗体中存在CEditUI控件并且焦点在此CEditUI控件上,那么按tab键将无法切换焦点而一直处于CEditUI中。
1109 0
duilib List控件,横向滚动时列表项不移动或者移动错位的bug的修复
转载请说明出处,谢谢~~       这篇博客已经作废,只是留作记录,新的bug修复博客地址:http://blog.csdn.net/zhuhongshu/article/details/42264673       之前就在群里挺群友朋友说道,使用List控件,里面加入ListContainElementUI元素,当List出现横向滚动条时,滚动条滑动后元素不跟着滑动或者滑动后位置不正确。
1072 0
QT应用编程: QSlider设置滚动块定位到鼠标点击的地方
QT应用编程: QSlider设置滚动块定位到鼠标点击的地方
212 0
duilib 修复CTreeViewUI控件动态添加子控件时,对是否显示判断不足的bug
转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42264947         这个bug我在仿酷狗开发日志里提到过,不过后来发现修复的不够好,后来重新修改了代码,并记录到博客。
1267 0
PS的标题栏以选项卡方式打开名字太长,导致切换标题的时候不方便,如何缩短标题栏?
Q:如图:PS的标题栏以选项卡方式打开名字太长,导致切换标题的时候不方便,如何缩短标题栏?
98 0
+关注
redrain.
世上最可怕的事情就是比你优秀的人同时比你更努力!
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载