0

我在这里读到的内容(当用户选择一个编辑控件时,....并使用反向视频突出显示其文本),如果我理解正确,CEdit 应该突出显示(我希望它与选择相同)我单击时的文本在上面。

我将 CMFCPropertyGridCtrl 与 CMFCPropertyGridProperty 一起使用。但是当我点击网格(一个属性值)时,它没有选择任何东西。

我发现:属性在内部创建 CEdit,用于手动编辑属性值。它已创建,其字体已设置等。然后调用 SetFocus 并在 UpdateWindow 之后 - 这将重绘编辑框并将光标设置在第一个字符之前。在此之后,再次触发鼠标单击以单击编辑框 - 这似乎是正确的。但是没有选择文本。

我还尝试创建自己的属性类,它派生自 CMFCPropertyGridProperty。在这一切之后,我已经调用了 SetSel。它确实选择了我的文本,但随后它只是取消选择它(在下一次重绘中)。我还实现的是,在重绘之后,只选择了从开始到鼠标单击的文本(当我在第 4 个字符之后单击时,只选择了前 4 个字符)。

我的问题:

CEdit真的应该在第一次鼠标点击后自动选择文本吗?(你有一些资源吗?)

你不知道,为什么这在 CMFCPropertyGridProperty 中不起作用?

CMFCPropertyGridCtrl 和 CMFCPropertyGridProperty 可以在 mfc 源代码目录的 afxpropertygridctrl.h/.cpp 中找到。

4

1 回答 1

0

所以我终于发现了:

单击文本后,CEdit 可能不会选择文本。这必须通过例如 SetSel 函数手动完成。

但是在 CMFCPropertyGridCtrl 中,如果单击,它会传递给 CMFCPropertyGridProperty,并且会重复单击。因此,如果我使用 SetSel,它会取消选择文本。所以我不得不编写自己的类来继承 CMFCPropertyGridProperty 并跳过这一步(再次单击)。SetFocus 和 SetSel 就足够了(它也将光标设置为 CEdit 窗口)。

于 2012-01-13T09:15:57.333 回答