如何使用 Visual c + + 中的模式对话框内的加速键

文章翻译 文章翻译
文章编号: 222829 - 查看本文应用于的产品
注意Microsoft Visual c + +.net (2002) 支持托管的代码模型所提供的 Microsoft.net 框架和非托管本机 Windows 代码模型。本文中的信息仅适用于非托管的 Visual c + + 代码。
展开全部 | 关闭全部

概要

加速键是一种常见的用户界面功能,Windows 应用程序的 ; 因此,为什么限制它们只是在应用程序?本文介绍如何将加速键功能添加到任何模式对话框。

更多信息

通过在应用程序的主消息循环中调用 TranslateAccelerator() 函数处理的键盘加速键。 但是,为模式对话框对话框框经理消息循环 (Windows 中内置) 用于翻译和发送信息。当然,此消息循环不旨在处理加速器,因为它没有调用 TranslateAccelerator() 函数。

若要处理一个模式对话框中的加速键,您必须重写对话框中的 PreTranslateMessage() 正常工作,并尝试通过调用为加速键处理该消息:: TranslateAccelerator()。如果将失败此方法通过调用基类 PreTranslateMessage() 然后处理将继续。

这篇文章进行我们将加速键功能添加到 AboutBox 对话框中的 MFC MDI 应用程序:
  1. 创建名为 Test 的新 MFC MDI 应用程序。
  2. 添加到 AboutBox 对话框资源的资源 id"IDC_BUTTON1"的按钮。
  3. 双击按钮,为此按钮添加处理程序,然后插入下面的代码为加速键工作的指示器:
    AfxMessageBox("Hello");
  4. 插入一个新的快捷键对应表,为该资源。
  5. 将一个加速器键添加到表中,通过将相关联 F5 键对该资源 ID"IDC_BUTTON1"。
  6. 向类添加成员变量,m_hAccelTable,CAboutBox:
    HACCEL  m_hAccelTable;
  7. 初始化中 CAboutBox::CAboutBox m_hAccelTable:
    m_hAccelTable = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));
  8. 使用代码向导 (类向导在 Visual c + + 6.0 中以及更早版本) 为该 CAboutDlg 添加该 PreTranslateMessage 的重写。
  9. CAboutBox::PreTranslateMessage() 方法中添加下列代码行:
    BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg) {
       if (m_hAccelTable) {
          if (::TranslateAccelerator(m_hWnd, m_hAccelTable, pMsg)) {
             return(TRUE);
          }
       }
       return CDialog::PreTranslateMessage(pMsg);
    
    }
  10. 编译并运行 CTestApp。

结果在 CAboutBox 处于活动状态时,快捷键 F5 现在触发 button1 处理程序。

参考

有关在模式对话框内部处理的加速键的其他信息,请参阅 Microsoft 知识库中下面的文章:
100770 信息: 使用模式对话框的主窗口快捷键

属性

文章编号: 222829 - 最后修改: 2006年11月21日 - 修订: 4.1
这篇文章中的信息适用于:
  • Microsoft Foundation Class Library 4.2?当用于
    • Microsoft Visual C++ 4.1 Subscription
    • Microsoft Visual C++ 4.2 企业版
    • Microsoft Visual C++ 5.0 企业版
    • Microsoft Visual C++ 6.0 企业版
    • Microsoft Visual C++ 4.2 专业版
    • Microsoft Visual C++ 5.0 专业版
    • Microsoft Visual C++ 6.0 专业版
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft Visual C++ .NET 2002 标准版
    • Microsoft Visual C++ .NET 2003 Standard Edition
关键字:?
kbmt kbacceleratorkey kbhowto kbkeyaccel kbuidesign KB222829 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 222829
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com