在MFC程序中使用XML文件配置工具栏

作者:朱金灿
来源:http://blog.csdn.net/clever101/


      现在我发现使用Visual Studio的资源编辑器进行编辑资源有着诸多的不便:首先是任何资源的变动一般变动代码,不利于系统维护,其次Visual Studio的资源编辑器的本身的功能有限,也不利于界面美化,三是不利于人员分工,开发人员既要忙实现功能,又要忙准备好的界面素材。对界面实现文件配置化正是解决上面问题的好方法。这次我实现了使用XML文件配置工具栏。这里所谓配置就是工具栏的界面信息如工具栏标题、按钮图片、是否为分隔符都在XML文件保存,程序通过解析XML文件来获取工具栏信息来创建工具栏。这样一旦发现界面不合适可以随时修改配置文件,同时利于人员分工。


       具体的做法如下:


1. 在工程的输出目录下有一个SysConfig.xml,作为系统配置文件。其中关于工具栏的配置部分如下:



      简单解释一下上面的节点意义:valid表示工具栏是否有效,caption表示工具栏标题,file节点为工具栏按钮所贴图片,separator表示按钮是分隔符。


2. 通过解析XML文件获取工具栏信息来创建工具栏。首先在CMainFrame类添加两个数据成员:


/** * /brief 工具栏对应的图像列表。 */ CImageList m_imgToobar; /** * /brief 系统配置文件解析器,具体看我上传的代码。 */ CXmlParse m_SysSetting;


然后实现如下函数:


/*! * /brief 获取exe所在的文件夹。 * * /param [in][out]strBinPath exe程序所在的文件夹。 * /return 无。 */ void CMainFrame::GetOutputPath(string &strBinPath) { TCHAR szModulePath[_MAX_PATH]; ::GetModuleFileName(NULL,szModulePath,_MAX_PATH); strBinPath = szModulePath; strBinPath = strBinPath.substr(0,strBinPath.rfind('//')+1); } /*! * /brief 解析系统配置文件,获取工具栏信息。 * * /param [in][out]MyToolbar 工具栏信息。 * /return 无。 */ void CMainFrame::ParseXml(ToolBar &MyToolbar) { string strBinPath; GetOutputPath(strBinPath); string strXmlPath = strBinPath + string(_T("SysConfig.xml")); m_SysSetting.OpenXml(strXmlPath); m_SysSetting.GetToolbarInfo(MyToolbar); } /*! * /brief 根据工具栏图片信息加载工具栏图像列表。 * * /param [in]MyToolbar 工具栏信息。 * /return 是否成功。true为成功,false表示失败。 */ BOOL CMainFrame::LoadImageList(ToolBar &MyToolbar) { // 获取按钮图片的个数 int nBmpNum = MyToolbar.m_MenuItemVec.size(); HBITMAP hBitmap = NULL; // 打开所有位图,将其加进图像列表 for(int i=0; i


        为使工具栏处于有效状态,还得添加一个简单的消息处理函数,简单如下:


/*! * /brief 工具栏按钮响应事件。 * * /param [in]nID 工具栏按钮ID。 * /return 无。 */ void CMainFrame::OnButton(UINT nID) { switch (nID) { // SYS_COMMAND_BEGIN为工具栏按钮的起始ID值 case SYS_COMMAND_BEGIN: AfxMessageBox(_T("你单击的是第一个按钮")); break; case SYS_COMMAND_BEGIN+1: AfxMessageBox(_T("你单击的是第二个按钮")); break; case SYS_COMMAND_BEGIN+2: AfxMessageBox(_T("你单击的是第三个按钮")); break; case SYS_COMMAND_BEGIN+3: AfxMessageBox(_T("你单击的是第四个按钮")); break; case SYS_COMMAND_BEGIN+4: AfxMessageBox(_T("你单击的是第五个按钮")); break; case SYS_COMMAND_BEGIN+5: AfxMessageBox(_T("你单击的是第六个按钮")); break; default: break; } }


         开发环境为Visual C++ 2005 + sp1,Win XP + sp3。程序效果图如下:


       工程源码已上传到联合程序开发网,链接为:

源码下载 。


参考文献:


1. MFC实现 多风格真彩色大图标工具栏按钮 (感谢万连文大侠提供)























你可能感兴趣的:(Visual,C++,xml,mfc,工具,command,string,file)