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

C++Builder 利用登錄表在功能表顯示最近開啟檔案清單

     編輯:關於C++

許多 Windows 應用程式在「檔案」功能表底部列出最近使用的檔案(MRU List),提升使用者效率。本文示範使用 C++Builder TRegistry 元件將記錄寫入登錄表 HKEY_LOCAL_MACHINE\SOFTWARE\MYCOMPANY\Remember,並於啟動時動態重建功能表項目。

實作要點

  1. 表單宣告: TRegistry *Registry; String Items[3]; int ItemsCount;
  2. 開啟檔案時更新陣列: 新檔案插入陣列首位,舊項目後移,最多保留 3 筆,呼叫 Display() 重繪功能表。
  3. Display() 重建功能表: 清除舊動態項目,依陣列內容建立新 TMenuItem 插入功能表。
  4. FormShow 讀取登錄表: Registry->OpenKey(..., true); Items[i] = Registry->ReadString("Item"+IntToStr(i+1));
  5. FormClose 寫入登錄表: Registry->WriteString("Item"+IntToStr(i+1), Items[i]);

完整事件代碼片段

// 開啟檔案按鈕
void __fastcall TForm1::Items1Click(TObject *Sender) {
    if (OpenDialog1->Execute()) {
        AnsiString file = OpenDialog1->FileName;
        for (int i = ItemsCount-1; i > 0; i--) Items[i] = Items[i-1];
        Items[0] = file;
        if (ItemsCount < 3) ItemsCount++;
        Display();
    }
}

// 重建功能表
void __fastcall TForm1::Display() {
    while (MainMenu1->Items->Items[0]->Count > 1) // 假設第一個頂層項目下的動態項從索引1開始
        MainMenu1->Items->Items[0]->Delete(1);
    for (int i = 0; i < ItemsCount; i++) {
        TMenuItem *mi = new TMenuItem(MainMenu1);
        mi->Caption = Items[i];
        mi->OnClick = MRUItemClick; // 另需實作點擊開啟該檔案
        MainMenu1->Items->Items[0]->Insert(1+i, mi);
    }
}

延伸應用

同樣機制可用於:記住視窗尺寸/位置、自動填入帳號、保存使用者偏好設定等。TRegistry 封裝了 Win32 登錄 API,操作直觀且型別安全。

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