CMFCPropertyGridProperty 和 CEdit 文本自动选择
Posted
技术标签:
【中文标题】CMFCPropertyGridProperty 和 CEdit 文本自动选择【英文标题】:CMFCPropertyGridProperty and CEdit text auto select 【发布时间】:2012-01-12 08:15:51 【问题描述】:我读过的here (当用户选择一个编辑控件时,....并使用反向视频突出显示其文本)如果我理解正确,CEdit 应该突出显示(我希望它与选择相同) 文本,当我点击它时。
我将 CMFCPropertyGridCtrl 与 CMFCPropertyGridProperty 一起使用。但是当我点击网格(一个属性值)时,它没有选择任何东西。
我发现:属性在内部创建 CEdit,用于手动编辑属性值。它被创建,它的字体被设置等等。然后 SetFocus 被调用,在 UpdateWindow 之后 - 这将重绘编辑框并将光标设置在第一个字符之前。在此之后,再次触发鼠标单击以单击编辑框 - 这似乎是正确的。但是没有选择文本。
我还尝试创建自己的属性类,它派生自 CMFCPropertyGridProperty。在这一切之后,我已经调用了 SetSel。它确实选择了我的文本,但随后它只是取消选择它(在下一次重绘中)。我还实现的是,在重绘之后,只选择了从开始到鼠标单击的文本(当我在第 4 个字符之后单击时,只选择了前 4 个字符)。
我的问题:
CEdit 真的应该在第一次鼠标点击后自动选择文本吗? (你有一些资源吗?)
你不知道,为什么这在 CMFCPropertyGridProperty 中不起作用?
CMFCPropertyGridCtrl 和 CMFCPropertyGridProperty 可以在 mfc 源代码目录的 afxpropertygridctrl.h/.cpp 中找到。
【问题讨论】:
【参考方案1】:所以我终于发现了:
CEdit 在单击文本后可能不会选择文本。这必须通过例如 SetSel 函数手动完成。
但是在 CMFCPropertyGridCtrl 中,如果单击,它会传递给 CMFCPropertyGridProperty,并且会重复单击。因此,如果我使用 SetSel,它会取消选择文本。所以我不得不编写自己的类来继承 CMFCPropertyGridProperty 并跳过这一步(再次单击)。 SetFocus 和 SetSel 就足够了(这也将光标设置到 CEdit 窗口)。
【讨论】:
以上是关于CMFCPropertyGridProperty 和 CEdit 文本自动选择的主要内容,如果未能解决你的问题,请参考以下文章
CMFCPropertyGridProperty 和 CEdit 文本自动选择
与默认构造函数有关,CMFCPropertyGridProperty的派生类构造函数怎么写
CMFCPropertyGridProperty怎么删除子项
与默认构造函数有关,CMFCPropertyGridProperty的派生类构造函数怎么写