C ++ - MF C - установка высоты CMenu - PullRequest
1 голос
/ 27 марта 2020

Есть ли возможность установить высоту, если CMenu?

Я знаю, что можно нарисовать пользовательский элемент меню и использовать там нестандартный размер CMenu::MeasureItem, но есть ли способ установить / изменить высоту самого меню (бара)?

Спасибо.

1 Ответ

1 голос
/ 27 марта 2020

Изменение высоты строки меню относительно легко, если ваша строка меню получена из CMFCMenuBar класса *. В этом случае вам просто нужно переопределить элемент CalcLayout и указать необходимую высоту в элементе .y возвращаемого объекта CSize. Вот минимальный пример:

// Class declaration...
class MyMenuBar : public CMFCMenuBar {
public:     // Standard constructors and destructor ...
    MyMenuBar(void) : CMFCMenuBar() {}
    inline  MyMenuBar(const MyMenuBar&) = delete;
    inline  MyMenuBar& operator = (MyMenuBar&) = delete;
    virtual ~MyMenuBar(void) {}
protected:  // Overrides for custom behaviour ...
    CSize CalcLayout(DWORD dwMode, int nLength = -1) override;
};

// Implementation...
CSize MyMenuBar::CalcLayout(DWORD dwMode, int nLength)
{
    CSize cs = CMFCMenuBar::CalcLayout(dwMode, nLength); // Call base-class to get width
    cs.cy = 42; // Set this to your desired menu-bar height (in pixels)
    return cs;
}

Чтобы использовать такую ​​панель меню, вам нужно только объявить ее как элемент окна основного фрейма, а затем создать ее и установить ее стиль / свойства при обработке * Сообщение 1009 * для этого окна фрейма (обычно в приложениях MFC это будет в переопределении элемента OnCreate()).

Примечание. Теоретически вы можете использовать этот метод с любым базовый класс, который имеет член CalcLayout (например, CMFCToolbar); однако класс CMFCMenuBar позволяет платформе обрабатывать все другие ожидаемые действия из содержащегося меню.

...