При использовании пакета функций MFC в VS2010 можно ли отключить функцию настройки на 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.
я хотел бы использовать
EnableCustomizeButton(FALSE, NULL);
после создания окна.