gpt4 book ai didi

c++ - MFC:为什么加速器不工作?

转载 作者:搜寻专家 更新时间:2023-10-31 01:29:59 26 4
gpt4 key购买 nike

我正在尝试在继承自 CFrameWnd 的类中使用加速器,而该类本身用于继承自 CWinApp 的类。出于某种原因,我在加速器中定义的快捷方式只是不想工作。

有两个类:CMyFrame(继承自CFrameWnd)和CMyApp(继承自CWinApp)。

相关函数:

BOOL CMyApp::InitInstance() {
m_hAccel = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));

CMyFrame *Frame = new CMyFrame();
m_pMainWnd = Frame;

Frame->ShowWindow(SW_NORMAL);
Frame->UpdateWindow();

return TRUE;
}

BOOL CMyApp::ProcessMessageFilter(int code, LPMSG Msg) {
if (m_hAccel) {
if (::TranslateAccelerator(m_pMainWnd->m_hWnd, m_hAccel, Msg)) {
return TRUE;
}
}
return CWinApp::ProcessMessageFilter(code, Msg);
}

BEGIN_MESSAGE_MAP(CMyFrame, CFrameWnd)
ON_COMMAND(ID_FILE_NEW, &CMyFrame::OnFileNew)
ON_COMMAND(ID_FILE_SAVE, &CMyFrame::OnFileSave)
ON_COMMAND(ID_EDIT_CUT, &CMyFrame::OnEditCut)
ON_COMMAND(ID_EDIT_COPY, &CMyFrame::OnEditCopy)
ON_COMMAND(ID_EDIT_PASTE, &CMyFrame::OnEditPaste)
END_MESSAGE_MAP()

void CMyFrame::OnFileNew() {
MessageBox(L"OnFileNew", L"Event", MB_OK);
}

void CMyFrame::OnFileSave() {
MessageBox(L"OnFileSave", L"Event", MB_OK);
}

void CMyFrame::OnEditCut() {
MessageBox(L"OnEditCut", L"Event", MB_OK);
}

void CMyFrame::OnEditCopy() {
MessageBox(L"OnEditCopy", L"Event", MB_OK);
}

void CMyFrame::OnEditPaste() {
MessageBox(L"OnEditPaste", L"Event", MB_OK);
}

我包含了 afxwin.hresource.h。加速器本身已正确加载(我使用另一个消息框检查了返回值。它始终为 1,MSDN 声明除 0 之外的每个值都表示成功)。此外,当我不加载加速器时,菜单项显示为灰色。这些项目本身也能正常工作。当我单击它们时,会弹出相应的消息框。CMyFrame 的 header 包含 DECLARE_MESSAGE_MAP()

最佳答案

CFrameWnd 有自己的 CFrameWnd::LoadAccelTable方法。添加这一行:

Frame->LoadAccelTable(MAKEINTRESOURCE(IDR_ACCELERATOR1));

CWinThread::ProcessMessageFilter 将在 MFC 对话框处于事件状态时处理加速器消息。但是它在您的代码中设置的方式,会将加速器传递给主框架,而不是对话框。

关于c++ - MFC:为什么加速器不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48790150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com