WTL 学习笔记 -- mru

 

Mru的功能就是在菜单中显示最近使用过的文档,这个功能很常用,很方便,可以为用户节省不少时间。不过已经想不起来mru确切的意思了,ru应该代表是最近使用的意思吧,至于m的意思,一时想不起来,呵,暂且不管它吧。

 

实际上,以前在用MFC时,从来没有用过它,原因是从来没有用MFC写过大程序,大多数情况下都是dialog形式的。不过界于这个功能很常用,学习WTL时顺便了解一下。

 

WTL中提供了一个CrecentDocumentList的类,实现了我们需要的mru功能。看了一下,其实它很简单,主要功能无非是:

l         把最近常用的文件名写入到注册表中。

l         从注册表中加载最近常用的文件名列表。

l         把文件名列表显示到菜单上。

l         点击菜单时,打开对应的文件。

我们看看这几类函数:

 

1.         设置显示mru的菜单句柄:

void SetMenuHandle(HMENU hMenu)

 

2.         增删mru

BOOL AddToList(LPCTSTR lpstrDocName)

BOOL RemoveFromList(int nItemID)

 

3.         获取mru

BOOL GetFromList(int nItemID, LPTSTR lpstrDocName)

 

4.         存取注册表中的mru

BOOL ReadFromRegistry(LPCTSTR lpstrRegKey)

BOOL WriteToRegistry(LPCTSTR lpstrRegKey)

 

使用时,要先在菜单资源中加入一项,用于显示mru。在程序中,可以用下列方式与菜单资源关联起来:

                   HMENU hMenu = m_CmdBar.GetMenu();

                   HMENU hFileMenu = ::GetSubMenu(hMenu, FILE_MENU_POSITION);

                   HMENU hMruMenu = ::GetSubMenu(hFileMenu, RECENT_MENU_POSITION);

                   m_mru.SetMenuHandle(hMruMenu);       

 

                   m_mru.AddToList("document1");

                   m_mru.AddToList("document2");

                  

 

至于消息,可以用同一个函数处理所有的mru菜单项:

COMMAND_RANGE_HANDLER(ID_FILE_MRU_FIRST, ID_FILE_MRU_LAST, OnFileRecent)