本文主要是介绍2408gui,wtl给对话框加快捷键,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原文
使用代码
给快捷键
声明一个句柄
,并添加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给对话框加快捷键的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!