Re[2]: CMFCMenuBar - проблемы применения
От: AlexGin Беларусь  
Дата: 02.02.15 15:16
Оценка:
Здравствуйте, 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;
    };
};


Теперь уже у пользователя нет шансов "утащить" головное меню приложения, даже если пользователь "после хорошей бутылкы"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.