我使用 VS2008 和 MFC 功能包开发了一个 MFC 应用程序。此应用程序 UI 正在使用功能区。
我现在需要将 F10 作为我的应用程序的一项关键功能的正确快捷方式,但我似乎无法正确设置加速器,因为它总是使用默认的功能区加速器而不是我的。
知道如何实现这一目标吗?
我使用 VS2008 和 MFC 功能包开发了一个 MFC 应用程序。此应用程序 UI 正在使用功能区。
我现在需要将 F10 作为我的应用程序的一项关键功能的正确快捷方式,但我似乎无法正确设置加速器,因为它总是使用默认的功能区加速器而不是我的。
知道如何实现这一目标吗?
您是否尝试过为 WM_SYSKEYDOWN 添加处理程序并检查消息代码中的 wParam 值是否为 VK_F10?F10 需要特殊处理,因为它是按 Alt 键在键盘控制下打开菜单栏的旧替代方法。
我假设您已经尝试过注册热键。获得击键的规范方法是使用 SetWindowsHookEx,作为应用程序的主线程。全局窗口挂钩很重,Vista/Win7/Server 2008 中挂钩的安全限制使它们的用处大大降低。但是特定于进程的钩子会很好 - 并且不需要在 DLL 中。
有同样的问题并通过添加方法解决它:virtual BOOL PreTranslateMessage(MSG* pMsg);
BOOL CMyView::PreTranslateMessage(MSG* pMsg)
{
if ((pMsg->message == WM_SYSKEYDOWN) && (pMsg->wParam == VK_F10))
{
OnMyAction(); //code on F10
return TRUE;
}
return CView::PreTranslateMessage(pMsg);
}