最近在网上看到很多通知为Windows Mobile下MFC单文档界面点击右上角关闭(X)按钮不能真正关闭程序以及无法去掉“新建”菜单的困扰,如图:
其实,处理起来很简单。
1、按(X)按钮无法关闭程序的处理方法:
在MainFrm.cpp中OnCreate中加入一句 SHDoneButton(TRUE); 就可以了。
2、定制“新建”菜单
在VS中,选择资源文件中的****.rc2” ,右键选择查看代码:
IDR_MAINFRAME SHMENUBAR DISCARDABLE
BEGIN
IDR_MAINFRAME,
2,
I_IMAGENONE, ID_FILE_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,
IDS_NEW, 0, NOMENU,
I_IMAGENONE, IDM_MENU, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE,
IDS_MENU, 0, 0,
END
问题就出现在上面红色标记的代码中,ID_FILE_NEW很明显,是菜单的ID,TBSTYLE_BUTTON表明该菜单只是一个按钮而没有下拉子菜单,IDS_NEW对应的是ID_FILE_NEW在String Table中的字符串ID号,也就是ID_FILE_NEW菜单显示的文字。只要替换掉ID_FILE_NEW为自己的菜单就OK了。
打开资源管理器中的IDR_MAINFRAME菜单编辑,如图:
本人添加了一个“选项”菜单,ID号为:ID_OPTIONS,然后在String Table中加入一个ID号为IDS_OPTIONS的字符串,值为“选项”
然后更改上面的RC2代码为:
IDR_MAINFRAME SHMENUBAR DISCARDABLE
BEGIN
IDR_MAINFRAME,
2,
I_IMAGENONE, ID_OPTIONS, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE,
IDS_OPTIONS, 0, 1,
I_IMAGENONE, IDM_MENU, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE,
IDS_MENU, 0, 0,
END
再次运行程序,如下图所示:
请注意RC2中黄色标出的数字(1),表示第2个子菜单,也就是我们设计菜单中的“高级解码器、字幕选项”菜单。
如果只想去掉“新建”菜单替换成“退出”之类的按钮(不包含子菜单),就将上述RC2中代码的TBSTYLE_DROPDOWN更改为:TBSTYLE_BUTTON就可以了