CDialog里OK,Cancel,Apply,Help按钮Caption名称能随系统变动自动获得吗? 大家都知道,CPropertySheet的下面几个按钮,在英文操作系统中为:OK,Cancel,Apply,Help,在中文操作系统中为:确定,取消,应用,和帮助,这些资源会随着操作系统而改变,现在,我要在一个标准的CDialog(请注意不是CPropertySheet)里也要用到这几个按钮,也希望达到这种效果,能做到吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 想想Windows是怎么实现的,也许参照这个方法,就有办法了。1,我想,你的意思是:你的一个对话框,有几个按钮,就是确定、取消、应用和帮助,然后这几个按钮在不同的语言的操作系统中,将自动选择该语言所用的文本;2,如果是这样,那问题就好办了。我想Windows的实现中,对每一种语言,都有相应的对话框资源,而资源中使用的文本随着操作系统语言的不同而不同,比如中文操作系统,做一个中文的对话框,其中的按钮使用中文的;在英文操作系统中,做一个英文的对话框,其中的按钮使用英文的;3,这些资源可以做在不同的动态库中,这些动态库可以使用相同的文件名,不过,在不用的操作系统中,使用不同的动态库文件。4,不知道说明白了没有。 我想这个和你在用VC建立工程的时候所选择的语言有关,如果你在中文操作系统中选择的是英语,那么这些默认的按钮显示的就是英语,如果你在英文操作系统上选择的语言是中文,默认的按钮的文本就应该是中文的!这个只不过是建立工程时生成的资源文件的不同,现在有很多汉化的游戏,包括现在中文版的windows不都是通过汉化资源文件和其他一些和资源有关的东西来实现的吗!上面是我对此问题的一些看法,楼主可以参考一下!希望对你有所帮助! 谢谢大家的建议,我想MilitaryMiniatures(++)第一点说的就是我的意思,大家说的方法我也知道,为了这几个按钮标准化如果让我做n多个版本,再说如果这个东西如果要在几十个国家(语言)应用,我不是要做几十个语言的版本?但是我希望的是能利用一个VC里提供的什么函数直接得到这个字符串,类似于得到系统资源的串值一样,如:BOOL GetComputerName( LPTSTR lpBuffer, // computer name LPDWORD lpnSize // size of name buffer);就能得到计算机名;UINT GetSystemDirectory( LPTSTR lpBuffer, // buffer for system directory UINT uSize // size of directory buffer);通过lpBuffer就能得到system directory名大家帮我想想哈,高分等着~~~~ "这个只不过是建立工程时生成的资源文件的不同"这句话,在概念上,我不是很赞同。说说我的浅见,不对的地方,请大家指正。1,这句话的意思,是我们生成的资源文件中,资源的语言类型会根据操作系统的语言来确定,也就是说,如果我们使用的是中文的操作系统,生成的资源文件将会是中文的,如果我们使用的是英文的操作系统,生成的资源文件将会是英文的;2,既然1是对的,那么,也就是生成的资源文件只有一种类型,也就是说,待生成了可执行文件之后,在不同的操作系统中,这个软件都只能显示一种语言文字,比如在英文操作系统,在中文操作系统下,都只能显示英文/或只能显示中文;3,对于属性框,资源文件里面,没有属性框的资源,只有属性页的资源;4,可以生成一个test程序,其中包含一个属性框,然后在英文操作系统、中文操作系统下分别运行这个程序,那么将会发现,这几个按钮“确定”“取消”等,将按照操作系统的语言类型显示不同的文种;这和2是矛盾的;5,一些英文软件,在中文操作系统下,属性框中的几个按钮也将显示中文;6,注意,我这里说的是,就事论事,属性框(MFC中CPropertySheet),当然这种情况也适用于文件、打印、颜色等几个常用的对话框(Common Dialog);7,综上所述,属性框应该是在Windows中实现的,而不是在生成的资源文件中的,既然是Windows中实现了这个属性框,那么自然它可以按照不同的操作系统的语言不同,选择不同的资源了;8,事实上,CPropertySheet只是一个MFC类,实现属性框的API函数也是有的,既然是API,那么自然它就不是MFC的一部分。这个API函数就是:int PropertySheet( LPCPROPSHEETHEADER lppsph); 3DMan (子弹满满)的想法,我很支持!因为,事实上,我做的软件也一直朝这个方面努力!算是志同道合!这个方面也是通用软件,或者说,自适应能力强的软件方面努力。如果是自己的对话框,一般的实现方法需要根据不同的语言类型,作不同的资源dll,当然,只限于资源动态库。然后按照不同的语言类型,安装不同的资源动态库。 嗯,还是MilitaryMiniatures(++) 研究的深入,佩服~~我开始也想着用CPropertySheet来代替我要的CDialog,因为我的Dialog里只有一个页面,所以我想将那些资源先放在一个无Title的child窗口里,然后嵌进这个CPropertySheet里,而且我不希望出现那个tab,但发现CPropertySheet不加CPropertySheetPage好像显示不出来(我用代码测试了一下,也有可能我的代码有问题)。 给按钮添加图片的过程中的MFC变化 介绍本学COM,ATL的好书。 要从一个目录下读取文件然后组织成二叉树.大家给点例子.谢谢 微软的sendto和recvfrom都怎么么,疯了? FTP上传问题!!! 好地方,大家去看看,很多好书提供下载的 点对点的语音传输问题 有漂亮的菜单代码么? 请问,当我重载CToolBar 的OnPaint函数时???? 工作难找啊,看来看去都是delphi在做MIS。只熟悉MFC怎么办? 文档保存失败是什么回事情?高手指点 GetOverlappedResult函数的作用、返回值及各参数的意思和关系是什么?
1,我想,你的意思是:你的一个对话框,有几个按钮,就是确定、取消、应用和帮助,然后这几个按钮在不同的语言的操作系统中,将自动选择该语言所用的文本;
2,如果是这样,那问题就好办了。我想Windows的实现中,对每一种语言,都有相应的对话框资源,而资源中使用的文本随着操作系统语言的不同而不同,比如中文操作系统,做一个中文的对话框,其中的按钮使用中文的;在英文操作系统中,做一个英文的对话框,其中的按钮使用英文的;
3,这些资源可以做在不同的动态库中,这些动态库可以使用相同的文件名,不过,在不用的操作系统中,使用不同的动态库文件。
4,不知道说明白了没有。
但是我希望的是能利用一个VC里提供的什么函数直接得到这个字符串,类似于得到系统资源的串值一样,如:
BOOL GetComputerName(
LPTSTR lpBuffer, // computer name
LPDWORD lpnSize // size of name buffer
);
就能得到计算机名;UINT GetSystemDirectory(
LPTSTR lpBuffer, // buffer for system directory
UINT uSize // size of directory buffer
);
通过lpBuffer就能得到system directory名大家帮我想想哈,高分等着~~~~
这句话,在概念上,我不是很赞同。说说我的浅见,不对的地方,请大家指正。
1,这句话的意思,是我们生成的资源文件中,资源的语言类型会根据操作系统的语言来确定,也就是说,如果我们使用的是中文的操作系统,生成的资源文件将会是中文的,如果我们使用的是英文的操作系统,生成的资源文件将会是英文的;
2,既然1是对的,那么,也就是生成的资源文件只有一种类型,也就是说,待生成了可执行文件之后,在不同的操作系统中,这个软件都只能显示一种语言文字,比如在英文操作系统,在中文操作系统下,都只能显示英文/或只能显示中文;
3,对于属性框,资源文件里面,没有属性框的资源,只有属性页的资源;
4,可以生成一个test程序,其中包含一个属性框,然后在英文操作系统、中文操作系统下分别运行这个程序,那么将会发现,这几个按钮“确定”“取消”等,将按照操作系统的语言类型显示不同的文种;这和2是矛盾的;
5,一些英文软件,在中文操作系统下,属性框中的几个按钮也将显示中文;
6,注意,我这里说的是,就事论事,属性框(MFC中CPropertySheet),当然这种情况也适用于文件、打印、颜色等几个常用的对话框(Common Dialog);
7,综上所述,属性框应该是在Windows中实现的,而不是在生成的资源文件中的,既然是Windows中实现了这个属性框,那么自然它可以按照不同的操作系统的语言不同,选择不同的资源了;
8,事实上,CPropertySheet只是一个MFC类,实现属性框的API函数也是有的,既然是API,那么自然它就不是MFC的一部分。这个API函数就是:
int PropertySheet(
LPCPROPSHEETHEADER lppsph
);
如果是自己的对话框,一般的实现方法需要根据不同的语言类型,作不同的资源dll,当然,只限于资源动态库。然后按照不同的语言类型,安装不同的资源动态库。