[MFC]解决回车键 ESC 默认关闭窗口的一般方法

 在一般情况下编写的对话框程序,用户在运行的时候,如果不注意按下了ENTER或者ESC键,程序就会立刻退出,之所以会这样,是因为按下Enter键时,Windows就会自动去找输入焦点落在了哪一个按钮上,当获得焦点的按钮的四周将被点线矩形包围。如果所有按钮都没有获得输入焦点,Windows 就会自动去寻找程序或资源所指定的默认按钮(默认按钮边框较粗)。如果对话框没有默认按钮,那么即使对话框中没有OK按钮,OnOK函数也会自动被调用,对于一个普通的对话框程序来说,OnOK函数的调用,以为着程序会立刻退出。为了使Enter键无效,最简单的办法就是将CExDlg的OnOK函数写成空函数,然后针对OK按钮写一个新的函数来响应。ESC键的原理也是如此,它是默认和OnCancel函数映射在一起的。对于ESC键,需要自己重载 CDialog类的PreTranslateMessage函数,当发现是ESC键的时候,过滤掉这个消息或者是替换掉这个消息。 
  
  一下是简单的代码示例: 
  
  【方法1】 
  可以先重载OnOK函数 
  voidCTestDlg::OnOK() 
  {     //里面什么也不写} 
  
  然后重载PreTranslateMessage函数 
  把ESC键的消息,用RETURN键的消息替换,这样,按ESC的时候,也会执行刚才的OnOK函数,这样问题就可以解决了。 
  
  BOOL   CxxxDlg::PreTranslateMessage(MSG*   pMsg)   
  { 
    if(pMsg->message==WM_KEYDOWN   &&   pMsg->wParam==VK_ESCAPE)   
    {   
    pMsg->wParam=VK_RETURN;   //将ESC键的消息替换为回车键的消息,这样,按ESC的时候 
                                                                                      //也会去调用OnOK函数,而OnOK什么也不做,这样ESC也被屏蔽 
      }   
    return   CDialog::PreTranslateMessage(pMsg); 
  
  } 
  
  【方法2】 
  
  直接在重载的PreTranslateMessage函数中屏蔽回车和ESC的消息,和以上方法大同小异: 
  
  BOOL   CxxxDlg::PreTranslateMessage(MSG*   pMsg)   
  { 
    if(pMsg->message==WM_KEYDOWN   &&   pMsg->wParam==VK_ESCAPE)     return   TRUE; 
    if(pMsg->message==WM_KEYDOWN   &&   pMsg->wParam==VK_RETURN)   return   TRUE;   
    else   
          return   CDialog::PreTranslateMessage(pMsg); 
  }
在Microsoft Foundation Class (MFC)库中,禁用回车键关闭窗口通常涉及到使用窗口类的消息处理函数来捕获并处理特定的键盘消息。 以下是一种可能的方法: 1. 首先,你需要找到一个窗口类,该窗口类是你想要禁用回车键关闭窗口。这通常可以通过在资源编辑器中查看窗口类的信息来完成。 2. 在找到窗口类后,你可以在窗口类的消息处理函数中捕获并处理WM_KEYDOWN或WM_KEYUP消息。当用户按下回车键时,这些消息将被发送。 3. 在处理函数中,你可以检查用户是否按下了回车键。如果按下了回车键,你可以阻止关闭窗口默认行为。这通常涉及到调用窗口类的阻止关闭函数(通常是阻止关闭函数)。 以下是一个简单的示例代码片段,展示了如何使用MFC库禁用回车键关闭窗口: ```cpp BOOL CYourWindow::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) { // 如果用户按下了回车键,则阻止默认行为 return false; } else { return CWnd::PreTranslateMessage(pMsg); // 传递消息给其他处理程序或直接执行默认处理 } } ``` 在上面的代码中,`PreTranslateMessage`是一个窗口类的消息处理函数,用于捕获和处理全局的消息。如果用户按下了回车键(其消息为`WM_KEYDOWN`并且按键代码为`VK_RETURN`),则该函数返回`false`,这将阻止关闭窗口默认行为。其他情况将传递消息给其他处理程序或执行默认处理。 请注意,这只是一种基本的方法,你可能需要根据你的具体需求进行调整和优化。另外,为了使用这个方法,你需要在应用程序的资源文件中正确设置窗口类并配置相关的键盘映射。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值