在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);
}
這似乎解決重繪問題。請讓我知道是否有更好的方法來解決重繪問題。
將m_bDisableCustomize設置爲TRUE可行,但如果在自定義過程中單擊了菜單,則會出現重繪問題。 – sleepp
如果用戶右鍵單擊菜單欄,即使設置了變量,它們仍然可以修改(重命名,刪除)頂級按鈕。有沒有辦法在自定義模式下禁用右鍵單擊上下文菜單? – sleepp
有一條消息叫做AFX_WM_TOOLBARMENU。嘗試在父框架中處理它。 Afaik這是提供問題菜單的上下文菜單。 Ort檢查OnContextMenu的路徑... – xMRi