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/