首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

在類 VC 介面架構中整合目錄樹狀檢視

     編輯:關於VC++

本文承接《輕鬆類 VC 介面》,示範如何在可浮動、可調整大小的控制列中加入分頁與目錄樹狀檢視。

架構基礎:CCoolBar 控制列

王駿先生修改 CSizingControlBar 命名為 CCoolBar,支援停靠、浮動、動態調整大小。左側與底部各建立一個 CCoolBar。

專案建立步驟

1. 建立 SDI 專案,加入核心檔案

複製 SplitClass 目錄下 sizecbar.h/.cpp、scbarg.h/.cpp 到專案目錄並加入專案。stdafx.h 包含:

#include "sizecbar.h"
#include "scbarg.h"

2. CMainFrame 成員變數

CCoolBar m_LeftCtrBar;   // 左側控制列
CCoolBar m_BottomCtrBar; // 底部控制列

3. OnCreate 中建立與停靠

// 建立控制列
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);

4. 底部控制列加入編輯框

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);

5. 左側控制列加入分頁與目錄樹

步驟 A:建立目錄樹對話框

  • 複製 DirectoryTree 目錄下 DirTreeCtrl.h/.cpp、SortStringArray.h/.cpp 加入專案
  • 資源建立對話框 IDD_DIRTREEDLG,Style=Child, Border=None
  • ClassWizard 產生 CTreeDlg,加入 DECLARE_DYNCREATE/IMPLEMENT_DYNCREATE
  • 成員變數 CDirTreeCtrl m_DirTreeCtrl
  • OnInitDialog 初始化樹狀控制項:
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_TabCtrl
  • 建立分頁:
m_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_FLAT
  • 同列/同行停靠多控制列:使用 DockControlBar 搭配 RecalcLayout 與 OffsetRect

感謝王駿先生提供優秀的 CCoolBar 類別。完整原始碼請下載範例專案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved