VC界面的实现

2016-01-29 11:59 41 1 收藏

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

【 tulaoshi.com - C语言心得技巧 】

VC界面的实现

作者:wwei

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

下载源代码

  微软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)。最后希望该文对你有所帮助。

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

来源:https://www.tulaoshi.com/n/20160129/1484114.html

延伸阅读
     一般情况下,程序开发人员都希望自己的程序美观大方,为了达到这一个要求,想尽办法美化自己的程序,如果在界面上适当的地方添加并显示3D文字,将不失为一个好的选择,可以达到事半功倍的效果,本文针对这一问题,通过一个简单的小程序,介绍如何实现这一目标。有兴趣的读者可以稍加改动,将该方法应用到自己的程序中...
自动隐藏停泊窗体在商业的MFC图形库中(如Xtreme)已支持得很好,但他们大多都重写了MFC相应的支持代码像Cristi Posea的CSizingControlBar实现VC6界面那样,重用大部分MFC Dock 框架类而实现Vc .Net界面的免费库很少见(偶没发现:)本实现,准确地说是在Cuick 的《轻松实现类MSDN2002界面(二)》基础上的增强版。 其主要更新为: Bugfi...
看过徐景周写过的一篇“程序界面多模式显示的实现”,在一个应用程序中使程序拥有多种显示模式,但是这个界面是由SDI的MFC文档视图结构实现,但是使用的代码在MDI的多文档/视图中不能实现,通过MSDN我找到了一些实现 MDI 的多模式实现方法,不敢独享,与大家分享 。 利用SDI和MDI实现这种多模式的显示的应用程序,第一步首先要实现的...
一、引 言 ---- Windows Socket API是一套开放的、支持多种协议的Windows下的网络编程接口,它包 括一个标准的 Berkeley Socket功能调用的集合,以及为Windows所作的重要扩充。 Windows Socket经过不断完善并在众 多公司的全力支持下,已成为Windows网络编程 的事实上的标准。 ---- 本 文 将 在VC++ 5.0 环 境 下 介 绍 一个基于 Winsock ...
滑动控件是Windows中最常用的控件之一。一般而言它是由一个滑动条,一个滑块和可选的刻度组成,用户可以通过移动滑块在相应的控件中显示对应的值。通常,在滑动控件附近一定有标签控件或编辑框控件,用于显示相应的值。滑动控件在应用程序中用途级为广泛,如在桌面的属性中就可以看到。为此,让我们一起来看一下它的实现方法。 (...

经验教程

292

收藏

91
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部