ruohan

Make notes for improving

 

LoadStdProfileSettings -- 加载MRU--方便地打开你以前曾经打开过的文件

 This method is called from within the InitInstance method to enable and load the list of most recently used (MRU) files and last preview state. If nMaxMRU is zero, no MRU list will be maintained.

最近文件列表可以让你很方便地打开你以前曾经打开过的文件,那么,如何为自己的应用程序加入最近文件列表功能呢?最简单的方法就是在你新建工程的时候选择包含最近文件列表功能,也就是在 MFC AppWizard 的第 4 步的时候使 “How  many files would you like on your recent file list?” 的值不为 0 即可。

如果你在新建工程的时候没有选择包含最近文件列表功能,那么可以按照如下的方法为你的工程加入它:

        1.在你的“文件”菜单中添加一个名称为“最近文件”的菜单项,其 ID 为 ID_FILE_MRU_FILE1。
      2.在你的工程的 App 类的 InitInstance 方法中将
        LoadStdProfileSettings(0);
           改成:
        LoadStdProfileSettings();
          即可。
这样,你的工程就有了最近文件列表功能。事实上,以这种方法生成的最近文件列表项是保存在注册表中 HKEY_CURRENT_USER\Sofrware\Loacl Appwizard-Generated Applications 下以你的工程名为主键的 Recent File List  主键中 File? 格式的字符串值中。LoadStdProfileSettings 的参数值决定了保存在这里的最近文件的数目,其默认值(没有参数时)为 4。 Loacl Appwizard-Generated Applications 主键是Visual C++ 默认的,在工程的 App 类的 InitInstance 方法中由 SetRegistryKey() 函数创建的,你可以将其改成你需要的名
称,例如:
  SetRegistryKey(_T("skyice software"));
那么,如何处理从菜单中选择的最近文件列表中的文件呢?由于在菜单中只有 ID_FILE_MRU_FILE1  这一个菜单项,其余的菜单项都是由 LoadStdProfileSettings();  动态的加上的,因此,用一般的方法难以实现对菜单项的响应。此时,可以采用如下的方法:
  1.在 CMainFrame 类中加入对菜单项 ID_FILE_MRU_FILE1的响应。
  2.在 MainFrm.cpp 中将
           ON_COMMAND(ID_FILE_MRU_FILE1,OnFileMruFile1)

           改成
           ON_COMMAND_RANGE(ID_FILE_MRU_FILE1,ID_FILE_MRU_FILE4,  OnFileMruFile1)
即可。
以后,所有对最近文件列表中文件的选择都由 CMainFrame  方法 OnFileMruFile1 响应,你可以在此函数中判断具体是选择了哪个文件,进而做出相应的处理。

posted on 2010-08-19 14:28  ruohan  阅读(870)  评论(0编辑  收藏  举报

导航