MFC可编辑组合框自行选择文本。我不想要这个

MFC可编辑组合框自行选择文本。我不想要这个,mfc,combobox,Mfc,Combobox,我在我的一个沙盒MFC应用程序中对此进行了测试,并确认了这一结果 如果在可编辑组合框中选择了某个项目,则组合框下次收到WindowsPosChange消息时,将发送一条选择文本windows消息,该消息将选择所有文本 在可编辑的组合框中从编辑中获取和选择窗口文本是不可靠的,因此我们改为添加一个项目并选择它来更改组合框的文本,这与用户选择项目的方式相同。下次移动时重新计算所有内容时,SetWindowPos会选择编辑文本 重写WindowPosChanged消息会产生奇怪的结果,因为combobo

我在我的一个沙盒MFC应用程序中对此进行了测试,并确认了这一结果

如果在可编辑组合框中选择了某个项目,则组合框下次收到WindowsPosChange消息时,将发送一条选择文本windows消息,该消息将选择所有文本

在可编辑的组合框中从编辑中获取和选择窗口文本是不可靠的,因此我们改为添加一个项目并选择它来更改组合框的文本,这与用户选择项目的方式相同。下次移动时重新计算所有内容时,SetWindowPos会选择编辑文本

重写WindowPosChanged消息会产生奇怪的结果,因为combobox实际上忽略了设置其高度。它对height值所做的是减去它根据字体大小计算出的高度,并将余数用作下拉列表框的高度。我无法理解为什么没有设置下拉高度的方法

所以我唯一能想到的就是有一个成员标志覆盖seltext消息,如果设置了该标志则什么也不做,但这是一个可怕的解决方案


有没有关于如何防止文本选择的建议?

这很容易做到。您需要对组合框拥有的编辑框进行子类化,而不是组合框本身。正如Mark所说,您可以通过调用GetComboxInfo并使用HwnItem字段来实现这一点。然后你可以截取EM_setel。

你到底想要什么?你想子类化combobox?我已经尝试子类化combobox。不起作用。我无法截获发送的setsel消息。这只发生在我收到setwindowpos消息之后。没有关于发生这种情况的方式或原因的文档。可能是一个屏幕截图可以帮助我们帮助您选择所有文本有什么问题?这就是它的工作方式,而无视微软的计划通常会带来更多的麻烦。也就是说,请查看GetComboxInfo以获取编辑控件的HWND。@标记Ransom即可,但只要在移动窗口时选择文本即可。只有当用户做的最后一件事是从下拉列表中选择一个项目时。更糟糕的是,它对每个组合框的编辑都这样做,包括那些没有焦点的编辑。你有没有看到一个编辑突然在你几个小时内触摸过的背景窗口中选择了文本。这是可取的吗?