Chinaunix首页 | 论坛 | 博客
  • 博客访问: 588270
  • 博文数量: 752
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:47
文章分类

全部博文(752)

文章存档

2011年(1)

2008年(751)

我的朋友

分类:

2008-10-13 16:55:07

VC界面的实现

作者:



  微软C++开发工具VC++由于其界面友好,实用而被许多软件开发者所模仿,但是直接用MFC来实现VC界面不仅要耗费大量时间,而且在实现类似VC工具条停靠,拉伸算法,菜单项和工具条按钮自定义功能时,由于涉及到很多关于 MFC 本身实现的细节问题很容易使程序存在各种BUG。本文在实现类似VC界面时,使用了一个MFC扩展界面库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界面的 一种实现方法,因此对这些控制的使用不再作详细介绍,对这些控制感兴趣的读者可通过 wwei@zj165.com和作者交流 或访问获取更详细的资料。关于本例子代码的编译可参考例子代码目录中的 (编译说明.txt)。 最后希望该文对你有所帮助。


--------------------next---------------------


有个六色皮肤DLL(46.5kb)
VC,VB,WIN32,
调用都很方便!
/////////////// ( konny 发表于 2006-9-18 1:17:00)
 
不是我也说坏话,老兄,我感觉你的玩意确实是BCGCBPro,或者是Xtreme Toolkit Pro的啊,问题你自己改造的有多少呢? ( gzstyxb 发表于 2005-12-16 10:01:00)
 
编译连接了一下,感觉还行,有人说了,太农民了,什么话嘛,农民不占了大多数人,其余是少数了,release版的DLL有么,共享一下 ( mlqxj35674 发表于 2005-12-11 9:54:00)
 
没有源代码的东西,都是垃圾,不要在这里丢人现眼了 ( xg_gcs 发表于 2005-12-10 20:08:00)
 
界面开发是以前的事拉,随便玩玩,这也有界面 ( boywys 发表于 2005-11-28 10:12:00)
 
VCKBASE越来越堕落了,这种文章也收,还不如放篇小说上去 ( qiushen 发表于 2005-11-25 22:25:00)
 
人要有修养,学会宽容,你感觉不舒服也要...... ( yxd66 发表于 2005-11-25 16:35:00)
 
强烈鄙视不开源的人!!!!!!!
难道你发出来就是为了显摆? ( cqwally 发表于 2005-11-25 8:05:00)
 
这种破烂儿网上有的是啊,我下了EXE看了界面,很农民,改造的太不彻底了 ( etiller 发表于 2005-11-24 11:17:00)
 
你认为自己不容易才做出来的就不要拿到这里“秀”嘛,好像谁也没逼你呀,你敢说你没有参照甚至剽窃XTREME 和 BCGSOFT的代码?!不管别人怎么想,我本人鄙视这种行为! ( zihua 发表于 2005-11-24 9:48:00)
 
.......................................................

--------------------next---------------------

阅读(471) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~