CEdit 响应按键消息

zack_hoo 2009-08-25 02:26:07
1、利用ClassWizard建立一个类CMyEdit,这个类是从CEdit派生来的。
2、利用ClassWizard建立CMyEdit响应WM_CHAR事件的函数OnChar,然后输入以下代码:
void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
MessageBox("Hello!");

CEdit::OnChar(nChar, nRepCnt, nFlags);
}

没错,是可以响应按键消息
但,我一按 回车键 整个对话框都会退出
是不是,还要在什么地方加什么代码
...全文
235 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wltg2001 2009-08-25
  • 打赏
  • 举报
回复
这个和EDIT没关系的,主要原因是因为按回车键时默认会调用OnOK函数,所以会退出。
一般解决方法如下:
先重载OnOK函数,写成:
void Ctest_mfcDlg::OnOK()
{
// TODO: 在此添加控件通知处理程序代码
//CDialog::OnOK();
}
注意,一定要将CDialog::OnOK()这个注释掉。
将原来的OK按钮的ID改一下,如改为ID_OK,然后处理这个按钮的处理函数。如果没这个按钮不处理也行。
如果处理的话,最后一定要调用CDialog::OnOK();对话框才能退出。
第二种方法:
BOOL CFindWordDlg::PreTranslateMessage(MSG *pMsg)
{
if(pMsg->message == WM_KEYDOWN)
{
switch(pMsg->wParam)
{
case VK_RETURN://屏蔽回车
// OnKeyDown(VK_SPACE, LOWORD(pMsg ->lParam), HIWORD(pMsg->lParam));
return TRUE;
case VK_ESCAPE://屏蔽Esc
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
不过这种方法是屏蔽了回车键,不太好
dengxuxing 2009-08-25
  • 打赏
  • 举报
回复
还有一个办法,你把编辑框的属性设置为多行也行的
dengxuxing 2009-08-25
  • 打赏
  • 举报
回复
上面的方法都不错,你也可以把对话框中的一个按钮设置为默认按钮,那样的话你在编辑框中敲回车它就执行该按钮的响应函数了.
yuhudie203 2009-08-25
  • 打赏
  • 举报
回复
有2个方法~~~
1.加入虚函数PreTranslateMessage 中截取WM_CHAR消息,并且当WPARAM ==0xd时 return;

2.在对话框.h文件中加入virtual void OnOK(){return;}句
dayong576 2009-08-25
  • 打赏
  • 举报
回复
重载OnOK
把里面代码注释掉就可以了。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧