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

时间:2013-10-29 18:53:26

标签: 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);
}

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

2 个答案:

答案 0 :(得分:2)

将成员变量m_bDisableCustomize设置为TRUE。

答案 1 :(得分:0)

我会用

EnableCustomizeButton(FALSE, NULL);
窗口创建后