asp.net 删除MFC单文档默认菜单栏的两种方法
程序员文章站
2024-03-07 21:06:57
有两种方法: 第一种方法:重载框架类的create函数,具体代码如下: 复制代码 代码如下: bool cmainframe::create(lpctstr lpszcla...
有两种方法:
第一种方法:重载框架类的create函数,具体代码如下:
bool cmainframe::create(lpctstr lpszclassname, lpctstr lpszwindowname, dword dwstyle , const rect& rect , cwnd* pparentwnd , lpctstr lpszmenuname , dword dwexstyle , ccreatecontext* pcontext)
{
// todo: 在此添加专用代码和/或调用基类
// return cframewnd::create(lpszclassname, lpszwindowname, dwstyle, rect, // //pparentwnd, lpszmenuname, dwexstyle, pcontext);
hmenu nidorhmenu = null;
return cframewnd::createex(dwexstyle,lpszclassname,lpszwindowname,dwstyle,
rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,
pparentwnd->getsafehwnd(),
nidorhmenu,
(lpvoid)pcontext);
}
第二种方法:手动删除所有菜单项。具体是先定义一个删除所有菜单项的函数:
/*!
* \brief 删除所有的菜单栏。
*
* 删除窗口的所有菜单栏。
* \return 无。
*/
static void delallmenu(hmenu hmenu)
{
// 首先删除多余的菜单项
int menucount = getmenuitemcount(hmenu);
for (int i = menucount-1;i>-1;i--)
{
::deletemenu(hmenu,i, mf_byposition);
}
}
然后在框架类的oncreate函数调用这个函数,具体如下:
int cmainframe::oncreate(lpcreatestruct lpcreatestruct)
{
if (cframewnd::oncreate(lpcreatestruct) == -1)
return -1;
if (!m_wndtoolbar.createex(this, tbstyle_flat, ws_child | ws_visible | cbrs_top
| cbrs_gripper | cbrs_tooltips | cbrs_flyby | cbrs_size_dynamic) ||
!m_wndtoolbar.loadtoolbar(idr_mainframe))
{
trace0("未能创建工具栏\n");
return -1; // 未能创建
}
if (!m_wndstatusbar.create(this) ||
!m_wndstatusbar.setindicators(indicators,
sizeof(indicators)/sizeof(uint)))
{
trace0("未能创建状态栏\n");
return -1; // 未能创建
}
// todo: 如果不需要工具栏可停靠,则删除这三行
m_wndtoolbar.enabledocking(cbrs_align_any);
enabledocking(cbrs_align_any);
dockcontrolbar(&m_wndtoolbar);
// 获取窗口的菜单句柄
cmenu *pmenu = getmenu();
if (null!=pmenu)
{
delallmenu(pmenu->getsafehmenu());
}
return 0;
}
第一种方法:重载框架类的create函数,具体代码如下:
复制代码 代码如下:
bool cmainframe::create(lpctstr lpszclassname, lpctstr lpszwindowname, dword dwstyle , const rect& rect , cwnd* pparentwnd , lpctstr lpszmenuname , dword dwexstyle , ccreatecontext* pcontext)
{
// todo: 在此添加专用代码和/或调用基类
// return cframewnd::create(lpszclassname, lpszwindowname, dwstyle, rect, // //pparentwnd, lpszmenuname, dwexstyle, pcontext);
hmenu nidorhmenu = null;
return cframewnd::createex(dwexstyle,lpszclassname,lpszwindowname,dwstyle,
rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,
pparentwnd->getsafehwnd(),
nidorhmenu,
(lpvoid)pcontext);
}
第二种方法:手动删除所有菜单项。具体是先定义一个删除所有菜单项的函数:
复制代码 代码如下:
/*!
* \brief 删除所有的菜单栏。
*
* 删除窗口的所有菜单栏。
* \return 无。
*/
static void delallmenu(hmenu hmenu)
{
// 首先删除多余的菜单项
int menucount = getmenuitemcount(hmenu);
for (int i = menucount-1;i>-1;i--)
{
::deletemenu(hmenu,i, mf_byposition);
}
}
然后在框架类的oncreate函数调用这个函数,具体如下:
复制代码 代码如下:
int cmainframe::oncreate(lpcreatestruct lpcreatestruct)
{
if (cframewnd::oncreate(lpcreatestruct) == -1)
return -1;
if (!m_wndtoolbar.createex(this, tbstyle_flat, ws_child | ws_visible | cbrs_top
| cbrs_gripper | cbrs_tooltips | cbrs_flyby | cbrs_size_dynamic) ||
!m_wndtoolbar.loadtoolbar(idr_mainframe))
{
trace0("未能创建工具栏\n");
return -1; // 未能创建
}
if (!m_wndstatusbar.create(this) ||
!m_wndstatusbar.setindicators(indicators,
sizeof(indicators)/sizeof(uint)))
{
trace0("未能创建状态栏\n");
return -1; // 未能创建
}
// todo: 如果不需要工具栏可停靠,则删除这三行
m_wndtoolbar.enabledocking(cbrs_align_any);
enabledocking(cbrs_align_any);
dockcontrolbar(&m_wndtoolbar);
// 获取窗口的菜单句柄
cmenu *pmenu = getmenu();
if (null!=pmenu)
{
delallmenu(pmenu->getsafehmenu());
}
return 0;
}
上一篇: PHP实现图片批量打包下载功能