随着Internet的发展,软件的国际化不可避免。一种软件可能被很多国家的人使用,如给您的软件加上多种语言的菜单,不但给使用者带来很多方便,也为您的软件的推广带来很多便利。比如给您开发的中文软件,加上一个英语或日语菜单,对母语为英语和日语的朋友将会带来很多便利。VC中实现多语菜单非常容易,下面以英汉对照菜单为例说明多语菜单实现的方法。
一、建立工程项目文件
采用VC中应用程序向导(AppWizard)建立一个工程项目:Menu。在可选者项中,选者单文档,语言为汉语,其余选者默认项。此时编译运行得到一个具有中文菜单的应用程序。下面将加入英文菜单到应用程序中。
二、修改建立菜单资源
在资源编辑器中打开菜单资源编辑器编辑IDR_MAINFRAME菜单资源,加入改变菜单的开关命令项。在查看项下加入菜单:
---- ID: ID_MENU_CHANGE Caption 英语(&E)
---- 关闭资源编辑器。用Windows的写字板打开项目下的资源文件Menu.rc找到如下内容:
IDR_MAINFRAME MENU PRELOAD DISCARDABLE
BEGIN
POPUP "文件(&F)"
BEGIN
MENUITEM "新建(&N)\tCtrl+N", ID_FILE_NEW
MENUITEM "打开(&O)...\tCtrl+O", ID_FILE_OPEN
MENUITEM "保存(&S)\tCtrl+S", ID_FILE_SAVE
MENUITEM "另存为(&A)...", ID_FILE_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "打印(&P)...\tCtrl+P", ID_FILE_PRINT
MENUITEM "打印预览(&V)", ID_FILE_PRINT_PREVIEW
MENUITEM "打印设置(&R)...", ID_FILE_PRINT_SETUP
MENUITEM SEPARATOR
MENUITEM "最近文件", ID_FILE_MRU_FILE1, GRAYED
MENUITEM SEPARATOR
MENUITEM "退出(&X)", ID_APP_EXIT
END
POPUP "编辑(&E)"
BEGIN
MENUITEM "撤消(&U)\tCtrl+Z", ID_EDIT_UNDO
MENUITEM SEPARATOR
MENUITEM "剪切(&T)\tCtrl+X", ID_EDIT_CUT
MENUITEM "复制(&C)\tCtrl+C", ID_EDIT_COPY
MENUITEM "粘贴(&P)\tCtrl+V", ID_EDIT_PASTE
END
POPUP "查看(&V)"
BEGIN
MENUITEM "工具栏(&T)", ID_VIEW_TOOLBAR
MENUITEM "状态栏(&S)", ID_VIEW_STATUS_BAR
MENUITEM "英语", ID_MENU_CHANGE
END
POPUP "帮助(&H)"
BEGIN
MENUITEM "关于 Menu(&A)...", ID_APP_ABOUT
END
END
---- 将上述内容复制到剪贴板中,然后拷贝一份到上述内容的下面,并作部分修改。将IDR_MAINFRAME改为DR_MAINFRAME_EN,其他汉语译成英语,并按英语菜单的习惯修改。改后的菜单资源如下:
IDR_MAINFRAME_EN MENU PRELOAD DISCARDABLE
BEGIN
POPUP "&File"
BEGIN
MENUITEM "New(&N)\tCtrl+N", ID_FILE_NEW
MENUITEM "Open(&O)...\tCtrl+O", ID_FILE_OPEN
MENUITEM "Save(&S)\tCtrl+S", ID_FILE_SAVE
MENUITEM "Save As(&A)...", ID_FILE_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "&Print...\tCtrl+P", ID_FILE_PRINT
MENUITEM "Print Pre&view", ID_FILE_PRINT_PREVIEW
MENUITEM "&Printer Reset...", ID_FILE_PRINT_SETUP
MENUITEM SEPARATOR
MENUITEM "Re¢ File", ID_FILE_MRU_FILE1, GRAYED
MENUITEM SEPARATOR
MENUITEM "E(&X)it", ID_APP_EXIT
END
POPUP "(&E)dit"
BEGIN
MENUITEM "&Undo\tCtrl+Z", ID_EDIT_UNDO
MENUITEM SEPARATOR
MENUITEM "Cu&T\tCtrl+X", ID_EDIT_CUT
MENUITEM "&Copy\tCtrl+C", ID_EDIT_COPY
MENUITEM "&Paste\tCtrl+V", ID_EDIT_PASTE
END
POPUP "&View"
BEGIN
MENUITEM "&Tool bar", ID_VIEW_TOOLBAR
MENUITEM "&Status bar", ID_VIEW_STATUS_BAR
MENUITEM "&Chinese", ID_MENU_CHANGE
END
POPUP "&Help"
BEGIN
MENUITEM "&About Menu...", ID_APP_ABOUT
END
END
---- 保存修改后的资源文件。把资源文件重新调入资源编辑器,可发现已有两套菜单资源。如有什么不合适的地方可在资源编辑器中做进一步修改。
---- 三、加入菜单变量到程序中
---- 由于菜单附属于主窗口,所以应在CMainFrame类中加入相关变量:
public:
CMenu m_pEnglish;\\用于保存英语菜单资源
CMenu m_pChinese;\\用于保存汉语菜单资源
enum{C,E}m_eMenu;\\标示现在使用的是英语
菜单还是汉语菜单,C--汉语,E--英语
---- 四、初始化变量 需要初始化的变量仅有一个m_eMenu。由于开始时菜单使用默认中文菜单,所以在CMainFrame构造函数中初始化:
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
m_Menu=C;
}
---- 五、调入保存菜单资源
---- 在主窗口的OnCreate函数中,初始化并保存菜单资源:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
.......
m_pEnglish.LoadMenu(IDR_MAINFRAME_EN);\\调入英文菜单资源
HMENU hm=::GetMenu(this- >m_hWnd) ;\\获得中文菜单资源
m_pChinese.Attach(hm); \\保存中文菜单资源
return 0;
}
---- 六、响应改变菜单命令
---- 利用ClassWizard为CMainFrame类加入ID_MENU_CHANGE菜单命令响应函数:
void CMainFrame::OnMenuChange()
{
// TODO: Add your command handler code here
if(m_Menu==E) //如果现在菜单为英语
{
SetMenu(&m_pChinese);// 把菜单设置为汉语
m_Menu=C;
}
else if(m_Menu==C) //如果现在菜单为汉语
{
SetMenu(&m_pEnglish);//设置菜单为英语
m_Menu=E;
}
}
---- 七、销毁菜单
---- 在CMainFrame的析够函数中销毁菜单:
CMainFrame::~CMainFrame()
{
m_pChinese.DestroyMenu();
m_pEnglish.DestroyMenu();
}
---- 编译运行程序您就可以获得一个具有英汉对照菜单的应用程序。
---- 八、结束语
---- 上述例子虽然只给除了两种语言的菜单,但很容易编出多语言菜单的应用程序。由于各种语言菜单实际上是不同的菜单资源,所以,在同一应用程序中,可以使用不同的菜单。如共享软件中注册的用户使用一种菜单,未注册的用户使用另一种菜单,而不必发行多个版本和多次安装,从而使注册变得容易并能得到软件更多的功能。
分享到:
相关推荐
VC 中多语菜单的实现 VC 中多语菜单的实现
在VC中实现Undo和Redo功能。 VC 利用底层键盘钩子屏蔽任意按键MaskKey 动态链接库实现钩子,然后程序调用。 VC 透明窗口效果的电子标尺源代码 实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作...
在VC中实现Undo和Redo功能。 VC 利用底层键盘钩子屏蔽任意按键MaskKey 动态链接库实现钩子,然后程序调用。 VC 透明窗口效果的电子标尺源代码 实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作...
在VC中实现Undo和Redo功能。 VC 利用底层键盘钩子屏蔽任意按键MaskKey 动态链接库实现钩子,然后程序调用。 VC 透明窗口效果的电子标尺源代码 实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作...
在VC中实现Undo和Redo功能。 VC 利用底层键盘钩子屏蔽任意按键MaskKey 动态链接库实现钩子,然后程序调用。 VC 透明窗口效果的电子标尺源代码 实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作...
在VC中实现Undo和Redo功能。 VC 利用底层键盘钩子屏蔽任意按键MaskKey 动态链接库实现钩子,然后程序调用。 VC 透明窗口效果的电子标尺源代码 实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作...
本程序的中导航菜单采用的是中文,最好选用VC或者支持中文的TC,如果你的编译器 不支持中文,可考虑讲其中的中文换为英文或者拼音。 本程序中的输入数据时,默认的必须输入5个,不过也可以修改,详见注释
内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...
一、选题要求学生要独立编写(编程语言不限)一个应用软件或较大软件中的一个模块,要 有足够的工作量,能够独立在计算机上运行。具体要写出5000字以上的软件说明论文和程序设 计部分代码。 二、论文格式:论文题目...
15.4 接口的实现 .182 15.5 抽象类与接口 .195 15.6 小 结 .196 第十六章 组织应用程序 .198 16.1 基 本 概 念 .198 16.2 使用名字空间 .200 16.3 使用指示符 .203 16.4 程 序 示 例 .206 16.5 小 ...
只要打开filedisk核心层.dsw,VC自动把filedisk应用层和核心层这两个工程打开。 -------------------------------------------------------------------------------- 【经验总结】 下次继续分析,如何驱动加密...
数字电路制造工业的进步,使得系统设计人员能在更小的空间内实现更多的功 能,从而提高系统可靠性和速度。 集成电路的类型很多,从大的方面可以分为模拟电路和数字集成电路2 大 类。数字集成电路广泛用于计算机、...