在 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);
}
这似乎解决了重绘问题。请让我知道是否有更好的方法来解决重绘问题。