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

VC++ 6.0 開發註冊表管理工具:樹狀結構顯示與核心操作實作

     編輯:VC 教學

專案架構設計

  • AppWizard 建立 SDI 專案 RegExplorer,Step 6 視圖基類選 CListView。
  • 手工新增左側樹狀視圖類 CRegLeftView (基類 CTreeView),實現雙欄分割介面 (類似 Regedit)。
  • CMainFrame 使用 CSplitterWnd 分割:左欄樹狀 (固定 200px),右欄列表。

核心框架代碼

文件模板調整

pDocTemplate = new CSingleDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CRegExplorerDoc),
    RUNTIME_CLASS(CMainFrame),
    RUNTIME_CLASS(CRegLeftView)); // 原為 CRegExplorerView

分割視窗建立

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) {
    if (!m_wndSplitter.CreateStatic(this, 1, 2)) return FALSE;
    if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CRegLeftView), CSize(100,100), pContext) ||
        !m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CRegExplorerView), CSize(100,100), pContext)) {
        m_wndSplitter.DestroyWindow(); return FALSE;
    }
    m_wndSplitter.SetColumnInfo(0, 200, 100); // 左欄最小 100,理想 200
    return TRUE;
}

文件類作為通訊中介

class CRegExplorerDoc : public CDocument {
    // ...
    CRegExplorerView* m_pRegExplorerView; // 右側列表視圖指標
    // 左側樹狀視圖可透過 GetDocument() 取得文件指標,再存取 m_pRegExplorerView
};

左側樹狀視圖 CRegLeftView 關鍵實作

class CRegExplorerDoc; // 前向宣告

class CRegLeftView : public CTreeView {
    // ...
    CRegExplorerDoc* GetDocument() {
        ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CRegExplorerDoc)));
        return (CRegExplorerDoc*)m_pDocument;
    }
    // 核心功能:
    // 1. OnInitialUpdate: 遞迴枚舉 HKEY_LOCAL_MACHINE 等根鍵,建立樹節點
    // 2. 節點展開時動態載入子鍵 (TVN_ITEMEXPANDING)
    // 3. 選擇變更 (TVN_SELCHANGED) 通知右側列表刷新值列表
    // 4. 右鍵選單:新建/刪除/重命名鍵值、匯入/匯出 .reg 檔
};

註冊表核心 API 封裝建議

進階功能規劃 (文中提及後續闡述)

  1. 註冊表匯入/匯出:解析 .reg 文本格式,遞迴建立/刪除鍵值;匯出時遞迴寫入標準格式。
  2. 搜尋與替換:多執行緒遞迴掃描,支援鍵名、值名、資料內容匹配,結果在獨立對話框列表呈現雙擊跳轉。
  3. 權限編輯:整合 RegGetKeySecurity/RegSetKeySecurity,提供 ACL 編輯對話框。
  4. 快照比對:兩次掃描差異報告,輔助軟體安裝追蹤。

開發注意事項

  • 操作 HKEY_LOCAL_MACHINE 需管理員權限,Manifest 加入 requireAdministrator。
  • 大量枚舉時於背景執行緒執行,避免 UI 凍結,完成後 PostMessage 通知主執行緒更新樹狀控件。
  • 錯誤處理:所有 API 回傳值檢查,FormatMessage 取得系統錯誤描述顯示給用戶。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
操作API備註
開啟鍵RegOpenKeyEx需指定存取權限 (KEY_READ/KEY_WRITE)
建立鍵RegCreateKeyEx不存在則建立
刪除鍵/值RegDeleteKey / RegDeleteValueWin2000+ 支援遞刪 RegDeleteTree (需 shlwapi.h)
查詢值RegQueryValueEx先查大小再配置緩衝區讀取
設定值RegSetValueEx支援 REG_SZ, REG_DWORD, REG_BINARY 等
枚舉子鍵/值RegEnumKeyEx / RegEnumValue迴圈索引從 0 開始直到 ERROR_NO_MORE_ITEMS