2014-02-18 236 views
1

我使用MFC文档/视图体系结构在C++中进行编程。我一直在努力实现类似MFC CEdit lose focus handler的东西。正如答案所示,我处理了消息EN_KILLFOCUS。子窗口(CEdit)失去焦点

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

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

我正在用WS_CHILD样式创建CEdit。我试过WS_POPUP,但仍然是同样的问题。

任何帮助,将不胜感激。

回答

1

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

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

设置焦点以查看视图的鼠标向下,在视图的LButtonDown上调用SerFocus()。

+0

嗯......我试过了。但它似乎并不奏效。如果整个观点失去了重点,我仍然只会收到消息。 – l3utterfly

+0

嗯..你是否把注意力集中在视图的鼠标上?如果没有,请在视图的LButtonDown上调用SerFocus().. –

+0

谢谢!那就是诀窍。但是,我发现,CEdit的子类化已经没有意义了。我可以在父窗口OnCommand中处理EN_KILLFOCUS – l3utterfly