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

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

  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<nBmpNum; ++i)

  {

  if (MyToolbar.m_MenuItemVec[i].m_bIsSeparator)

  {

  continue;

  }

  string strBinPath;

  GetOutputPath(strBinPath);

  string strBmpPath = strBinPath + string(_T("Toolbar//"));

  strBmpPath = strBmpPath + MyToolbar.m_MenuItemVec[i].m_strBmpName;

  hBitmap = (HBITMAP)LoadImage(AfxGetResourceHandle(),strBmpPath.c_str(), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR|LR_LOADFROMFILE);

  if (NULL==hBitmap)

  {

  return FALSE;

  }

  CBitmap  bmp;

  bmp.Attach(hBitmap);

  m_imgToobar.Add(&bmp, RGB(0, 0, 0));

  bmp.DeleteObject();

  }

  return TRUE;

  }

  /*!

  *  /brief 设置工具栏按钮风格。

  *

  *  /param [in]MyToolbar 工具栏信息。

  *  /return 无。

  */

  BOOL CMainFrame::SetStyleToolbar(ToolBar &MyToolbar)

  {

  CToolBarCtrl& tbc = m_wndToolBar.GetToolBarCtrl();

  // 删除之前的按钮

  while(tbc.DeleteButton(0));

  // 设置当前图像列表

  tbc.SetImageList(&m_imgToobar);

  int  i   = 0;

  int  nBtnNum = MyToolbar.m_MenuItemVec.size();

  UINT nBtnID = SYS_COMMAND_BEGIN;

  int nImgIndex = 0;

  // 根据按钮属性逐个添加按钮

  for(i=0; i<nBtnNum; ++i)

  {

  if (MyToolbar.m_MenuItemVec[i].m_bIsSeparator)

  {

  TBBUTTON tb = {-1,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0};

  tbc.AddButtons(1, &tb);

  }

  else

  {

  TBBUTTON tb = {nImgIndex,nBtnID,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0};

  tbc.AddButtons(1, &tb);

  nImgIndex++;

  nBtnID++;

  }

  }

  return TRUE;

  }

  int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

  {

  if (CFrameWnd::OnCreate(lpCreateStruct) == -1)

  return -1;

  /*

  if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

  | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

  !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))*/

  // 解析系统配置文件,获取位图信息

  ToolBar AppToolbar;

  ParseXml(AppToolbar);

  if(!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD|WS_VISIBLE|CBRS_TOP

  |CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC))

  {

  TRACE0("未能创建工具栏/n");

  return -1;      // 未能创建

  }

  m_wndToolBar.SetWindowText(AppToolbar.m_strCaption.c_str());

  // 创建图像列表

  m_imgToobar.Create(32, 32, ILC_COLOR32|ILC_MASK, 0, 0);

  if(LoadImageList(AppToolbar))

  {

  // 添加工具栏按钮

  SetStyleToolbar(AppToolbar);

  }

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答