我在我的一个沙箱MFC应用程序中对此进行了测试并确认了此结果。
如果在可编辑的组合框中选择了一个项目,则下次组合框接收到一个窗口转换消息时,它会发出一个选择所有文本的选择文本窗口消息。
在可编辑的组合框中从编辑中获取和选择窗口文本是不可靠的,因此我们改为添加项目并选择它来更改组合框的文本,其反应方式与用户选择项目的方式相同。下次在移动时重新计算所有内容时,SetWindowPos会导致选择编辑文本。
覆盖WindowPosChanging消息有奇怪的结果,因为组合框实际上忽略了设置它的高度。它对高度值的作用是减去计算其高度应该是什么(基于字体大小),并使用余数作为下拉列表框的高度。为什么没有设置下拉高度的方法超出了我的范围。
所以我唯一能想到的是有一个成员标志来覆盖seltext消息,如果设置了标志就什么都不做,但这是一个可怕的解决方案。
有关如何阻止文本选择的任何建议吗?
答案 0 :(得分:0)
这很容易做到。您需要子类化组合框所拥有的编辑框,而不是组合框本身。正如Mark所说,您可以通过调用GetComboBoxInfo并使用hwndItem字段来实现此目的。然后你可以拦截EM_SETSEL。