首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使下拉类型的组合框表现为编辑控件

使下拉类型的组合框表现为编辑控件
EN

Stack Overflow用户
提问于 2020-02-25 07:31:41
回答 1查看 220关注 0票数 0

我即将用下拉类型组合框替换标准的编辑控件。基本上,这个组合框就像编辑控件一样。

到目前为止,一切都很好,但有一个显著的区别:

  • 当您单击包含某些文本的编辑控件而该控件没有焦点时,光标只位于您单击.
  • 的位置,但是当您单击包含某些文本的组合框且没有焦点时,将选择整个文本。

这描述了单击组合框或编辑控件时所发生的情况,在这些控件中,红色箭头指向的位置都没有焦点:

是否有办法使组合框的行为像编辑控件?

EN

回答 1

Stack Overflow用户

发布于 2020-03-19 06:41:50

防止选择整个文本的解决方案之一是通过子类a组合框并在鼠标第一次单击鼠标左键时将焦点设置到它的编辑控件上。守则如下:

子类过程:

代码语言:javascript
复制
LRESULT CALLBACK EditSubClassProc(HWND hWnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam,
    UINT_PTR uIdSubclass,
    DWORD_PTR dwRefData
    )
{
    switch (uMsg)
    {
    case WM_DESTROY:
    {
        RemoveWindowSubclass(hWnd, EditSubClassProc, 0);
        return DefSubclassProc(hWnd, uMsg, wParam, lParam);
    }
    case WM_LBUTTONDOWN:
    {
        if (GetFocus() != hWnd)
        {
            SetFocus(hWnd);
        }
        return DefSubclassProc(hWnd, uMsg, wParam, lParam);
    }
    default:
        return DefSubclassProc(hWnd, uMsg, wParam, lParam);
    }
}

找到组合框的编辑控件窗口并安装子类回调:

代码语言:javascript
复制
   //  Get the edit window handle to combo box. 
   HWND comboEditHdl = NULL;
   COMBOBOXINFO info = { 0 };
   info.cbSize = sizeof(COMBOBOXINFO);

   if (!GetComboBoxInfo(hwndCombo1, &info))
       return 0;

   comboEditHdl = info.hwndItem;

   if (comboEditHdl)
   {
       SetWindowSubclass(comboEditHdl, EditSubClassProc, 0, NULL);
   }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60389510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档