1

如果 a 有没有设置高度的选项CMenu

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

谢谢。

4

1 回答 1

1

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

// 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该类允许框架处理包含菜单中的所有其他预期操作。

于 2020-03-27T18:43:36.093 回答