MFC编辑框:回车得到输入的数据.

重载ONOK也好,截取WM_KEYDOWN消息也好。麻烦给详细代码,感谢!还有注意的就是,当焦点不在编辑框时,回车是没反应的。... 重载ONOK也好,截取WM_KEYDOWN消息也好。
麻烦给详细代码,感谢!
还有注意的就是,当焦点不在编辑框时,回车是没反应的。
展开
 我来答
我已经匿名了
2011-09-29 · TA获得超过816个赞
知道小有建树答主
回答量:478
采纳率:0%
帮助的人:245万
展开全部
重载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函数,不再需要*/
}
匿名用户
推荐于2016-05-19
展开全部
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);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
西瓜妈妈育儿助手
2011-10-01 · 新手妈妈育儿助手,24小时在线的育儿专家
西瓜妈妈育儿助手
采纳数:158 获赞数:549

向TA提问 私信TA
展开全部
要实现这个必须要派生一个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建的时候才会响应。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
咸晓丝
2011-09-26 · TA获得超过259个赞
知道答主
回答量:502
采纳率:100%
帮助的人:235万
展开全部
对话框中
一种实现方法不说其他的了
增加
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时,按回车也会运行上述函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
vived
2011-09-26 · TA获得超过113个赞
知道答主
回答量:85
采纳率:0%
帮助的人:73.3万
展开全部
重载一下CEdit 就行了,从CEdit派生,然后在那个类里写回车处理函数就行了,只有焦点在它的时候才会响应。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式