MFC编辑框:回车得到输入的数据.
发布网友
发布时间:2022-04-26 20:28
我来回答
共5个回答
热心网友
时间:2023-10-29 15:31
重载OnOK函数。当在对话框上按回车时,会自动调用OnOK函数。在这个函数内部判断当前焦点控件是不是指定的输入框控件,若是,则调用GetDlgItem获取其内输入的数据。
void CTestDlg::OnOK()
{
// TODO: Add extra validation here
CWnd * pwnd = GetFocus(); /*获得当前焦点窗口指针*/
if ( pwnd == GetDlgItem(IDC_EDIT1) )/*看焦点是不是在指定编辑框上*/
{
UpdateData(TRUE); /*若是,则更新所有数据。*/
CString strEdit1; /*用来保存输入数据的变量。当然可以不要它,而使用对应成员变量来保存数据*/
GetDlgItemText(IDC_EDIT1, strEdit1);/*当然,也可以在这里手动更新成员变量,而其他成员变量的值不变*/
((CEdit *)pwnd)->SetSel(0,-1);/*选中编辑框中所有文字,可选*/
//MessageBox(strEdit1); /*显示输入的信息*/
}
/*若要对其他编辑框进行处理,再模仿上面的if块添加代码即可*/
//CDialog::OnOK(); /*默认的OnOK函数,不再需要*/
}
热心网友
时间:2023-10-29 15:31
PreTranslateMessage
重写对话框的PreTranslateMessage函数,在里面判断是否俺了回车键,如果是的话再判断焦点是不是在编辑框里面,可以用GetFocus 这个函数判断焦点是否在那个编辑框里面
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
if (WM_KEYDOWN == pMsg-> message && 13 == pMsg-> wParam)
{
if ( GetDlgItem(IDC_EDIT1) == GetFocus())
{
CString str;
GetDlgItem(IDC_EDIT1)->GetWindowText(str);
MessageBox(str);
return FALSE;
}
else
{
return FALSE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
热心网友
时间:2023-10-29 15:32
要实现这个必须要派生一个CEdit类
1.Insert->NewClass,这个页面里面的Base class 选CEdit,Name例如写CNewEdit.注意在CNewEdit的cpp文件里包含主Dlg的头文件。
2.在classWizard里面给编辑框关联一个Contrl变量(系统交换数据时会用到)。
3.在CNewEdit里定义一个CString变量m_edit。
4.在CNewEdit增加消息PreTranslateMessage。具体代码如下:
BOOL CNewEdit::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_KEYDOWN && (pMsg->wParam>='0' && pMsg->wParam<='9'))
{
m_edit+=pMsg->wParam;
}
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
if(m_edit.GetLength()>0)
MessageBox(m_edit);
return CEdit::PreTranslateMessage(pMsg);
}
这样就符合你的要求了,只有在你加PreTranslateMessage消息的编辑框里输入ENTER建的时候才会响应。
热心网友
时间:2023-10-29 15:33
对话框中
一种实现方法不说其他的了
增加
BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
{
m_strstring += "0x0D";//m_strstring 为编辑框对应的cstring类型变量
UpdateData(false);
return true;
}
return CDialog::PreTranslateMessage(pMsg);
}
追问你这样就截取了所有的回车,当焦点不在edit时,按回车也会运行上述函数。
热心网友
时间:2023-10-29 15:33
重载一下CEdit 就行了,从CEdit派生,然后在那个类里写回车处理函数就行了,只有焦点在它的时候才会响应。
热心网友
时间:2023-10-29 15:31
重载OnOK函数。当在对话框上按回车时,会自动调用OnOK函数。在这个函数内部判断当前焦点控件是不是指定的输入框控件,若是,则调用GetDlgItem获取其内输入的数据。
void CTestDlg::OnOK()
{
// TODO: Add extra validation here
CWnd * pwnd = GetFocus(); /*获得当前焦点窗口指针*/
if ( pwnd == GetDlgItem(IDC_EDIT1) )/*看焦点是不是在指定编辑框上*/
{
UpdateData(TRUE); /*若是,则更新所有数据。*/
CString strEdit1; /*用来保存输入数据的变量。当然可以不要它,而使用对应成员变量来保存数据*/
GetDlgItemText(IDC_EDIT1, strEdit1);/*当然,也可以在这里手动更新成员变量,而其他成员变量的值不变*/
((CEdit *)pwnd)->SetSel(0,-1);/*选中编辑框中所有文字,可选*/
//MessageBox(strEdit1); /*显示输入的信息*/
}
/*若要对其他编辑框进行处理,再模仿上面的if块添加代码即可*/
//CDialog::OnOK(); /*默认的OnOK函数,不再需要*/
}
热心网友
时间:2023-10-29 15:32
PreTranslateMessage
重写对话框的PreTranslateMessage函数,在里面判断是否俺了回车键,如果是的话再判断焦点是不是在编辑框里面,可以用GetFocus 这个函数判断焦点是否在那个编辑框里面
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
if (WM_KEYDOWN == pMsg-> message && 13 == pMsg-> wParam)
{
if ( GetDlgItem(IDC_EDIT1) == GetFocus())
{
CString str;
GetDlgItem(IDC_EDIT1)->GetWindowText(str);
MessageBox(str);
return FALSE;
}
else
{
return FALSE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
热心网友
时间:2023-10-29 15:32
要实现这个必须要派生一个CEdit类
1.Insert->NewClass,这个页面里面的Base class 选CEdit,Name例如写CNewEdit.注意在CNewEdit的cpp文件里包含主Dlg的头文件。
2.在classWizard里面给编辑框关联一个Contrl变量(系统交换数据时会用到)。
3.在CNewEdit里定义一个CString变量m_edit。
4.在CNewEdit增加消息PreTranslateMessage。具体代码如下:
BOOL CNewEdit::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_KEYDOWN && (pMsg->wParam>='0' && pMsg->wParam<='9'))
{
m_edit+=pMsg->wParam;
}
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
if(m_edit.GetLength()>0)
MessageBox(m_edit);
return CEdit::PreTranslateMessage(pMsg);
}
这样就符合你的要求了,只有在你加PreTranslateMessage消息的编辑框里输入ENTER建的时候才会响应。
热心网友
时间:2023-10-29 15:33
对话框中
一种实现方法不说其他的了
增加
BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
{
m_strstring += "0x0D";//m_strstring 为编辑框对应的cstring类型变量
UpdateData(false);
return true;
}
return CDialog::PreTranslateMessage(pMsg);
}
追问你这样就截取了所有的回车,当焦点不在edit时,按回车也会运行上述函数。
热心网友
时间:2023-10-29 15:33
重载一下CEdit 就行了,从CEdit派生,然后在那个类里写回车处理函数就行了,只有焦点在它的时候才会响应。