VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1727|回复: 10

如何去掉自动生成的菜单?

[复制链接]

1

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-2-15 23:30:01 | 显示全部楼层 |阅读模式
我建了一个单文档的程序,但是不想要toolbar和菜单,怎么样将wizard生成的默认菜单去掉?
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-4-18 18:00:01 | 显示全部楼层
应该可以在资源里删掉
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-4-19 08:30:01 | 显示全部楼层
用dialog
回复

使用道具 举报

1

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-4-20 11:45:01 | 显示全部楼层
我需要用到单文档框架,要有框架窗口,视图,文档这些东西,所以不能使用Dialog
回复

使用道具 举报

0

主题

59

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-4-20 13:45:01 | 显示全部楼层
SetMenu(NULL)
回复

使用道具 举报

0

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-4-20 14:00:01 | 显示全部楼层
toolbar在你建立工程的时候是可以不要的。
回复

使用道具 举报

1

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-4-21 00:15:01 | 显示全部楼层
SetMenu(NULL) 是可行的,但是wizard生成的菜单完全没用了
能不能把工程里面没用的菜单从资源里面删除掉呢?
我删了之后就出错了.
回复

使用道具 举报

0

主题

59

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-4-21 19:00:03 | 显示全部楼层
重载CFrameWnd::Create虚函数,自已进行处理,下面是MFC的源代码我没改过,相信这样的问题你会自已处理吧
BOOL CFrameWnd::Create(LPCTSTR lpszClassName,
        LPCTSTR lpszWindowName,
        DWORD dwStyle,
        const RECT& rect,
        CWnd* pParentWnd,
        LPCTSTR lpszMenuName,
        DWORD dwExStyle,
        CCreateContext* pContext)
{
        HMENU hMenu = NULL;
        if (lpszMenuName != NULL)
        {
                // load in a menu that will get destroyed when window gets destroyed
                HINSTANCE hInst = AfxFindResourceHandle(lpszMenuName, RT_MENU);
                if ((hMenu = ::LoadMenu(hInst, lpszMenuName)) == NULL)
                {
                        TRACE(traceAppMsg, 0, "Warning: failed to load menu for CFrameWnd.\n");
                        PostNcDestroy();            // perhaps delete the C++ object
                        return FALSE;
                }
        }

        m_strTitle = lpszWindowName;    // save title for later

        if (!CreateEx(dwExStyle, lpszClassName, lpszWindowName, dwStyle,
                rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top,
                pParentWnd->GetSafeHwnd(), hMenu, (LPVOID)pContext))
        {
                TRACE(traceAppMsg, 0, "Warning: failed to create CFrameWnd.\n");
                if (hMenu != NULL)
                        DestroyMenu(hMenu);
                return FALSE;
        }

        return TRUE;
}
回复

使用道具 举报

1

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-4-21 20:45:01 | 显示全部楼层
自己研究了一下,可以在CMainFrame的PreCreateWindow中将       
cs.hMenu = NULL;
就可以不显示菜单了,但是将没用的菜单删除后,运行程序会弹出
"建立空文档失败"的对话框,然后程序直接推出了,怎么解决这个问题啊?
回复

使用道具 举报

0

主题

59

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-4-22 16:15:01 | 显示全部楼层
你的程序是执行到PostNcDestroy();            // perhaps delete the C++ 这一行退出的吧,还是建议你重写Create函数
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表