c++ - 仅在 MFC 菜单栏上禁用自定义

标签 c++ mfc customization mfc-feature-pack cmfctoolbar

在 VS2010 中使用 MFC 功能包时,是否可以禁用 CMFCMenuBar 上的自定义功能,但在工具栏上保持启用状态?我们不希望用户四处拖动菜单,但他们可以自由更改工具栏。

我们禁止在退出时将 CMFCMenuBar 的状态保存到注册表中,但菜单仍然可以在运行时四处移动或删除。

更新: 按照 xMRi 的回答,我在派生菜单类的构造函数中将 m_bDisableCustomize 设置为 TRUE。我注意到有一个重绘问题,在自定义过程中单击菜单会在整个菜单上绘制黑框。这让我找到了 http://www.bcgsoft.com/cgi-bin/forum/topic.asp?TOPIC_ID=2643

我不想修改 MFC 源代码,所以我改为处理消息:

//{{AFX_MSG_MAP(CMyMFCMenuBar)
BEGIN_MESSAGE_MAP(CMyMFCMenuBar, CMFCMenuBar)
    ON_WM_LBUTTONDOWN()
    ON_WM_CONTEXTMENU()
END_MESSAGE_MAP()
//}}AFX_MSG_MAP

void CMyMFCMenuBar::OnLButtonDown(UINT nFlags, CPoint point)
{
    CMFCMenuBar::OnLButtonDown(nFlags, point);
    Invalidate();
}

void CMyMFCMenuBar::OnContextMenu(CWnd* pWnd, CPoint pos)
{
    if (IsCustomizeMode())
        return;
    CMFCMenuBar::OnContextMenu(pWnd, pos);
}

这似乎解决了重绘问题。如果有更好的方法来解决重绘问题,请告诉我。

最佳答案

设置成员变量m_bDisableCustomize为TRUE。

关于c++ - 仅在 MFC 菜单栏上禁用自定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19666797/

相关文章:

c++ - VS2010 中的 Magick++ - 未解析的外部符号

C++ MFC - 将字符串添加到组合框会阻止窗口打开

mfc - MFC中的单选按钮选择更改

iphone - 注册Nib :forReuseidentifier with custom UTTableViewCell and Storyboards

c++ - 是否有可用的*免费* QT UI 测试框架?

c++ - 在 catch block 中抛出异常会导致两个异常同时发生吗?

c++ - MFC/CCriticalSection : Simple lock situation hangs

ruby - IRb:如何使用预加载类启动交互式 ruby​​ session

c - 使用 Windows cmd 作为 visual studio dev cmd

c++ - 如何从迭代器中获取列表