为什么UpdateData()在MFC CEdit控件的EN_CHANGE处理程序中不起作用

时间:2017-02-08 21:30:45

标签: c++ mfc

这似乎是最简单的事情(使用Visual Studio):

  • 在对话框
  • 上放置编辑控件(MFC CEdit
  • 右键单击并选择“添加变量...”
  • 将控件链接到变量(例如CString someText)
  • 再次右键单击控件并选择“添加事件处理程序...”
  • 点击“添加并修改”按钮,以便添加EN_CHANGE事件处理程序
  • 类向导生成一个像OnEnChangeEdtSomeText()
  • 这样的处理函数

太棒了 - 每次键入一个字符时,都会调用处理函数。但是,在我使用MFC控件处理的所有其他事件上,UpdateData()将在控件和链接到它的变量之间交换数据 - 控件的状态反映在{{1之后的链接变量的状态中}} 叫做。为什么不在这里?显然我必须使用其他东西,到目前为止,UpdateData()似乎可以正常工作,以便检索我在GetWindowText()控件中看到的文字。

但是为什么CEdit的正常功能被破坏了?例如,如果我在我的编辑控件中键入“foo”,然后单击或标签离开以终止焦点,然后返回键入“bar”,在UpdateData()(所有6个)的调用中都没有{ {1}}导致链接到它的变量中的任何数据。为什么不?我可以相信OnEnChangeEdtSomeText()不干涉其他数据输入吗?还有其他通知可以打破我所认为的控件和通过UpdateData()机制链接的变量之间的正常链接吗?

1 个答案:

答案 0 :(得分:0)

如果它是一个丰富的编辑,您需要在其上调用SetEventMask(ENM_CHANGE),否则邮件将不会在版本上发送。