文档库 最新最全的文档下载
当前位置:文档库 › VS2005以后的MFC如何修改菜单的颜色

VS2005以后的MFC如何修改菜单的颜色

VS2005以后的MFC如何修改菜单的颜色
VS2005以后的MFC如何修改菜单的颜色

VS2005以后的MFC如何修改菜单的颜色

VS2005以后,MFC将Menu从MainFrame上移到了MenuBar上,因此在创建MainFrame(即调用OnCreate()中),执行到

if (!m_wndMenuBar.Create(this))

这句后,从MainFrame上执行GetMenu就不能获得正确的CMenu指针了,以后

的GetMenu就只能返回0了。要取得CMenu指针,需要执行:

m_wndMenuBar.GetMenu();

如果想要修改菜单的风格,象以前那样利用SetMenuInfo()函数,无法改变菜单的

风格。

这是由于Microsoft引入了UI管理器(VisualManager)来管理包括Menu、Tasks pane、Auto-hide buttons、Edit box、Popup window、Ribbon control等在内的视图风格。

因此,要改变视图的风格,则需要利用这个UI管理器来实现,也可以利用它实现换肤。

以缺省生成的MFC单文档程序为例,MainFrame中有一个OnApplicationLook()函数,在该函数中对设置不同的风格管理器:

void CMainFrame::OnApplicationLook(UINT id)

{

CWaitCursor wait;

theApp.m_nAppLook = id;

switch (theApp.m_nAppLook)

{

case ID_VIEW_APPLOOK_WIN_2000:

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManage r));

break;

case ID_VIEW_APPLOOK_OFF_XP:

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManage rOfficeXP));

break;

case ID_VIEW_APPLOOK_WIN_XP:

CMFCVisualManagerWindows::m_b3DTabsXPTheme = TRUE;

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManage rWindows));

break;

case ID_VIEW_APPLOOK_OFF_2003:

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManage rOffice2003));

CDockingManager::SetDockingMode(DT_SMART);

break;

case ID_VIEW_APPLOOK_VS_2005:

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManage rVS2005));

CDockingManager::SetDockingMode(DT_SMART);

break;

default:

switch (theApp.m_nAppLook)

{

case ID_VIEW_APPLOOK_OFF_2007_BLUE:

CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office 2007_LunaBlue);

break;

case ID_VIEW_APPLOOK_OFF_2007_BLACK:

CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office 2007_ObsidianBlack);

break;

case ID_VIEW_APPLOOK_OFF_2007_SILVER:

CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office 2007_Silver);

break;

case ID_VIEW_APPLOOK_OFF_2007_AQUA:

CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office 2007_Aqua);

break;

}

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManage rOffice2007));

CDockingManager::SetDockingMode(DT_SMART);

}

RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME | RDW_ERASE);

theApp.WriteInt(_T("ApplicationLook"), theApp.m_nAppLook);

}

CMFCVisualManager是其他UI管理器的基类(事实上,他还有一个基类:CMFCBaseVisualManager),他提供类似于Windows2000的风格。其他几种UI 界面类都是从它直接或间接派生的。SetDefaultManager用来设置不同的UI界面风格类。

我们可以从CMFCVisualManager、或者其他管理器的类,继承生成一个新的类,重载其中的函数,就可以做成自己的管理器。

有关这部分内容,微软还没有提供帮助内容,具体如何做,还需要自己去分析源代码。源代码的位置是:

Microsoft Visual Studio 9.0\VC\atlmfc\src\mfc

虽然源代码中没有太多注释,但函数名和变量名的命名还是不错,基本上可以理解。

如果需要自定义UI管理器,建议首先决定近似于哪个风格,然后继承自该风格的类,最后再进行必须的重载。

跟我学Dreamweaver Spry设计工具——创建横向或纵向的网页下拉或弹出菜单

目录 1.1Dreamweaver Spry菜单栏——创建横向或纵向的网页下拉或弹出菜单 (2) 1.1.1Spry菜单栏 (2) 1.1.2自定义菜单栏组件的显示风格(修改CSS文件) (9) 1.1.3更改菜单栏组件的方向 (15)

1.1Dreamweaver Spry菜单栏——创建横向或纵向的网页下拉或弹出菜单 1.1.1Spry菜单栏 Spry 框架是一个JavaScript 库,Web 设计人员使用它可以构建能够向站点访问者提供更丰富体验的Web 页。有了Spry,就可以使用HTML、CSS 和极少量的JavaScript 将XML 数据合并到HTML 文档中,创建构件(如折叠构件和菜单栏),向各种页面元素中添加不同种类的效果。 在设计上,Spry 框架的标记非常简单且便于那些具有HTML、CSS 和JavaScript 基础知识的用户使用。 1、菜单栏组件是一组可导航的菜单按钮 当站点访问者将鼠标悬停在其中的某个按钮上时,将显示相应的子菜单。使用菜单栏可在紧凑的空间中显示大量可导航信息,并使站点访问者无需深入浏览站点即可了解站点上提供的内容。 Dreamweaver 允许Web开发人员插入两种菜单栏组件:垂直组件和水平组件。并且所生成的菜单栏组件由标准的HTML标签(由

相关文档
相关文档 最新文档