Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何从“CEdit”框中获取通知?_Windows_Mfc_Desktop Application - Fatal编程技术网

Windows 如何从“CEdit”框中获取通知?

Windows 如何从“CEdit”框中获取通知?,windows,mfc,desktop-application,Windows,Mfc,Desktop Application,我有一个CEdit框,用户可以在其中输入相关信息。他/她一开始在框中写字,我就需要一个通知,以便调用doSomething()执行其他任务。Windows是否提供回调?如果是,我如何使用它?如果双击资源编辑器中的编辑框,它会自动为您创建OnChanged事件 MFC本身没有回调,而是通过实现相应事件的处理程序来实现。您需要处理两个事件之一:WM\u CHAR或EN\u CHANGE 处理对话框的EN_更改,例如,在对话框的其他位置实时复制输入的文本。您需要首先在对话框的消息映射中添加一个条目,然

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

如果双击资源编辑器中的编辑框,它会自动为您创建OnChanged事件

MFC本身没有回调,而是通过实现相应事件的处理程序来实现。您需要处理两个事件之一:
WM\u CHAR
EN\u CHANGE

处理对话框的
EN_更改
,例如,在对话框的其他位置实时复制输入的文本。您需要首先在对话框的消息映射中添加一个条目,然后重写相应的处理程序:

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
    }
或者,处理editbox类的
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);
    }
BEGIN\u MESSAGE\u MAP(CCtrlEdit,CEdit)
关于_WM_CHAR()
结束消息映射()
void CCtrlEdit::OnChar(UINT nChar、UINT nrepct、UINT nFlags)
{
//如果未输入数字字符,则不执行任何操作,否则将传递到基本CEdit类

如果((nChar>='0'&&nChar以下假设您有一个MFC对话框应用程序

通过右键单击可以启动类向导:

双击新编辑控件的控件ID(有一个带绿色小加号的图标),将相应的成员变量添加到类中

类和事件向导将更新类定义并添加
CEdit
成员:

afx_msg void OnEnChangeEdit1();//由事件向导添加
CEdit m_edit1;//由类向导添加的成员
类向导将更新函数:

void CMFCApplication5Dlg::DoDataExchange(CDATA Exchange*pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_控件(pDX、IDC_EDIT1、m_EDIT1);//使用类向导添加新变量
}
双击控件或右键单击并选择添加事件向导将更新消息映射并创建函数声明和定义:

BEGIN\u MESSAGE\u MAP(CMFCApplication5Dlg、CDialogEx)
关于\u WM\u SYSCOMMAND()
关于油漆
关于_WM_QUERYDRAGICON()
ON_EN_CHANGE(IDC_EDIT1和CMFCApplication5Dlg::OnEnChangeEdit1)//使用向导添加了新的事件处理程序
结束消息映射()
最后,可以更新代码以与编辑控件交互:

void CMFCApplication5Dlg::OnEnChangeEdit1()
{
//TODO:在此处添加控件通知处理程序代码
CString文本;
m_edit1.GetWindowText(文本);
//m_edit1.SetWindowText(文本);
}

WM_CHAR不够,因为您可以粘贴到控件中。