将功能键分配给对话框的简单方法?

发布于 2024-11-02 06:06:46 字数 74 浏览 2 评论 0原文

我有一个 MFC 对话框,我想将功能键分配给不同的方法。这可能吗?

例如,我想输入 F9 并获得与按下按钮相同的结果。

I have a MFC dialog and I would like to assign function keys to different methods. Is that possible?

For example I would like to type F9 and have the same result as pressing a button.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

落花浅忆 2024-11-09 06:06:46

对于基于对话框的应用程序。在资源编辑器中为您的对话框创建一个 IDR_ACCELERATOR1。添加您想要的键,并为对话框的键创建一个事件。

在sampledlg.h中,请添加

HACCEL m_haccel;

在sampledlg.cpp中,在OnInitDialog()中,请添加

m_haccel = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));

在sampledlg.cpp中,请添加 在PreTranslateMessage(MSG *pMsg)中,请添加

if (m_haccel)
{
  if ((::TranslateAccelerator(*this, m_haccel, pMsg))) 
  {    
      return(TRUE);
  }
}

For Dialog Based application. Create a IDR_ACCELERATOR1 in resource editor for your dialog. And add the Key you wanted and create a Event for the Key for your dialog.

In sampledlg.h please add

HACCEL m_haccel;

In sampledlg.cpp In OnInitDialog() please add

m_haccel = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));

In sampledlg.cpp In PreTranslateMessage(MSG *pMsg) please add

if (m_haccel)
{
  if ((::TranslateAccelerator(*this, m_haccel, pMsg))) 
  {    
      return(TRUE);
  }
}
独享拥抱 2024-11-09 06:06:46

如果您的意思是在基于对话框的应用程序的主对话框中,您可以检查
http://www.codeproject.com /Articles/37130/Implement-Accelerators-in-a-Dialog-Based-Applicati.aspx

如果用于文档/视图应用程序中的对话框:
http://support.microsoft.com/kb/117500/en-us

http://support.microsoft.com/kb/222829/en-us

じ违心 2024-11-09 06:06:46

比我想象的容易。我不知道这是否是最好的解决方案,但这就是我所做的:

BOOL MainDlg::PreTranslateMessage(MSG *pMsg)
{   
  if ( pMsg->message == WM_KEYDOWN)
  {
     if (( pMsg->wParam == VK_F9))
       OnBnClickedButton1(); // Delete Item
 }

  return CDialog::PreTranslateMessage(pMsg);
}

现在,每次按下功能键 F9 时都会调用函数 OnBClickedButton1() 。

Easier than I thought. I don't know if this is the best solution but this is what I did:

BOOL MainDlg::PreTranslateMessage(MSG *pMsg)
{   
  if ( pMsg->message == WM_KEYDOWN)
  {
     if (( pMsg->wParam == VK_F9))
       OnBnClickedButton1(); // Delete Item
 }

  return CDialog::PreTranslateMessage(pMsg);
}

Now, every time Function Key F9 is pressed function OnBClickedButton1() is called.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文