Здравствуйте, AlexGin, Вы писали:
AG>1) В классе, наследнике CMFCMenuBar, переопределяем виртуальный метод OnBeforeFloat:
AG>AG>class CMyMenuBar : public CMFCMenuBar
AG>{
AG>public:
AG> virtual BOOL OnBeforeFloat(CRect& rectFloat, AFX_DOCK_METHOD dockMethod)
AG> {
AG> if (dockMethod != DM_DBL_CLICK)
AG> return CMFCMenuBar::OnBeforeFloat(rectFloat, dockMethod);
AG> else
AG> return FALSE;
AG> };
AG>};
AG>
AG>В этом методе просто заблокирован переход меню в плавающее состояние, когда пользователь (возможно, по ошибке) дал по нему двойной-клик.
Более правильным решением (после feedback со стороны юзверов) мне видится такое:
class CMyMenuBar : public CMFCMenuBar
{
public:
virtual BOOL OnBeforeFloat(CRect& rectFloat, AFX_DOCK_METHOD dockMethod)
{
if ((dockMethod != DM_DBL_CLICK) && (dockMethod != DM_MOUSE)) // Добавлено DM_MOUSE
return CMFCMenuBar::OnBeforeFloat(rectFloat, dockMethod);
else
return FALSE;
};
};
Теперь уже у пользователя нет шансов "утащить" головное меню приложения, даже если пользователь "после хорошей бутылкы"