
本文承接《輕鬆類 VC 介面》,示範如何在可浮動、可調整大小的控制列中加入分頁與目錄樹狀檢視。
王駿先生修改 CSizingControlBar 命名為 CCoolBar,支援停靠、浮動、動態調整大小。左側與底部各建立一個 CCoolBar。
複製 SplitClass 目錄下 sizecbar.h/.cpp、scbarg.h/.cpp 到專案目錄並加入專案。stdafx.h 包含:
#include "sizecbar.h"
#include "scbarg.h"
CCoolBar m_LeftCtrBar; // 左側控制列
CCoolBar m_BottomCtrBar; // 底部控制列
// 建立控制列
m_LeftCtrBar.Create(_T("我的控制列1"), this, CSize(230,260), TRUE, 123);
m_BottomCtrBar.Create(_T("我的控制列2"), this, CSize(100,100), TRUE, 124);
// 樣式設定
m_LeftCtrBar.SetBarStyle(... | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_BottomCtrBar.SetBarStyle(... | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
// 啟用停靠
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
m_LeftCtrBar.EnableDocking(CBRS_ALIGN_ANY);
m_BottomCtrBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
DockControlBar(&m_LeftCtrBar, AFX_IDW_DOCKBAR_LEFT);
DockControlBar(&m_BottomCtrBar, AFX_IDW_DOCKBAR_BOTTOM);
CEdit m_BottomEdit;
m_BottomEdit.Create(WS_VSCROLL | WS_CHILD | WS_VISIBLE | ES_AUTOVSCROLL | ES_MULTILINE | ES_WANTRETURN,
CRect(0,0,0,0), &m_BottomCtrBar, 101);
m_BottomEdit.ModifyStyleEx(0, WS_EX_CLIENTEDGE);
步驟 A:建立目錄樹對話框
DirectoryTree 目錄下 DirTreeCtrl.h/.cpp、SortStringArray.h/.cpp 加入專案IDD_DIRTREEDLG,Style=Child, Border=NoneCTreeDlg,加入 DECLARE_DYNCREATE/IMPLEMENT_DYNCREATECDirTreeCtrl m_DirTreeCtrlOnInitDialog 初始化樹狀控制項:TCHAR szWorkDir[MAX_PATH];
if (!m_DirTreeCtrl.m_hWnd)
{
if (m_DirTreeCtrl.SubclassDlgItem(IDC_TREE1, this))
{
m_DirTreeCtrl.DisplayTree(NULL, TRUE);
_getcwd(szWorkDir, 256);
m_DirTreeCtrl.SetSelPath(szWorkDir);
}
}
步驟 B:建立分頁控制項並加入對話框
TabCtrl 目錄檔案加入專案CMainFrame 加入 CCoolTabCtrl m_TabCtrlm_TabCtrl.Create(TCS_DOWN | WS_CHILD | WS_VISIBLE, CRect(0,0,100,100), &m_LeftCtrBar, 125);
m_TabCtrl.AddPage(RUNTIME_CLASS(CTreeDlg), IDD_DIRTREEDLG, "目錄", IDI_ICON1);
m_TabCtrl.AddPage(RUNTIME_CLASS(CDialogSecond), IDD_DIALOG2, "第二頁", IDI_ICON2);
m_TabCtrl.AddPage(RUNTIME_CLASS(CDialog1), IDD_DIALOG1, "第三頁", IDI_ICON3);
m_TabCtrl.UpdateWindow();
stdafx.h 定義 _SCB_REPLACE_MINIFRAME,OnCreate 設定 m_pFloatingFrameClass = RUNTIME_CLASS(CSCBMiniDockFrameWnd)_SCB_STYLE_FLATDockControlBar 搭配 RecalcLayout 與 OffsetRect感謝王駿先生提供優秀的 CCoolBar 類別。完整原始碼請下載範例專案。