Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在windows上实现重音字符?_Windows_Mfc - Fatal编程技术网

如何在windows上实现重音字符?

如何在windows上实现重音字符?,windows,mfc,Windows,Mfc,任何关于如何在Windows中实现重音字符的指针都会很有帮助 目标-能够使用诸如ctrl+'的按键,然后是元音和所有其他在标准应用程序(如MS Word、文本键盘等)上工作的组合来添加重音字符(áíóú) 我截至日期的调查结果- 我可以在任何地方阅读与WM_Dedchar消息相关的文档/博客/论坛。我了解的是: ::TranslateMessage将对应于死键的WM_KEYUP消息转换为WM_DEADCHAR消息,并将由死键生成的WM_SYSKEYUP消息转换为WM_SYSDEADCHAR消息

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

目标-能够使用诸如ctrl+'的按键,然后是元音和所有其他在标准应用程序(如MS Word、文本键盘等)上工作的组合来添加重音字符(áíóú)

我截至日期的调查结果- 我可以在任何地方阅读与WM_Dedchar消息相关的文档/博客/论坛。我了解的是: ::TranslateMessage将对应于死键的WM_KEYUP消息转换为WM_DEADCHAR消息,并将由死键生成的WM_SYSKEYUP消息转换为WM_SYSDEADCHAR消息。Windows提供了将这些消息与字符消息相结合以生成重音字符的逻辑,因此死键消息通常会传递给默认处理

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

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


提前感谢

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

例如,我的`键本身不起任何作用,但按下`则会产生一个

在允许用户输入重音字符方面,实际上是由他们安装一个允许重音字符的键盘布局。您的应用程序不需要处理WM_dedchar;您只需处理
WM\u CHAR

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

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

但缺点更多。没有必要重新发明这个轮子。键盘布局功能惊人,所有这些输入字符的问题都已经解决了。您将很难翻译自己的消息以生成不同的字符。不同的应用在这方面有不同的要求,最终你需要完全模拟击键,以生成键盘状态结构和处理每个键盘/字符/输入消息。所以,在开发这个程序时,您会注意到它对记事本很好,但对Winword不起作用。然后修复winword,然后发现它不适用于Qt应用程序。我绝对建议使用键盘布局


但也许这不是你想要做的;在这种情况下,忽略我所说的:这完全取决于您使用的键盘布局。某些键盘布局有死键,基本上允许组合键来产生更多字符

例如,我的`键本身不起任何作用,但按下`则会产生一个

在允许用户输入重音字符方面,实际上是由他们安装一个允许重音字符的键盘布局。您的应用程序不需要处理WM_dedchar;您只需处理
WM\u CHAR

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

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

但缺点更多。没有必要重新发明这个轮子。键盘布局功能惊人,所有这些输入字符的问题都已经解决了。您将很难翻译自己的消息以生成不同的字符。不同的应用在这方面有不同的要求,最终你需要完全模拟击键,以生成键盘状态结构和处理每个键盘/字符/输入消息。所以,在开发这个程序时,您会注意到它对记事本很好,但对Winword不起作用。然后修复winword,然后发现它不适用于Qt应用程序。我绝对建议使用键盘布局


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

非常感谢。但是,键盘布局是否可以成为应用程序的专用布局?我的意思是,是否有任何方法可以让我创建/自定义的键盘布局对我的应用程序保持独占性。因为如果我通过控制面板->区域和语言选项将其设置为我的键盘,那么重音字符的变化实际上会反映在我操作系统的所有应用程序上,如记事本等。我相信键盘布局是每个线程的,因此,是的,您的应用程序可以使用与系统上其他应用程序不同的键盘布局。API是
LoadKeyboardLayout
。但我相信键盘布局必须已经安装在系统上才能工作(通过控制面板或键盘布局安装程序),非常感谢Tenfour。但是,键盘布局是否可以成为应用程序的专用布局?我的意思是有一个