实战经验:禁止CComboBox自动部分匹配

实战经验:禁止CComboBox自动部分匹配

作者:BlogUpdater |  时间:2018-09-23 |  浏览:2122 |  评论已关闭 条评论

当我们使用下拉框控件CComboBox时,如果输入的文本内容和下拉框中的项相匹配(只要前几个字符匹配就会触发),则控件会自动匹配到这一项并自动补全。
如果想禁用此特性,可以这样做:
1) 获取下拉列表窗口的句柄

COMBOBOXINFO stCbInfo;
GetComboBoxInfo(hComboBox, &stCbInfo);
HWND hListBox = stCbInfo.hwndList;

2) 使用我们自己定义的窗口过程替换掉下拉列表窗口原来的版本

WNDPROC pOldWndProc = (WNDPROC)SetWindowLongPtr(hListBox, GWL_WNDPROC, MyListBoxProc);

3) 实现自定义窗口过程

LRESULT MyListProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
  if (msg == LB_FINDSTRING)
  {
    msg = LB_FINDSTRINGEXACT;
  }

  return CallWindowProc(originalListProc, hWnd, msg, wParam, lParam);
}

这里通过将收到的LB_FINDSTRING消息替换为LB_FINDSTRINGEXACT,实现了禁用列表控件的部分匹配特性。

标签:

评论已关闭。