菜单的国际化

deyi 2003-12-28 05:15:02
大家好。
我现在想做一个系统,要能支持多国语言(中英日等)。
所有的资源文件走在配置ini中实行。
我的系统是多文档多视图。在试图切换、开闭时,菜单要能相应的改变。
我在视图的激活事件中处理,
但是,主框架的闪烁很厉害(视图改变、开闭时,菜单都得得重置)。

我现在的效果很差。
请教大家有没有好的办法,
...全文
244 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
deyi 2003-12-29
  • 打赏
  • 举报
回复
谢谢大家的参与。我在菜单的变更时,去掉了SetMenu(NULL) 语句。
闪烁好多了。
现在我有新的问题
不知有没有哪一个方法来进行设置创窗口列表的的位置。我的子窗口列表在资源文件中是显示可以自动显示。
但是我动态用AppendMenu时,就没有窗口列表。
我不知道是哪一个属性来设置请大家帮忙。

谢谢。

deyi 2003-12-29
  • 打赏
  • 举报
回复
谢谢大家。
我的另一问题在
http://expert.csdn.net/Expert/topic/2613/2613904.xml?temp=.3062708

还请大家的帮助。

jackwuwei 2003-12-28
  • 打赏
  • 举报
回复
我觉得这样也挺好的,方便.
deyi 2003-12-28
  • 打赏
  • 举报
回复
谢谢大家。我问的时,我指通过INI文件的方式建立动态菜单。
功能已经时线。
就是效果不好。
jackwuwei 2003-12-28
  • 打赏
  • 举报
回复
转载自vckbase,本文属于第18期,具体代码那里有下的
jackwuwei 2003-12-28
  • 打赏
  • 举报
回复
五、加入菜单函数 void CMainFrame::OnMenuChange()
{
if(m_current==e)
{
SetMenu(&m_chinesemenu);
m_current=c;
}
else
{
SetMenu(&m_englistmenu);
m_current=e;
}

}
编译运行程序您就可以获得一个具有英汉对照菜单的应用程序。
jackwuwei 2003-12-28
  • 打赏
  • 举报
回复
一、建立工程项目文件
选择语言为中文,其余采用默认,添加中英文切换菜单IDD_MENU_CHANGE
二、用文本形式打开资源文件,找到IDR_MAINFRAME的菜单文本内容如下:
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 "弹出CD", ID_VIEW_FULLSCREEN
MENUITEM "英文", ID_MENU_CHANGE
END
POPUP "帮助(&H)"
BEGIN
MENUITEM "关于 FullScreen(&A)...", ID_APP_ABOUT
END
END
在此后加入英文菜单资源复制上述文本,把其中的中文改成英文,并作些改动IDR_MAINFRAME_ENGLISH MENU PRELOAD DISCARDABLE
BEGIN
POPUP "File(&F)"
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(&P)...\tCtrl+P", ID_FILE_PRINT
MENUITEM "Print Preview(&V)", ID_FILE_PRINT_PREVIEW
MENUITEM "Print Setting(&R)...", ID_FILE_PRINT_SETUP
MENUITEM SEPARATOR
MENUITEM "Recent Files", ID_FILE_MRU_FILE1, GRAYED
MENUITEM SEPARATOR
MENUITEM "Exit(&X)", ID_APP_EXIT
END
POPUP "Edit(&E)"
BEGIN
MENUITEM "Undo(&U)\tCtrl+Z", ID_EDIT_UNDO
MENUITEM SEPARATOR
MENUITEM "Cut(&T)\tCtrl+X", ID_EDIT_CUT
MENUITEM "Copy(&C)\tCtrl+C", ID_EDIT_COPY
MENUITEM "Paste(&P)\tCtrl+V", ID_EDIT_PASTE
END
POPUP "View(&V)"
BEGIN
MENUITEM "ToolBar(&T)", ID_VIEW_TOOLBAR
MENUITEM "StatusBar(&S)", ID_VIEW_STATUS_BAR
MENUITEM "Eject CD", ID_VIEW_FULLSCREEN
MENUITEM "Chinese", ID_MENU_CHANGE
END
POPUP "Help(&H)"
BEGIN
MENUITEM "About FullScreen(&A)...", ID_APP_ABOUT
END
END
修改完成后保存资源。
三、在 CMainFrame中加入变量CMenu m_englistmenu 和m_chinesemenu保存中英文菜单资源
加入变量enum Enum{e,c}m_current 保存当前菜单
四、由于默认为中文菜单在 CMainFrame::CMainFrame()中设置m_current=c;表示当前为中文菜单,在CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中装入英文菜单资源 m_englistmenu.LoadMenu("IDR_MAINFRAME_ENGLISH");
HMENU m_hMenu=::GetMenu(this->m_hWnd); // 保存中文菜单
m_chinesemenu.Attach(m_hMenu);
sharpblade 2003-12-28
  • 打赏
  • 举报
回复
用dll實現
deyi 2003-12-28
  • 打赏
  • 举报
回复
我只能通过ini文件来对应。要求不能通过菜单的资源文件多版本来处理。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧