2011-07-25 179 views
1

我在我的一个沙箱MFC应用程序中测试了这个,并确认了这个结果。MFC可编辑组合框自行选择文本。不想这

如果在可编辑的组合框中选择了某个项目,下次组合框收到windowspostnging消息时,它会发出一个选择文本窗口消息来选择所有文本。

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

覆盖WindowPosChanging消息有奇怪的结果,因为组合框实际上忽略了设置它的高度。它对高度值的作用是减去它计算高度应该(根据字体大小),并使用余下的下拉列表框的高度。为什么没有设置下拉高度的方法超出了我的想象。

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

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

+0

你究竟想要什么?你想要一个组合框的子类? – Ajay

+0

我已经尝试了继承组合框。不起作用。我无法拦截发送的setsel消息。它发生在我收到setwindowpos消息后。没有关于如何或为何发生这种情况的文件 –

+0

可能是一个屏幕快照可能会帮助我们来帮助您 – Ajay

回答

0

这很容易做到。您需要继承组合框所拥有的编辑框,而不是组合框本身。正如Mark所说的,你可以通过调用GetComboBoxInfo并使用hwndItem字段来获得此信息。然后你可以拦截EM_SETSEL。