windows - 如何从 `CEdit` 框获取通知?

标签 windows mfc desktop-application

我有一个CEdit 框,用户可以在其中输入相关信息。一旦他/她开始在框中书写,我就需要一个通知,以便我可以调用 doSomething() 来执行其他任务。 Windows 是否提供回调,如果提供,我该如何使用它?

最佳答案

在 MFC 中没有这样的回调,而是通过为适当的事件实现一个处理程序来实现。您需要处理以下两个事件之一:WM_CHAREN_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/

相关文章:

c++ - 当另一个窗口关闭时关闭无模式对话框

desktop-application - 桌面 Web 应用程序中的丰富 HTML 托盘菜单

java - 自毁应用

c# - INSERT 语句的外键冲突

mysql - 升级后Mariadb指向旧版本

C++:Windows 10 x64 和 Windows 7 x64 上的 MFC 应用程序

C++ 函数调用路由解析器

c++ - 如何在MFC中分离一个CString

python - 我无法安装 Flask-Spyne,安装过程中出现 TypeError

c++ - Windows 多显示器位置