如果 a 有没有设置高度的选项CMenu?
我知道可以绘制自定义菜单项并在那里使用自定义大小CMenu::MeasureItem,但是有没有办法设置/更改菜单(栏)本身的高度?
谢谢。
如果您的菜单栏派生自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该类允许框架处理包含菜单中的所有其他预期操作。