关于WM中MFC单文档界面“新建”菜单和关闭按钮的处理
2009-12-27 15:41
615 查看
最近在网上看到很多通知为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就可以了
其实,处理起来很简单。
1、按(X)按钮无法关闭程序的处理方法:
在MainFrm.cpp中OnCreate中加入一句 SHDoneButton(TRUE); 就可以了。
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndCommandBar.Create(this) || !m_wndCommandBar.InsertMenuBar(IDR_MAINFRAME) || !m_wndCommandBar.AddAdornments(dwAdornmentFlags)) { TRACE0("未能创建 CommandBar/n"); return -1; // 未能创建 } m_wndCommandBar.SetBarStyle(m_wndCommandBar.GetBarStyle() | CBRS_SIZE_FIXED); SHDoneButton(TRUE); return 0; }
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就可以了
相关文章推荐
- 如何禁用窗口关闭按钮在一个 MFC 多文档界面 (MDI) 应用程序
- 如何禁用窗口关闭按钮在一个 MFC 多文档界面 (MDI) 应用程序
- CMFCTABCTRL 简介及BUG处理-------关闭按钮以及失焦刷新(窗体改变大小时)
- 用MFC自绘按钮,处理的消息包括WM_MOUSEHOVER、WM_MOUSELEAVE、WM_LBUTTONDOWN
- 桌面或文件夹里单击鼠标右键新建菜单下不显示文本文档的处理方法
- MFC单文档 关闭按钮屏蔽 最小化到托盘
- MFC对话框Enter键、Esc键、关闭按钮的消息处理
- 如何去掉MFC单文档右上角的关闭按钮
- win32关于对话框处理不到WM_KEYDOWN消息的解决办法(注:非MFC)
- 关于wxwidgets图形界面的关闭窗口的按钮无效的解决办法
- 桌面或文件夹里单击鼠标右键新建菜单下不显示文本文档的处理方法
- 魔改——MFC MDI程序 定制 文档模板 运行时全部打开 禁用关闭按钮
- 关于MFC中的界面线程和工作线程的处理
- 关于VS2013 MFC单文档菜单项设置复选框的出现的问题以及处理方法
- 关于模态/非模态对话框不响应菜单的UPDATE_COMMAND_UI消息(对对WM_INITMENUPOPUP消息的处理)
- MFC中实现单击按钮关闭单文档系统
- VC 2010 + MFC:自定义文档视图框架,去除新建、保存、打开等菜单功能,让文档程序个性化
- java中,如何处理点击关闭按钮 只是关闭当前的界面
- 通过按钮控件实现MDI新建子窗口(MFC自动生成的视图、文档、子框架共用)
- VS2013MFC单文档工程学习笔记二 - 新建一个按钮