
圖:本文範例程式執行畫面
Visual Studio 風格介面(可停靠工具列、可拖曳分頁、自訂工具列按鈕/選單)若純用 MFC 手刻,不僅耗時且易產生 Bug。本文介紹使用 MFC 擴充介面庫 SYGUI 快速實作同等級介面。
// stdafx.h
#include "sygui.h"
MainFrame.h
CSYTabBar m_wndWorkSpace; // 左側停靠列
CSYAutoSizeBar m_wndOutput; // 底部停靠列
CSYSheetTabCtrl m_wndTabCtrl; // 底部分頁控制
TSYNoFlickerControl m_treeClass; // 類別檢視
TSYNoFlickerControl m_treeResource; // 資源檢視
TSYNoFlickerControl m_treeFile; // 檔案檢視
TSYNoFlickerControl m_editOutput; // 輸出視窗
MainFrame.cpp - OnCreate
// 建立左側 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);
// 建立底部 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);
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// ... 其他代碼 ...
LoadBars("Bars.dat"); // 還原版面
}
void CMainFrame::OnClose()
{
SaveBars("Bars.dat"); // 儲存版面
CMDIFrameWnd::OnClose();
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// ... 其他代碼 ...
EnabledMDITab(2, TRUE); // 啟用 MDI 分頁,子視窗保持最大化
EnableMDITabColor(TRUE); // 使用 OneNote 風格彩色分頁
}
BOOL CVisualstudioApp::InitInstance()
{
// ... 其他代碼 ...
CSYDrawMgrOffice2003* pDM2003 = new CSYDrawMgrOffice2003;
pDM2003->SetAutoDel();
CSYGUIMgr::S_SetDrawMgr(pDM2003);
// ... 其他代碼 ...
}
SYGUI 內建封裝,無需額外代碼即可支援使用者拖曳自訂工具列按鈕與選單項目。
範例還使用了 TaskPane、PropertyGridCtrl、FontComboBox 等進階控制項。完整原始碼與編譯說明請參考下載專案。更多技術細節可聯繫作者 wwei@zj165.com 或訪問 https://www.sygui.com。