2013-10-29 66 views
0

在VS2010中使用MFC功能包時,是否可以禁用CMFCMenuBar上的自定義功能,但在工具欄上保留該功能?我們不希望用戶拖動菜單,但他們可以自由更改工具欄。僅在MFC菜單欄上禁用自定義

我們禁用在退出時將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

將成員變量m_bDisableCustomize設置爲TRUE。

+0

將m_bDisableCustomize設置爲TRUE可行,但如果在自定義過程中單擊了菜單,則會出現重繪問題。 – sleepp

+0

如果用戶右鍵單擊菜單欄,即使設置了變量,它們仍然可以修改(重命名,刪除)頂級按鈕。有沒有辦法在自定義模式下禁用右鍵單擊上下文菜單? – sleepp

+0

有一條消息叫做AFX_WM_TOOLBARMENU。嘗試在父框架中處理它。 Afaik這是提供問題菜單的上下文菜單。 Ort檢查OnContextMenu的路徑... – xMRi

0

我會窗口創建後使用

EnableCustomizeButton(FALSE, NULL);