MFC对话框程序按回车后程序退出的解决办法

1:最简单的也是不太好的方法,重载PreTranslateMessage函数,屏蔽掉Enter键

这样做的代价就是正常的键也不能处理Enter键
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);  
  }  

2:第二种解决方案
这种是本质上的解决方案。
本质上,由于默认输入Enter键时,系统会调用OnOK()函数,CDialog::OnOK()是一个可以让对话框退出的函数。

所以我们要重写OnOK();
如下
void Ctest_mfcDlg::OnOK()
{
 // TODO: 在此添加控件通知处理程序代码
 //CDialog::OnOK();
}

由于默认的id号为IDOK的控件是被映射到调用CDialog::OnOK函数,所以,我们要吧id号为IDOK的控件改名字为ID_OK,随便换个名字就行,然添加消息映射
ON_BN_CLICKED(ID_OK, &Ctest_mfcDlg::OnBnClickedOk);
void Ctest_mfcDlg::OnBnClickedOk()
{
 // TODO: 在此添加控件通知处理程序代码
 OnMyOK();
}

void Ctest_mfcDlg::OnMyOK()    // :模拟原来的OnOK()
{
 // TODO: 在此添加控件通知处理程序代码
 CDialog::OnOK();
}

OK,现在应该好了,使用习惯一切正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值