[转]修改菜单(系统菜单)

来源:互联网 发布:淘宝搜索 编辑:程序博客网 时间:2024/05/22 13:54

1、用CWnd::GetSystemMenu()获取系统菜单的CMenu指针

 CMenu *pSysMenu=NULL;
 pSysMenu=AfxGetMainWnd()->GetSystemMenu(FALSE);
 pSysMenu->RemoveMenu(SC_CLOSE,MF_BYCOMMAND);//删除关闭菜单
 pSysMenu->AppendMenu(MF_STRING,ID_MENU_TEMP,"&Close");//增加菜单

2、用WM_SYSCOMMAND消息处理函数响应自己增加的菜单

void CMainFrame::OnSysCommand(UINT nID, LONG lParam)
{
 switch(nID) {
 case ID_MENU_TEMP:
  exit(0);
 }
}

PS:其它标准系统菜单命令ID如下:

SC_SIZE

SC_MOVE

SC_MINIMIZE

SC_MAXIMIZE

SC_NEXTWINDOW

SC_PREVWINDOW

SC_RESTORE

 

 

------------------------------------------------------------------------------------------------------------

 

多语言支持,已经是桌面应用软件的发展趋势。用句流行的词就是“国际化”。除了语言翻译的工作外,比较重要的就是字符的编码问题。不过这些问题的讨论已经铺天盖地了,我就不想再多说细节了。我在此只记录一下我的软件“国际化”中的一个技术小片段:用ModifyMenu来动态加载文本信息,实现菜单内容的本地化功能。

        ModifyMenu函数原型:

/**//** MFC中的函数原型 */

/**//**
  * @param nPosition 该菜单项所在的位置索引,以0为第一个
  * @param nFlags 标志位,MF_BYCOMMAND、MF_BYPOSITION、MF_STRING,之间可以联合使用
  * @param nIDNewItem 资源ID
  * @param lpszNewItem 菜单内容文本
  */
BOOL ModifyMenu(
   UINT nPosition,
   UINT nFlags,
   UINT_PTR nIDNewItem = 0,
   LPCTSTR lpszNewItem = NULL
);

/**//**
  * @param nPosition 该菜单项所在的位置索引,以0为第一个
  * @param nFlags 标志位,MF_BYCOMMAND、MF_BYPOSITION、MF_STRING,之间可以联合使用
  * @param nIDNewItem 资源ID
  * @param pBmp  图片资源
  */
BOOL ModifyMenu(
   UINT nPosition,
   UINT nFlags,
   UINT_PTR nIDNewItem,
   const CBitmap* pBmp
);

详细说明:   MF_BYPOSITION主要用于通过偏移位置来标注需要操作的菜单项;MF_BYCOMMAND主要用于命令ID的情况;MF_STRING主要用于POPUP的菜单项更改文本内容。其中特别注意,资源ID必须不能被修改,否则原来定义的响应事件将失去作用。

        下面是我应用的一个代码片段:

menu.LoadMenu(IDR_MENU_BLANK); //装载自定义的右键菜单
menu.GetSubMenu(0)->ModifyMenu(0, MF_BYPOSITION | MF_STRING, ID_VIEW, LoadStringEx(ID_VIEW));
menu.ModifyMenu(ID_REFRESH, MF_BYCOMMAND, ID_REFRESH, LoadStringEx(ID_REFRESH));
menu.ModifyMenu(ID_PASTE, MF_BYCOMMAND, ID_PASTE, LoadStringEx(ID_PASTE));
menu.GetSubMenu(0)->ModifyMenu(6, MF_BYPOSITION | MF_STRING, ID_CREATE, LoadStringEx(ID_CREATE));
menu.ModifyMenu(ID_32787, MF_BYCOMMAND, ID_32787, LoadStringEx(ID_32787));
menu.ModifyMenu(ID_32788, MF_BYCOMMAND, ID_32788, LoadStringEx(ID_32788));
menu.ModifyMenu(ID_32790, MF_BYCOMMAND, ID_32790, LoadStringEx(ID_32790));
menu.ModifyMenu(ID_32791, MF_BYCOMMAND, ID_32791, LoadStringEx(ID_32791));
        说点题外话:我要开始学习苹果Mac系统的开发了,听说比较难,搞得我也很有压力。不管了,在工作中学习,在项目中进步。学好自己想做的,不管怎么说做Mac上开发的人毕竟是少数,以后应该也算是紧俏人才吧?呵呵。想法可能太美好了。给自己加油!


转载请标明出处:http://blog.csdn.net/bengold1979/archive/2008/05/05/2395786.aspx

                        http://ruson523.blog.163.com/blog/static/3774855020071125321142/

原创粉丝点击