【问题标题】:C++ - MFC - Set height of CMenuC++ - MFC - 设置CMenu的高度
【发布时间】:2020-03-27 16:41:57
【问题描述】:

如果是CMenu,是否有任何设置高度的选项?

我知道可以在CMenu::MeasureItem 那里绘制自定义菜单项并使用自定义大小,但是有没有办法设置/更改菜单(栏)本身的高度?

谢谢。

【问题讨论】:

  • 您是在自己创建菜单栏吗?如果是,它是从CMFCMenuBar 派生的吗?如果两者都是肯定的,那么我可以提供一个可能的解决方案!
  • @AdrianMole 目前没有,但如果可以的话我会的。

标签: c++ windows mfc cmenu


【解决方案1】:

如果您的菜单栏派生自CMFCMenuBar 类*,则更改菜单栏的高度相对容易。在这种情况下,您只需覆盖CalcLayout 成员并在返回的CSize 对象的.y 成员中指定所需的高度。这是一个最小的例子:

// 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;
}

要使用这样的菜单栏,您只需将其声明为主框架窗口的成员,然后在处理该框架窗口的WM_CREATE 消息时创建它并设置其样式/属性(通常在MFC 应用程序,这将在 OnCreate() 成员覆盖中)。

注意:理论上,您可以将此方法用于任何具有CalcLayout 成员的基类(例如CMFCToolbar);但是,CMFCMenuBar 类允许框架从包含的菜单中处理所有其他预期的操作。

【讨论】:

  • 问题涉及 CMenu 而不是 CMenuBar
  • @Landstalker OP 说,“有没有办法设置/更改菜单(bar)本身的高度?
  • ...并注意:MFC 不提供“CMenuBar”类!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 2012-06-22
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
相关资源
最近更新 更多