在对话框中,如何接收键盘消息?

SanTa 2000-09-08 06:15:00
如题。
...全文
384 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
SanTa 2000-09-09
  • 打赏
  • 举报
回复
小子受教啦,谢谢二位师傅!
Holly 2000-09-09
  • 打赏
  • 举报
回复
可以使用SetWindowsHookEx(...)来实现;
...
case WM_INITDIALOG:
g_hHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)SubclassAbout, g_hInst, GetCurrentThreadId());
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
UnhookWindowsHookEx(g_hHook);
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
...

LRESULT CALLBACK SubclassAbout(int code, WPARAM wParam, LPARAM lParam)
{
switch (wParam)
{
case 0x41:
MessageBox(NULL, "A&a", "", );
break;
...
}
return CallNextHookEx(g_hHook, code, wParam, lParam);
}
SanTa 2000-09-08
  • 打赏
  • 举报
回复
谢谢二位前辈指点!
但是,都怪小弟心急,没有说清楚。

我使用的是Win32 API和C创建的对话框。
所以MFC代码对我不管用。
麻烦各位前辈了。。。 我该怎么办?如何为对话框添加快捷键??
Holly 2000-09-08
  • 打赏
  • 举报
回复
请看MFC中的代码:
BOOL CDialog::PreTranslateMessage(MSG* pMsg)
{
...
// allow tooltip messages to be filtered
if (CWnd::PreTranslateMessage(pMsg))
return TRUE;
...
return PreTranslateInput(pMsg);
}

BOOL CWnd::PreTranslateInput(LPMSG lpMsg)
{
ASSERT(::IsWindow(m_hWnd));
// don't translate non-input events
if ((lpMsg->message < WM_KEYFIRST || lpMsg->message > WM_KEYLAST) &&
(lpMsg->message < WM_MOUSEFIRST || lpMsg->message > WM_MOUSELAST))
return FALSE;
return IsDialogMessage(lpMsg);
}
所以如果你要处理键盘消息的话,就要象Sunlet的示例那样处理。但要注意,如果你不想在你处理完后继续让Dialog处理,你就需要在你的case中return TRUE;
建议你写一个函数处理如下:

BOOL CMyDialog::PreTranslateMessage(MSG* pMsg)
{
if (IsMyKeyMessage(pMsg))
return TRUE;

return CDialog::PreTranslateMessage(pMsg);
}

BOOL CMyDialog::IsMyKeyMessage(MSG* pMsg)
{
switch(pMsg->message)
{
case WM_KEYUP:
...
return TRUE;
case WM_KEYDOWN:
...
return TRUE;
}
return FALSE;
}
Sunlet 2000-09-08
  • 打赏
  • 举报
回复
在Classwzard 中Message Map中选择PreTranslateMsg,在函数中加入以下代码:
BOOL CDlgDlg::PreTranslateMessage(MSG* pMsg)
{
switch (pMsg->message){
case WM_KEYUP:
case WM_KEYDOWN:
AfxMessageBox("key msg");
}

return CDialog::PreTranslateMessage(pMsg);
}
Sunlet 2000-09-08
  • 打赏
  • 举报
回复
在PreTranslateMessage中处理.

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧