现在,许多Windows应用程序都具有在文件选单中显示历史文件的功能,这使用户很容易再次访问这些文件。笔者利用Borland C++ Builder(BCB)提供的TRegedit类,成功地在注册表中实现了上述功能。现介绍如下:
1.在C++ Builder中新建一个工程文件project1,并在Form1上添加如下控件:
控件名称 属性 值
TOpenDialog Name OpenDialog1
TMainMenu Name MainMneu1
同时在 MainMenu1控件中增加一个选单项,其属性为:
Name Caption
Items1 打开文件
2.在unit1.h中输入如下内容:
private:
TRegistry ?Registry;
String Items[3];
//建立显示历史文件的数组
int ItemsCount;
void _fastcall TForm1::Display();//显示历史文件记录
3.在Items的Click事件中输入如下内容:
void __fastcall TForm1::Items1Click(TObject ?Sender)
{
String TempFile,Files;
OpenDialog1-〉Filter="All Files(*.*)|*.*";
if(OpenDialog1-〉Execute())
{
Files=OpenDialog1-〉FileName;//取得文件名//
for(int i=0;i〈3;i++)
TempFile=Items[0];
if(ItemsCount〈3)
ItemsCount++;
for(int i=I temsCount-1;i〉0;i--)
Items[i]=Items[i-1];
//对打开的历史文件进行排序
Items[0]=Files;
//使最近打开的文件在最前面
}
Display();
}
4.在unit.cpp中建立Display函数:
void _fastcall TForm1::Display()
{
TMenuItem ?NewItem;
while(MainMenu1-〉Items-〉Items[MainMenu1-〉Items-〉Count-1]-〉Count〉2)
{
MainMenu1-〉Items-〉Items[MainMenu1-〉Items-〉Count-1]-〉
Delete(MainMenu1-〉Items-〉Items[MainMenu1-〉Items-〉Count-1]-〉Count-1);
}//除去原有的历史文件列表
for(int i=0;i〈ItemsCount;i++)
{
NewItem=new TMenuItem(MainMenu1);
NewItem-〉Caption=Items[i];
MainMenu1-〉Items-〉Items[MainMenu1-〉Items-〉Count-1]-〉Insert
( MainMenu1-〉Items-〉Items[MainMenu1-〉Items-〉Count-1]-〉Count,NewItem);
}//建立新的历史文件列表
}
5.在Form1的Show事件中输入如下内容:
void __fastcall TForm1::FormShow(TObject ?Sender)
{ Registry =new TRegistry;
ItemsCount=0;
Registry-〉RootKey=HKEY_LOCAL_MACHINE;
Registry-〉OpenKey("SOFTWARE\\
MYCOMPANY\\Remember",TRUE);
//在注册表中打开主键,如果该主键不存在则新建该主键
Items[0]=Registry-〉ReadString("Item1");
//读items[i]字符串的值
ItemsCount++;
Items[1]=Registry-〉ReadString("Item2");
ItemsCount++;
Items[2]=Registry-〉ReadString("Item3");
ItemsCount++; }
6.在Form1的Show事件中输入如下内容:
void __fastcall TForm1::FormClose(TObject ?Sender, TCloseAction &&Action)
{ if(ItemsCount〈3)
for(int i=ItemsCount+1;i〈=3;i++)
Items[i]="";
Registry-〉WriteString("Item1",Items[0]);
Registry-〉WriteString("Item2",Items[1]);
Registry-〉WriteString("Item3",Items[2]);
//向注册表写入items[i]字符串的值 }
以上程序在中文Windows 98、C++ Builder 5.0环境中通过。