Visual c++ 如何皮肤MFC主菜单
我在现有的MFC应用程序中得到了一个菜单,它有一个标准的MFC主菜单 但我想改变它的背景颜色,使它看起来更无缝地属于应用程序的其余部分Visual c++ 如何皮肤MFC主菜单,visual-c++,mfc,menu,skinning,Visual C++,Mfc,Menu,Skinning,我在现有的MFC应用程序中得到了一个菜单,它有一个标准的MFC主菜单 但我想改变它的背景颜色,使它看起来更无缝地属于应用程序的其余部分 第一张图片:MFC主菜单。应用程序的皮肤是蓝色的,如工具栏中所示,但菜单仍然是标准的灰色背景色 第二张图片:Spotify的菜单,剥皮以适合其他页面 颜色 我没有发现任何类似的例子。你能告诉我如何做到这一点吗 我想到的方法是: 将CMenu子类化为我自己的SkinnedMenu,但它不是由我们的代码创建的,而是由从CFrameWnd派生的大型机类中的Get
- 第一张图片:MFC主菜单。应用程序的皮肤是蓝色的,如工具栏中所示,但菜单仍然是标准的灰色背景色
- 第二张图片:Spotify的菜单,剥皮以适合其他页面 颜色
CFrameWnd
派生的大型机类中的GetMenu()
调用创建的。我在这里唯一能找到的就是它的方法签名,在afxwin.h
中定义,那么我如何使用自己的子类菜单呢菜单信息。例如,如果我设置info.hbrBack=skin.GetSysColorBrush(颜色菜单)
唯一改变的颜色是下拉菜单的背景,而不是主菜单本身
啊,自定义控件的领域。有几种方法可以实现你想要的。首先对控件进行子类化并重写OnPaint(),请记住您必须处理布局。我可以将CMenu子类化。但是它的项目是在资源文件中定义的,菜单本身是从CFrameWnd接收的。我将把这一点补充到问题中。那么我该如何使用子类呢?我使用新的MFC功能包类成功地做到了这一点。我的主框架源自
CFrameWndEx
,它的菜单有一个CMFCMenubar
成员。我通过编写一个派生自框架MFC Visual Manager类的类来实现一个主题。然后,我调整了它,使其颜色与我假装的颜色一致,并执行了CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMyVisualManager))
,其中CMyVisualManager
是我的主题类。