使用SDK开发的对话框如何捕捉WM_KEYDOWN

边城狂人 2005-09-15 09:19:30
我知道如果是用MFC开发的对话框可以用 PreTranslateAccelerator,但是我现在是用 SDK 开发的对话框,那该怎么办呢?

我主要是想捕捉 Escape 和 Ctrl+Enter 等键。
...全文
165 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
边城狂人 2005-09-15
  • 打赏
  • 举报
回复
说实话,上面各位说的方法,我没试成功一个。
karlfly 2005-09-15
  • 打赏
  • 举报
回复
我也在学习中
边城狂人 2005-09-15
  • 打赏
  • 举报
回复
我在网上找到解决的办法了:
http://blogs.msdn.com/oldnewthing/archive/2005/04/07/406012.aspx
布学无数 2005-09-15
  • 打赏
  • 举报
回复
唉,给个范例给你吧:
WNDPROC lpfnOldDlgProc = NULL;
LRESULT CALLBACK NewDlgProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);

...DlgProc(HWND hDlg,... // 对话框处理过程中
.
.
.
case WM_INITDIALOG:
lpfnOldDlgProc = (WNDPROC)SetWindowLong(hDlg,GWL_WNDPROC,(LONG)NewDlgProc);
.
.
.

//

LRESULT CALLBACK NewDlgProc(HWND hWnd,... // 新的处理过程
{
switch(uMsg)
{
case WM_KEYDOWN:
// 在这里处理你的按键消息
break;
default:
break;
}
return CallWindowProc(lpfnOldDlgProc,hWnd,uMsg,wParam,lParam);
}
i_noname 2005-09-15
  • 打赏
  • 举报
回复
这个问题并不是用SDK或MFC的问题,子控件有自己默认的消息处理函数所以一部分消息是不会交给父窗口处理的。

LRESULT CALLBACK MyProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam)
{
if (uMsg == WM_KEYDOWN)
{
if ((int)wParam == VK_ESCAPE)
...//esc Pressed
if (GetKeyState (VK_CONTROL) && (int)wParam == VK_RETURN)
...//Ctrl+enter Pressed
}
return CallWindowProc(OldProc,hwnd, uMsg,wParam,lParam);
}
i_noname 2005-09-15
  • 打赏
  • 举报
回复
LONG SetWindowLong(HWND hWnd, GWL_WNDPROC, MyProc);
在MyProc中处理消息。
handsomerun 2005-09-15
  • 打赏
  • 举报
回复
直接处理不行
那么
case WM_SYSKEYDOWN:

这个可以吗,
边城狂人 2005-09-15
  • 打赏
  • 举报
回复
直接处理是不行的,请大家自己试验一下。WM_KEYDOWN 消息似乎根本没有送过来,所以没法处理。
如果直接处理可以我就不会来这里问了。
i_noname 2005-09-15
  • 打赏
  • 举报
回复
简单啊,消息处理函数中添加
case WM_KEYDOWN:
if ((int)wParam == VK_ESCAPE)
...//esc Pressed
if (GetKeyState (VK_CONTROL) && (int)wParam == VK_RETURN)
...//Ctrl+enter Pressed
break;
kenskens 2005-09-15
  • 打赏
  • 举报
回复
说得好复杂哦。

直接在对话框的DialogProc()中处理不行吗?就像主窗口的WndProc()中一样
switch()
{
case WM_KEYDOWN:
// 虚拟键
// 组合键用GetKeyState()
}
布学无数 2005-09-15
  • 打赏
  • 举报
回复
要捕获对话框的按键消息,必须先子类化该对话框。
即用 SetWindowLong 函数改变对话框的处理过程,并在自己的过程中处理按键消息:)
落入凡间的猪 2005-09-15
  • 打赏
  • 举报
回复
如楼上所说,然后处理按键消息
vcmute 2005-09-15
  • 打赏
  • 举报
回复
WndProc中处理
社会栋梁 2005-09-15
  • 打赏
  • 举报
回复
可以用钩子

16,471

社区成员

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

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

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