您的位置:首页 > 产品设计 > UI/UE

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

2017-09-14 10:26 337 查看
今天群里一个网友向我反应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添加到消息队列:

[cpp] view
plain copy

m_pm.AddNotifier(this);  

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

[cpp] view
plain copy

void CComboWnd::Notify(TNotifyUI& msg)  

{  

    if (msg.sType == _T("windowinit"))  

    {  

        EnsureVisible(m_iOldSel);  

    }  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐