有关如何在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实际上不是解决此问题的方法?
请提供任何示例代码/步骤/机制来实现重音字符。
提前致谢!!!
答案 0 :(得分:1)
这完全取决于您使用的键盘布局。某些键盘布局具有死键,基本上允许键组合以产生更多字符。
例如我的`键本身没有任何作用,但是按`然后 a 会产生à
。
在允许用户输入重音字符方面,他们真的应该安装允许它的键盘布局。您的应用无需处理WM_DEADCHAR
;你可以处理WM_CHAR
。
就在应用程序内部支持重音字符而言,只需确保使用Unicode字符集和类型。例如wchar_t
/ WCHAR
,而不是char
。
对于它的价值,我相信我在某些方面与你有着同样的目标。我创建了一个基本上模拟死键的应用程序,并使用键盘钩子生成重音字符。优点是您可以在不安装键盘布局的情况下获得重音字符功能。
但缺点是更多。重新发明这个轮子是没有意义的。键盘布局非常强大,输入字符的所有这些问题已经解决了。您将很难翻译自己的消息以生成不同的字符。不同的应用程序在这方面有不同的要求,最后你需要完全模拟击键,生成键盘状态结构和处理每个键盘/字符/输入消息。因此,当您正在开发这个时,您会注意到它适用于记事本,但不适用于Winword。然后你修复了winword,然后发现它对Qt应用程序不起作用。我肯定会建议使用键盘布局。
但也许这不是你想要做的;在那种情况下忽略我说的话:D