文档详情

VC++在MFC程序中使用XML文件配置工具栏.doc

发布:2018-05-11约5.15千字共10页下载文档
文本预览下载声明
VC++在MFC程序中使用XML文件配置工具栏   现在我发现使用Visual Studio的资源编辑器进行编辑资源有着诸多的不便:首先是任何资源的变动一般变动代码,不利于系统维护,其次Visual Studio的资源编辑器的本身的功能有限,也不利于界面美化,三是不利于人员分工,开发人员既要忙实现功能,又要忙准备好的界面素材。对界面实现文件配置化正是解决上面问题的好方法。这次我实现了使用XML文件配置工具栏。这里所谓配置就是工具栏的界面信息如工具栏标题、按钮图片、是否为分隔符都在XML文件保存,程序通过解析XML文件来获取工具栏信息来创建工具栏。这样一旦发现界面不合适可以随时修改配置文件,同时利于人员分工。   具体的做法如下:   1. 在工程的输出目录下有一个SysConfig.xml,作为系统配置文件。其中关于工具栏的配置部分如下:   AppToolbar valid=1 caption=基础工具   ToolButton file=Add.bmp /   ToolButton separator=true /   ToolButton file=Benchmark.bmp /   ToolButton file=Comment.bmp /   ToolButton file=Convert.bmp /   ToolButton file=Delete.bmp /   ToolButton file=Exit.bmp /   /AppToolbar   简单解释一下上面的节点意义: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; inBmpNum; ++i)   {   if (MyToolbar.m_MenuItemVec[i].m_bIsSeparator)   {   continue;   }   string strBin
显示全部
相似文档