作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个CEdit
框,用户可以在其中输入相关信息。一旦他/她开始在框中书写,我就需要一个通知,以便我可以调用 doSomething()
来执行其他任务。 Windows 是否提供回调,如果提供,我该如何使用它?
最佳答案
在 MFC 中没有这样的回调,而是通过为适当的事件实现一个处理程序来实现。您需要处理以下两个事件之一:WM_CHAR
或 EN_CHANGE
处理对话框的EN_CHANGE
,例如实时复制对话框其他地方输入的文本。您需要首先在对话框的消息映射中添加一个条目,然后覆盖相应的处理程序:
BEGIN_MESSAGE_MAP(CstackmfcDlg, CDialog)
ON_EN_CHANGE(IDC_EDIT1, &CstackmfcDlg::OnEnChangeEdit1)
END_MESSAGE_MAP()
void CstackmfcDlg::OnEnChangeEdit1()
{
CString text;
m_edit.GetWindowText(text);
m_label.SetWindowText(text); // update a label control to match typed text
}
或者,处理编辑框类的 WM_CHAR
,例如防止某些字符的输入,例如忽略数字输入中除数字以外的任何内容。从 CEdit 派生一个类,处理该类(不是对话框)的 WM_CHAR
事件,并使您的编辑控件成为该类的一个实例。
BEGIN_MESSAGE_MAP(CCtrlEdit, CEdit)
ON_WM_CHAR()
END_MESSAGE_MAP()
void CCtrlEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// Do nothing if not numeric chars entered, otherwise pass to base CEdit class
if ((nChar >= '0' && nChar <= '9') || VK_BACK == nChar)
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
请注意,您可以使用 VS IDE 通过使用属性栏和消息映射 block 中的鼠标选择来放入处理程序覆盖的 stub 。
编辑: 添加了示例代码,并更正了我错了的 WM_CHAR
的解释。
关于windows - 如何从 `CEdit` 框获取通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11062217/
我是一名优秀的程序员,十分优秀!