我在一个普通的Win32对话框上有一个动态创建的工具栏。我的按钮添加了&快捷方式正确地将下划线放在&符号后面的字符上,但按Alt +(char)会导致发出蜂鸣声并且不会单击该按钮。
自从我完成Win32 API开发以来已经有一段时间了。是否需要对动态创建的子窗口(工具栏)执行某些操作才能使加速键生效?
这可能是我很遗憾的事情......
答案 0 :(得分:1)
蜂鸣声表示该应用中的任何窗口均未处理该命令。
由于您动态创建了工具栏,我猜测工具栏窗口没有正确设置为主窗口的子窗口(即,它的父窗口和所有者窗口未设置)。
要测试:单击工具栏以使其具有焦点,然后按Alt-它应该可以工作。
答案 1 :(得分:1)
嗯......您必须编写代码来处理这些按键并将其转换为WM_COMMAND
消息。执行此操作的传统方法是定义加速器表并使用TranslateAccelerator()
处理它们 - 当然,您可以自由地执行它但是您喜欢...只需确保您使用键处理的键即可你强调了!
您可能还会发现此知识库文章有用:How to use accelerator keys within a modal dialog box in Visual C++ ...或者,为了更深入(并且不含MFC),请查看在对话框中实现自定义消息处理,请查看Raymond Chen关于对话管理器,特别是part 4: The dialog loop和part 9: Custom accelerators in dialog boxes(但严肃地说,读完整件事,你知道你想......)