实际开发过程中,发现只是将鼠标光标放在Combox上时,滚动鼠标,Combox内显示的值会随鼠标的滚动不断变化,很显然这是不我们想要的效果。查看Duilib中UICombo控件源码,发现鼠标滚轮响应事件代码如下:
if( event.Type == UIEVENT_SCROLLWHEEL )
{
bool bDownward = LOWORD(event.wParam) == SB_LINEDOWN;
SelectItem(FindSelectable(m_iCurSel + (bDownward ? 1 : -1), bDownward));
return;
}
我们实际想要的效果应该是鼠标点击Combox下拉框,再滚动鼠标时,Combox值可以变动。在源码中,发现成员变量m_pWindow就是用来表示下拉框的指针,那么只要m_pWindow不为空,即下拉框窗口存在时,再响应原有的鼠标滚动事件即可。更改后的代码如下:
if( event.Type == UIEVENT_SCROLLWHEEL )
{
if (m_pWindow)
{
bool bDownward = LOWORD(event.wParam) == SB_LINEDOWN;
SelectItem(FindSelectable(m_iCurSel + (bDownward ? 1 : -1), bDownward));
}
return;
}