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) |