MFC阻止关闭下拉列表

时间:2018-01-24 08:57:03

标签: winapi mfc

我创建了一个具有自定义列表框的自定义组合框。使用以下代码替换组合框的默认列表框:

m_comboBoxInfo.cbSize = sizeof(COMBOBOXINFO);
if (::GetComboBoxInfo(m_hWnd, &m_comboBoxInfo)){
    m_ListBox.SubclassWindow(m_comboBoxInfo.hwndList);
}

我希望始终显示组合框的新下拉列表,即使它失去焦点或用户点击其他控件也是如此。 我试图在WindProc()函数中捕获WM_CAPTURECHANGED和WM_KILLFOCUS,什么都不做。

LRESULT CCustomListBox::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
    if (message == WM_CAPTURECHANGED ||
        message == WM_KILLFOCUS){
        return TRUE;
    }
    return CCustomListbox::WindowProc(message, wParam, lParam);
}

然而,它不起作用。你可以告诉我如何在它失去焦点时阻止关闭下拉列表框。

My combobox looks like this.

1 个答案:

答案 0 :(得分:2)

  

我希望始终显示组合框的新下拉列表,即使它失去焦点或用户点击其他控件。

     

我想制作一个组合框,当用户点击组合框按钮时,它的下拉列表会关闭。

根据这些要求,我将完全摆脱组合框,而只是组合编辑控件按钮列表框。您可以完全控制所有内容,而无需与标准组合框逻辑作斗争。即使你现在正在“黑客”工作,它很可能在未来的Windows版本中破解。

按下按钮时,只需切换列表框的显示状态即可。对列表框的选择更改事件做出反应,以更新编辑控件中的文本。

我会将这些控件分组到父控件中,该控件至少设置了WS_CHILD|WS_TABSTOPWS_EX_CONTROLPARENT窗口样式。后者对于启用键盘导航进出子控件非常重要,就好像父控件不存在一样。 “组”控件还将封装来自按钮和列表控件的通知(因为这些是不适用于组控件的父级的实现细节)。

您甚至可以通过向“组”控件的父级发送WM_COMMAND消息来模拟常规组合框的通知消息。

相关问题