Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.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
C++ 定位在静态控制中不起作用_C++_Visual C++_Dll_Mfc_Multilingual - Fatal编程技术网

C++ 定位在静态控制中不起作用

C++ 定位在静态控制中不起作用,c++,visual-c++,dll,mfc,multilingual,C++,Visual C++,Dll,Mfc,Multilingual,我正在开发一个基于窗口的应用程序,因为它是基于窗口的桌面应用程序,我需要支持从中文到法语,从印地语(印度)到葡萄牙语(巴西)的多种语言,现在我认为在同样大小的文本显示下仍然很好用。但是下面的例子 如果我的一个静态控件包含以下文本 选择输出范围|文本框| 因为我是用英文开发的,所以静态的大小是根据英文文本大小来考虑的。我觉得工作很好 现在,我把上面静态控件的相同文本转换成中文,如下所示: 选择输出范围|文本框| 我很高兴,因为中文的大小小于英文,但当我将相同的文本从英文转换为法文时,下面是静态控件

我正在开发一个基于窗口的应用程序,因为它是基于窗口的桌面应用程序,我需要支持从中文到法语,从印地语(印度)到葡萄牙语(巴西)的多种语言,现在我认为在同样大小的文本显示下仍然很好用。但是下面的例子

如果我的一个静态控件包含以下文本

选择输出范围|文本框|

因为我是用英文开发的,所以静态的大小是根据英文文本大小来考虑的。我觉得工作很好

现在,我把上面静态控件的相同文本转换成中文,如下所示:

选择输出范围|文本框|

我很高兴,因为中文的大小小于英文,但当我将相同的文本从英文转换为法文时,下面是静态控件的大小

Séselectionnez Plage de出击文本框|

我的坏文本大小在一些世界中增加了,因为我们在较小大小的文本上有大文本,文本视图将按如下方式剪裁

选择输出范围|文本框|

Séselectionnez Plage|(文本框()|


在法语中,文本的大小是增加的,那个么如何在语法上处理文本大小的不匹配呢

有不同的方法来处理这个问题。答案取决于您在代码中处理本地化的方式

请注意,某些局部变量需要将显示从左到右->从右到左(阿拉伯语…)倒置 在这种情况下,您必须处理以下情况:

 Select Output Range |_Text Box__|
必须成为:

 |_Text Box__| <translated text into arabic or hebrew>
| | |文本框|
因此,您必须知道,翻译对话框不仅仅是翻译标签。您已经开始注意到这一点,因为标签长度不同

如果您选择使用一种非常简单的本地化机制,比如为每种语言创建一个文本文件(包含所有标签的列表),那么您只能尝试使用“一刀切”的语言调整标签的大小。对话框在某些语言中看起来不太好看。你将无法使用从右到左的语言。这是一条又快又脏的路

如果您想更进一步,最常见的方法是为每种语言创建一个资源文件。当您的程序即将完成时,您必须复制资源文件。每种语言都有一份副本。您可以本地化整个对话框、菜单等。用法语本地化对话框时,可以使标签字段变大。对于中国人来说更小。如果需要,还可以更改阿拉伯语对话框的布局。 当然,您必须为每种语言构建软件版本

你的帖子有MFC标签,所以我想你可能对MFC扩展DLL感兴趣。这是MFC应用程序处理本地化的标准方式。您创建的DLL只包含一个资源文件。如果支持10种语言,则复制和翻译10个资源文件,并创建10个扩展DLL。MFC会根据当前的Windows区域设置自动加载正确的DLL。参见示例


我不建议您编写一些在创建对话框时自动移动和调整控件大小的代码,因为这并不像看上去那么容易。除非你的应用程序非常简单。

有不同的方法来处理这个问题。答案取决于您在代码中处理本地化的方式

请注意,某些局部变量需要将显示从左到右->从右到左(阿拉伯语…)倒置 在这种情况下,您必须处理以下情况:

 Select Output Range |_Text Box__|
必须成为:

 |_Text Box__| <translated text into arabic or hebrew>
| | |文本框|
因此,您必须知道,翻译对话框不仅仅是翻译标签。您已经开始注意到这一点,因为标签长度不同

如果您选择使用一种非常简单的本地化机制,比如为每种语言创建一个文本文件(包含所有标签的列表),那么您只能尝试使用“一刀切”的语言调整标签的大小。对话框在某些语言中看起来不太好看。你将无法使用从右到左的语言。这是一条又快又脏的路

如果您想更进一步,最常见的方法是为每种语言创建一个资源文件。当您的程序即将完成时,您必须复制资源文件。每种语言都有一份副本。您可以本地化整个对话框、菜单等。用法语本地化对话框时,可以使标签字段变大。对于中国人来说更小。如果需要,还可以更改阿拉伯语对话框的布局。 当然,您必须为每种语言构建软件版本

你的帖子有MFC标签,所以我想你可能对MFC扩展DLL感兴趣。这是MFC应用程序处理本地化的标准方式。您创建的DLL只包含一个资源文件。如果支持10种语言,则复制和翻译10个资源文件,并创建10个扩展DLL。MFC会根据当前的Windows区域设置自动加载正确的DLL。参见示例


我不建议您编写一些在创建对话框时自动移动和调整控件大小的代码,因为这并不像看上去那么容易。除非你的应用程序非常简单。

尝试动态增加静态控件的大小@Aryabhata感谢您的回复,但随着我增加静态控件的大小,它将重叠在文本框控件上。@nyarlathotep nop这不是因为正如您所看到的,问题与多语言相关,而与文本大小无关!!首先,您需要计算将在静态控件上显示的文本的大小,并根据该大小重新排列窗体上或对话框上的所有控件。@Sankaganak再次休息