gpt4 book ai didi

c - win32 api编辑控件和键盘加速器

转载 作者:太空狗 更新时间:2023-10-29 17:19:13 29 4
gpt4 key购买 nike

我正在用 win32 api 编写一个简单的记事本编辑器(定制以适应一些额外的功能)。编辑控件填满应用程序区域并始终获得焦点。我还需要处理一些键盘命令,例如 Ctl-S。所以我以通常的方式使用键盘加速表来定义 Ctl-S 键,并且在我的消息循环中我有 TranslateAccelerator

while (GetMessage(&Msg,NULL,0,0)>0)
{
if (!TranslateAccelerator(Msg.hwnd,HAccel,&Msg))
{ TranslateMessage(&Msg); DispatchMessage(&Msg); }
}

现在我的问题是,由于“编辑”窗口始终具有焦点,因此当用户键入 Ctl-S 时,我根本没有收到 WM_COMMAND 消息。 (我知道 wParam 的 HIWORD 将成为键盘加速器的 1,但这不是问题)。

 case WM_COMMAND:
switch (LOWORD(wParam))
{
...
case ID_CTL_S_PRESSED: {My code here} break;
...
}

如果我在没有编辑控件的情况下尝试代码,那么我会收到上面的 WM_COMMAND 消息。那么,当编辑控件始终具有焦点时,我该如何获取键盘快捷键的 WM_COMMAND 消息呢?

最佳答案

TranslateAccelerator的第一个参数记录为:

A handle to the window whose messages are to be translated.

这是一种误导,并不完全正确。关于Processing WM_COMMAND messages (Using Keyboard Accelerators)的部分更重要的是:

When an accelerator is used, the window specified in the TranslateAccelerator function receives a WM_COMMAND or WM_SYSCOMMAND message.

要解决您的问题,请将对 TranslateAccelerator 的调用替换为以下内容:

if (!TranslateAccelerator(hwndMain,HAccel,&Msg))

用主窗口的窗口句柄替换 Msg.hwnd 会将 WM_COMMAND 消息定向到您想要的位置。

关于c - win32 api编辑控件和键盘加速器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20213438/

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