duilib combo控件,当鼠标滚动时下拉列表自动关闭的bug的修复

时间:2022-05-06 06:41:14

转载请说明出处,谢谢~~

群里有朋友提到了使用Combo控件时,当下拉列表出现,此时鼠标滚轮滚动,下拉列表就自动消失了。我看了一下源码,这个bug的修复很简单。

CComboUI控件被单击时创建CComboWnd窗体来模拟下拉菜单。CComboWnd类在HandleMessage函数里处理了鼠标滚动消息WM_MOUSEWHEEL,他把这个消息转发给CComboUI的DoEvent函数去处理,而CComboUI的DoEvent函数处理对应的UIEVENT_SCROLLWHEEL消息,又转而调用了SelectItem函数,SelectItem函数的第一句代码如下:

<pre name="code" class="cpp">bool CComboUI::SelectItem(int iIndex, bool bTakeFocus)
{
if( m_pWindow != NULL ) m_pWindow->Close();
if( iIndex == m_iCurSel ) return true;
//省略其余代码

如果发现下来菜单存在,就关闭他。所以这里注释掉这一局代码就OK了,仅此而已。

我把我自己使用的Duilib和Uilib库都上传到了GitHub,完整的Duilib库代码下载地址:点击打开链接

这是我自己使用的Duilib和Uilib库,修复了我在博客中说明的所有bug以及很多还没有去说明的bug,同样也包含别人修复过的bug。库里面包含我扩展过的部分控件。以及添加了Duilib扩展群群主heat的透明异形窗体功能的支持。

     这个库是我用vs2010修改的。如果你无法正常打开我的库或者编译有问题,那么建议把你需要的.h或者.cpp文件替换你自己的duilib库对应的文件。

     我修改过的代码,一般可以通过搜索“redrain”找到对应的位置和修改时间

     此库是我个人使用,由于我水平所限,所以不保证我修改的代码的质量。请你看过代码后再决定是否使用。使用这个库出现问题,不承担任何责任。

  Redrain  2014.10.30