程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> VC界面的實現

VC界面的實現

編輯:關於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界面的一種實現方法,因此對這些控制的使用不再作詳細介紹,對這些控制感興趣的讀者可通過 [email protected]和作者交流或訪問http://www.sygui.com獲取更詳細的資料。關於本例子代碼的編譯可參考例子代碼目錄中的 (編譯說明.txt)。最後希望該文對你有所幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved