1

有关如何在 Windows 中实现重音字符的任何指针都会有所帮助。

目标 - 能够使用诸如 ctrl + ' 后跟元音之类的击键以及适用于 MS Word、文本键盘等标准应用程序的所有其他组合来添加重音字符 (áéíóú)。

迄今为止我的发现- 我可以在任何地方阅读与 WM_DEADCHAR 消息相关的文档/博客/论坛。我的理解是:::TranslateMessage 将对应于死键的 WM_KEYUP 消息转换为 WM_DEADCHAR 消息,并将死键生成的 WM_SYSKEYUP 消息转换为 WM_SYSDEADCHAR 消息. Windows 提供了将这些消息与字符消息组合以生成重音字符的逻辑,因此通常传递死键消息以进行默认处理。

我将此消息添加到我的 CWnd 派生类的消息映射中,但 OnDeadChar() 永远不会被调用。此外,我发现使用 SPY++,即使在 MSWord、Textpad 等可以通过这些击键组合添加重音字符的情况下,WM_DEADCHAR 消息也永远不会发送。那么,这是否意味着 WM_DEADCHAR 实际上不是解决此问题的方法?

请提供任何示例代码/步骤/机制来实现重音字符。

提前致谢!!!

4

1 回答 1

1

这完全取决于您使用的键盘布局。某些键盘布局有死键,基本上允许组合键产生更多字符。

例如,我的`键本身什么也不做,但按`thena会产生à.

在允许用户输入重音字符方面,安装允许它的键盘布局真的取决于他们。您的应用不需要处理WM_DEADCHAR;你可以处理WM_CHAR

在您的应用程序内部支持重音字符方面,只需确保您使用的是 Unicode 字符集和类型。例如wchar_t/ WCHAR,而不是char

对于它的价值,我相信我在某些时候和你有同样的目标。我创建了一个应用程序,它基本上模拟死键,并使用键盘钩子生成重音字符。优点是您无需安装键盘布局即可获得重音字符功能。

缺点还是比较多的。重新发明这个轮子是没有意义的。键盘布局非常强大,所有这些输入字符的问题都已经解决了。您将很难翻译自己的信息以生成不同的字符。不同的应用程序在这方面有不同的要求,最终您将需要完全模拟击键,直至生成键盘状态结构并处理每个键盘/字符/输入消息。因此,当您开发它时,您会注意到它在记事本上工作得很好,但在 Winword 上却不行。然后你修复了 winword,然后发现它不适用于 Qt 应用程序。我肯定会建议使用键盘布局。

但也许这不是你想要做的;在那种情况下,请忽略我所说的:D

于 2012-07-13T11:40:46.770 回答