您的位置:首页 > 其它

关于WM中MFC单文档界面“新建”菜单和关闭按钮的处理

2009-12-27 15:41 615 查看
最近在网上看到很多通知为Windows Mobile下MFC单文档界面点击右上角关闭(X)按钮不能真正关闭程序以及无法去掉“新建”菜单的困扰,如图:



其实,处理起来很简单。

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就可以了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐