VC中多语菜单的实现

原创 2000年08月19日 04:33:00
---- 随着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改为
IDR_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中多语菜单的实现---- 随着Internet的发展,软件的国际化不可避免。一种软件可能被很多国家的人使用,如给您的软件加上多种语言的菜单,不但给使用者带来很多方便,也为您的软件的推广带来很多便利...
  • liyonghust
  • liyonghust
  • 2006年08月13日 14:26
  • 814

VC实现抽屉菜单

用vc做了一个简单的抽屉菜单,界面非常简单,只是实现了功能而已。界面包括3个按钮,一个对话框。 下面讲解设计过程:1)在对话框类中加入如下变量 int m_left;    // 按钮的左边坐标 in...
  • momentt
  • momentt
  • 2008年12月15日 13:43
  • 2185

vc学习历程(3)--修改系统默认菜单

为了操作系统菜单,首先需要获取一个系统菜单的指针 可以通过GetSystemMenu  实现,然后利用菜单指针添加一个菜单项,最后在对话框的OnSysCommand方法中处理菜单项的命令;CMenu*...
  • lin_angle
  • lin_angle
  • 2007年08月22日 22:35
  • 2527

VC++的菜单控制和自绘菜单。

菜单控制为什么即使调用EnableMenuItem菜单项后,菜单项还处于禁止状态  需要将CFrameWnd:: m_bAutomenuEnable设置为FALSE,如果该数据成员为TRUE(缺省值)...
  • gsky
  • gsky
  • 2007年02月01日 13:13
  • 835

给vc6对话框添加菜单

新建一个iMu对话框框工程或打开一个对话框工程。切换到资源窗口(ResourceView)在项目资源(iMu resources)上右单击鼠标,选择Insert...,选择Menu,点击New按钮,完...
  • chinaboyzyq
  • chinaboyzyq
  • 2016年09月27日 11:34
  • 1056

VC精华教程MFC入门系列(三)添加菜单

VC精华教程MFC入门系列(三)添加菜单MFC入门系列(三)  我先申明一下以免很多网友可能误会我,在VC方面我也是刚脱贫还未致富,我写这些文章就是因为我脱贫的时候太艰辛,希望大家能够共同富裕。  上...
  • ganjinyou
  • ganjinyou
  • 2006年05月09日 20:08
  • 4955

VC++ MFC 系统菜单添加子菜单 CMENU submenu GetSystemMenu

在系统菜单怎么添加一个菜单我就不说了,网上比较多,但是也比较笼统,后面会有代码放出。这里主要说的是怎么添加子菜单,使用AppendMenu和InsertMenu都可以,然后在处理的时候判断ID就可以了...
  • lanmanck
  • lanmanck
  • 2016年08月05日 22:00
  • 1952

VC++任务栏托盘图标及右键菜单实现

Windows 95以及后来的Windows版本允许你将程序图标放入系统托盘。所谓系统托盘,通常指的是屏幕右下方显示时间,音量等图标的那个区域。托盘图标通常可以执行一些快捷操作,如窗口隐藏时通常最小化...
  • u010561359
  • u010561359
  • 2013年06月04日 14:52
  • 2017

VC2010 对话框显示菜单栏并响应

1. 新建项目,在resourceview视图添加新的菜单(右键)     2. 在下图Type Here处添加菜单内容。 注意,当定义了二级及以后菜单后,一级菜单就不能再更改ID了,也不再有响...
  • phenixyf
  • phenixyf
  • 2015年01月14日 17:37
  • 3014

VC++实现弹出菜单(转)

用VC++实现弹出菜单比较简单,这里介绍其中的一种来实现一个鼠标左键弹出菜单,效果如下图所示: 步骤: 一、新建一个基于对话框的MFC应用程序-----PopupMenu 二...
  • adu285041555
  • adu285041555
  • 2013年02月25日 10:44
  • 672
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC中多语菜单的实现
举报原因:
原因补充:

(最多只允许输入30个字)