VC界面的实现

夜思未眠

夜思未眠

2016-01-29 11:59

VC界面的实现,VC界面的实现

VC界面的实现

作者:wwei

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)

下载源代码

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


图一 本文例子运行时的界面

下面对例子代码作详细说明:

1、为使用SYGUI,你需要在stdafx.h中加入

  #include "sygui.h"
2、创建左边和底部的BAR在MainFrame.h中声明
  CSYTabBarm_wndWorkSpace; //左边BAR  CSYAutoSizeBarm_wndOutput; //底部BAR   CSYSheetTabCtrlm_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界面的一种实现方法,因此对这些控制的使用不再作详细介绍,对这些控制感兴趣的读者可通过 wwei@zj165.com和作者交流或访问http://www.sygui.com获取更详细的资料。关于本例子代码的编译可参考例子代码目录中的 (编译说明.txt)。最后希望该文对你有所帮助。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)
展开更多 50%)
分享

猜你喜欢

VC界面的实现

C语言教程 C语言函数
VC界面的实现

轻松实现类VC界面

C语言教程 C语言函数
轻松实现类VC界面

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

VC模拟实现QQ界面(下)

编程语言 网络编程
VC模拟实现QQ界面(下)

VC模拟实现QQ界面(上)

编程语言 网络编程
VC模拟实现QQ界面(上)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

QQ界面的模拟实现(上)

C语言教程 C语言函数
QQ界面的模拟实现(上)

QQ界面的模拟实现(下)

C语言教程 C语言函数
QQ界面的模拟实现(下)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

CAD快速变换图层

CAD快速变换图层

等轴测投影中的标注

等轴测投影中的标注
下拉加载更多内容 ↓