这两天在做一个文本文档,界面用的是Duilib。
为了实现快捷键弄了很久,因为对Duilib的消息机制不是太了解。
了解了消息机制后其实很简单,先在重载的HandleMessage函数中获取WM_KEYDOWN消息,再在OnKeyDown函数中处理快捷键组合(代码中以Ctrl + O 为例),
其他各种快捷键组合,都可以以这个为模板
下面贴上代码:
LRESULT CMainWnd::OnKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
switch( wParam )
{
case _T('O'):
{
if( GetKeyState(VK_CONTROL) < 0 )
{
do_something();
}
}
break;
}
return 0;
}
LRESULT CMainWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LRESULT lRes = 0;
BOOL bHandled = TRUE;
switch( uMsg ) {
.........
case WM_KEYDOWN: lRes = OnKeyDown(uMsg, wParam, lParam, bHandled); break;
default:
bHandled = FALSE;
}
if( bHandled ) return lRes;
if( m_pm.MessageHandler(uMsg, wParam, lParam, lRes) ) return lRes;
return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
}