gpt4 book ai didi

c++ - 如何在 winapi 标准对话框中处理键盘事件?

转载 作者:太空狗 更新时间:2023-10-29 21:06:39 25 4
gpt4 key购买 nike

我不经常使用 winapi,我几乎是在编写 .NET 代码。但是此时我不得不使用winapi来做一个简单的对话框。我想在那里处理一些关键事件。因此我观察了相应的回调消息WM_KEYDOWN or WM_KEYUP在 MSDN 并将其添加到我的回调函数中。

INT_PTR CALLBACK cbfunc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch(message) {
// ...

case WM_KEYUP:
MMsgBox("up"); // I never get here
return 0;

case WM_KEYDOWN:
MMsgBox("down"); // I never get here
return 0;

// ...
}
return 0;
}

但是 WM_KEYUPWM_KEYDOWN 都不会被触发。然后我说正在寻找解决这个问题的方法。我想我的对话可能会吃掉这些消息。所以我补充说:

    case WM_GETDLGCODE: 
return DLGC_WANTALLKEYS;

结果是没有用。我发现的其他解决方案如下:

  • 或者使用 WM_GETDLGCODE 事件来按照 here 上的建议处理这些键.
  • 我发现很多线程(如 this one)都在谈论一种名为 PreTranslateMessage 的方法。但是我什至没有这个类(class),因为我只是使用 DialogBoxParam 创建了我的对话框。

所以他们都不适合我。此刻我不知道如何处理它。我注意到,在按键时似乎出现了一条 WM_COMMAND 消息。

问候 Nem。

最佳答案

根据 this link ,某些消息很难用对话框捕获,因为 Windows 在内部处理它们并且它们永远不会到达 DialogProc。以下是我能想到的两个选项:

  1. 使用GetAsyncKeyStateWM_COMMAND 事件上
  2. 创建一个自定义对话框,DialogProc为其处理 WM_KEYDOWN 等消息。

关于c++ - 如何在 winapi 标准对话框中处理键盘事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7230877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com