当前位置: 首页> 科技> 名企 > 2408gui,wtl给对话框加快捷键

2408gui,wtl给对话框加快捷键

时间:2025/7/12 7:43:26来源:https://blog.csdn.net/fqbqrr/article/details/141459040 浏览次数:2次

原文

使用代码

快捷键声明一个句柄,并添加CMessageFilter.

#pragma once
class CMainDlg : public CDialogImpl<CMainDlg>,public CUpdateUI<CMainDlg>,public CMessageFilter,//..public CIdleHandler
{
private:HACCEL    m_haccelerator;//..
//.......
};

然后在OnInitDialog中,给快捷键资源赋值m_haccelerator变量,在此例中为IDR_MAINFRAME.

LRESULT CMainDlg::OnInitDialog(UINT /*`uMsg`*/, WPARAM /*`wParam`*/,LPARAM /*l参数*/, BOOL& /*b已处理*/)
{//.......绑定键...m_haccelerator = AtlLoadAccelerators(IDR_MAINFRAME);//`注册`对象以过滤消息和空闲更新CMessageLoop* pLoop = _Module.GetMessageLoop();ATLASSERT(pLoop != NULL);pLoop->AddMessageFilter(this);pLoop->AddIdleHandler(this);//...............return TRUE;
}

然后要重载PreTranslateMessage函数.

BOOL CMainDlg::PreTranslateMessage(MSG* pMsg)
{if(m_haccelerator != NULL){if(::TranslateAccelerator(m_hWnd, m_haccelerator, pMsg))return TRUE;}return CWindow::IsDialogMessage(pMsg);
}

此外,在构造器中,初化快捷键的句柄.

CMainDlg::CMainDlg()
{//..................m_haccelerator = NULL;//..................
}

如果未按无模式设置对话框,则需要按无模式,才能使PreTranslateMessage正常工作.这很容易…

int WINAPI _tWinMain(HINSTANCE hInstance,HINSTANCE /*`hPrev`实例*/, LPTSTR lpstrCmdLine, int nCmdShow)
{_Module.Init(NULL, hInstance);CMessageLoop myMessageLoop;_Module.AddMessageLoop(&myMessageLoop);CMainDlg dlgMain;dlgMain.Create(NULL);dlgMain.ShowWindow(nCmdShow);int retValue = myMessageLoop.Run();_Module.RemoveMessageLoop();_Module.Term();return retValue;
}

并确保包含atlmisc.h.

关键字:2408gui,wtl给对话框加快捷键

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: