使用SYGUI轻松实现完整的VC界面

发表于:2007-07-01来源:作者:点击数: 标签:
使用SYGUI轻松实现完整的VC界面 注: XP /2003 界面风格的应用程序>>一文发表以后,有许多朋友来信询问关于其中所附的类似VC界面的例子的问题,本文主要针对例子代码中关于VC界面实现部分的关键代码作一详细说明. 微软C++ 开发 工具VC++由于其界面友好,实用而


使用SYGUI轻松实现完整的VC界面

 

注: <<使用SYUGI快速创建类似于Office XP/2003 界面风格的应用程序>>一文发表以后,有许多朋友来信询问关于其中所附的类似VC界面的例子的问题,本文主要针对例子代码中关于VC界面实现部分的关键代码作一详细说明.

    微软C++开发工具VC++由于其界面友好,实用而被许多软件开发者所模仿,但是直接用MFC来实现VC界面不仅要耗费大量时间,而且在实现类似VC工具条停靠,拉伸算法,菜单项和工具条按钮自定义功能时,由于涉及到很多关于MFC本身实现的细节问题很容易使程序存在各种BUG。而使用SYGUI实现VC界面不仅可使开发量大大减少,而且还可以轻松实现类似自定义等的高级功能,下图是本文所附例子代码运行时的界面:


下面对例子代码作详细说明:
1.为使用SYGUI,需要在stdafx.h中加入

  #include "sygui.h"

2.创建左边和底部的BAR
  在MainFrame.h中声明

  CSYTabBar m_wndWorkSpace; //左边BAR
  CSYAutoSizeBar m_wndOutput; //底部BAR
 
  CSYSheetTabCtrl m_wndTabCtrl; //底部BAR中的TAB控制

  TSYNoFlickerControl m_treeClass; //左边BAR中的类视图
  TSYNoFlickerControl m_treeResource; //左边BAR中的资源视图
  TSYNoFlickerControl m_treeFile; //左边BAR中的文件视图
  TSYNoFlickerControl m_editOutput; //底部BAR中的编辑视图
 
  在MainFrame.cpp中创建左边和底部的BAR

  CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  {
    .... //其它代码
    //create WorkSpace Bar
    if (!m_wndWorkSpace.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP
 |CBRS_GRIPPER |CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC,CRect(0,0,100,100),1000))
    {
 return -1;
    }

    m_wndWorkSpace.SetImage(m_pImgTree);

    CreateClassView();
    CreateResourceView();
    CreateFileView();
   
    m_wndWorkSpace.AddView(&m_treeClass,FALSE,0);
    m_wndWorkSpace.AddView(&m_treeResource,FALSE,7);
    m_wndWorkSpace.AddView(&m_treeFile,FALSE,14);
    m_wndWorkSpace.SetActiveView(1);

    //Create Output Bar
    if (!m_wndOutput.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
 | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC,
 CRect(0,0,100,100),1001))
    {
 return -1;
    }

    CreateEditView();
    m_wndOutput.AddView(&m_editOutput);

    ... //其它代码
   
    m_wndWorkSpace.EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndWorkSpace,AFX_IDW_DOCKBAR_LEFT);

    m_wndOutput.EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndOutput,AFX_IDW_DOCKBAR_BOTTOM);
   
    ... //其它代码  
 }

 
3.保存/恢复BAR布局状态,在MainFrame.cpp中加入以下语句
  int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  {
       ... //其它代码
      
       LoadBars("Bars.dat");  //恢复布局
   }
  
   void CMainFrame::OnClose()
   {
        SaveBars("Bar.data");  //保存布局
       
        CMDIFrameWnd::OnClose();
   }

  
4.有效类似.Net中的MDITab,在MainFrame.cpp中加入以下语句:
  int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  {
       ... //其它代码
      
       EnabledMDITab(2,TRUE);   //有效MDITAB,TRUE: MDIChild保持最大化
       EnableMDITabColor(TRUE); //使用OneNotes风格的彩色标签
   }

  
5.界面风格设定,本例子使用了Office2003风格,如果不喜欢可在VisualstudioApp.cpp中将以下三行注释掉
  BOOL CVisualstudioApp::InitInstance()
  {
      ... //其它代码
     
      CSYDrawMgrOffice2003* pDM2003 = new CSYDrawMgrOffice2003;
      pDM2003->SetAutoDel();
      CSYGUIMgr::S_SetDrawMgr(pDM2003);
  
      ... //其它代码
}
 
6.工具条按钮和菜单项的自定义功能,由于SYGUI中封装了该功能,因此不需要加入任何代码。


结束语:
在本文的例子中还使用了SYGUI库中的TaskPane,PropertyGridCtrl,FontComboBox等控制,由于本文主要是介绍VC界面的实现方法,因此对这些控制的使用不再作详细介绍,对这些控制感兴趣的读者可通过和作者交流或访问获取更详细的资料。关于本例子代码的编译可参考例子代码目录中的 (编译说明.txt) .
最后希望该文对你有所帮助。


原文转自:http://www.ltesting.net