【问题标题】:Child window (CEdit) losing focus子窗口(CEdit)失去焦点
【发布时间】:2014-02-18 07:33:48
【问题描述】:

我正在使用 MFC 文档/视图架构在 C++ 中编程。我一直在尝试实现类似于MFC CEdit lose focus handler 的东西。我按照答案提示处理了消息 EN_KILLFOCUS。

基本上,我正在这样做:我在视图中绘制了文本。当用户单击视图中的文本区域时,我将 CEdit 窗口定位并显示在其顶部,以便用户能够编辑文本。当编辑失去焦点时,我得到 CEdit 文本并将其保存在文档中。然后使视图无效。

但是,当视图失去焦点时,我似乎只收到 EN_KILLFOCUS 消息。我必须点击其他地方,例如停靠窗口或工具栏,使 CEdit 失去焦点。我希望当我在 CEdit 框之外单击视图上的任何其他位置时发生这种情况。

我正在创建具有 WS_CHILD 样式的 CEdit。我尝试了 WS_POPUP 但仍然是同样的问题。

任何帮助将不胜感激。

【问题讨论】:

    标签: c++ windows mfc cedit


    【解决方案1】:

    创建一个 CEdit 派生类/控件。并在您的视图中创建此类的实例

    处理派生类中的 EN_KILLFOCUS。一旦用户在编辑控制窗口外单击,您将能够处理此消息。
    将您的编辑框保留为 WS_CHILD。

    在视图的鼠标按下时将焦点设置为视图,在视图的 LButtonDown 上调用 SerFocus()。

    【讨论】:

    • 嗯...我试过了。但这似乎不起作用。如果整个视图失去焦点,我仍然只会收到消息。
    • 嗯..您是否在视图的鼠标按下时将焦点设置为视图?如果没有,请在视图的 LButtonDown 上调用 SerFocus() ..
    • 谢谢!那成功了。但是,我发现对 CEdit 进行子类化已经没有意义了。我可以在父窗口 OnCommand 中处理 EN_KILLFOCUS
    • 你能改变你的答案来反映这一点吗?我会给你接受作为答案并投票。
    猜你喜欢
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多