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

VC6.0 SDI 專案實現多文檔模板:滾動視圖與分割視圖切換

     編輯:VC 教學

前言

AppWizard 產生的 SDI 專案預設僅支援單一「文檔/視圖」模板。若需在同一專案中提供不同視圖類型 (如 CScrollView 與分割器視圖) 供使用者選擇,需手動建立多個 CSingleDocTemplate。本文詳細步驟示範如何實現雙模板 SDI 應用程式。

實作步驟

1. 建立基礎 SDI 專案 (T2)

  • AppWizard → SDI → 視圖類別選 CScrollView 衍生。
  • 產生類別:CT2App, CMainFrame, CT2Doc, CT2View。

2. 新增第二個框架與視圖類別

  • ClassWizard → 加入類別 F2 衍生自 CFrameWnd。
  • ClassWizard → 加入類別 V 衍生自 CEditView。

3. 建立第二組選單與字串資源

  • 新增選單資源 ID M2。
  • 字串表新增項目:ID=M2, Value=M2 值, Caption="TEMPLATE2"。

4. 修改 CT2App::InitInstance 註冊第二個文檔模板

#include "F2.h"
#include "V.h"

BOOL CT2App::InitInstance()
{
    // ... 原有初始化碼 ...

    // 原有第一個模板
    CSingleDocTemplate* pDocTemplate = new CSingleDocTemplate(
        IDR_MAINFRAME,
        RUNTIME_CLASS(CT2Doc),
        RUNTIME_CLASS(CMainFrame),
        RUNTIME_CLASS(CT2View));
    AddDocTemplate(pDocTemplate);

    // 新增第二個模板
    pDocTemplate = new CSingleDocTemplate(
        M2,                          // 選單/字串資源 ID
        RUNTIME_CLASS(CT2Doc),       // 共用文檔類別
        RUNTIME_CLASS(F2),           // 不同框架類別
        RUNTIME_CLASS(V));           // 不同視圖類別
    AddDocTemplate(pDocTemplate);

    // ... 其餘碼 ...
}

5. 實作 F2 框架類別的分割器視圖

F2.h 新增成員:

private:
    CSplitterWnd m_splitter;

F2.cpp 覆寫 OnCreateClient:

BOOL F2::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
    CRect rc; GetClientRect(&rc);
    m_splitter.CreateStatic(this, 2, 1); // 兩行一列

    // 上半部:使用文檔模板指定的視圖類別 (V)
    m_splitter.CreateView(0, 0, pContext->m_pNewViewClass,
        CSize(rc.Width(), rc.Height()/2), pContext);

    // 下半部:固定使用 CEditView 衍生類 V
    m_splitter.CreateView(1, 0, RUNTIME_CLASS(V),
        CSize(0,0), pContext);

    SetActiveView((CView*)m_splitter.GetPane(0,0));
    return TRUE;
}

執行行為

  • 啟動程式或選單「檔案→新建」彈出「新建」對話框,列出兩個模板:T2 (滾動視圖) 與 TEMPLATE2 (分割視圖)。
  • 選擇 T2 → 執行 CT2View (滾動視圖)。
  • 選擇 TEMPLATE2 → 執行 F2 框架內嵌分割器,上半部為文檔視圖,下半部為編輯視圖。

MDI 專案適用性

MDI 專案同樣適用,差異在於:

  • 框架類別衍生自 CMDIChildWnd。
  • 啟動時不顯示「新建」對話框,僅在使用者選擇「檔案→新建」時出現。

滾動條顯示提示

在 CT2View::OnInitialUpdate 中設定捲軸範圍:

CSize sizeTotal(800, 800); // 大於視窗尺寸
SetScrollSizes(MM_TEXT, sizeTotal);

結語

多文檔模板讓單一 SDI/MDI 專案支援多種視圖呈現方式,滿足不同使用情境。關鍵在於正確建立 CSingleDocTemplate/CMultiDocTemplate 並關聯對應的框架、文檔、視圖類別與資源 ID。

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