记住文件打开对话框上一次位置的vc程序

我们用VC等程序时,“打开”能初始化为上次打开/保存的文件夹,这是如何实现的呢?下面给出记住文件打开对话框上一次位置的原理及实现代码。

原理:
假如你要打开的文件类型为*.bin。
当你打开/保存bin文件后,注册表处HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\bin位置产生的信息:

MRUList   cba
a   D:\\tmp\\dxtmp\\mybin\\test.bin
b   E:\\bin\\tmp.bin
c   E:\aaa\backup\abc.bin
其中E:\aaa\backup\abc.bin是最后一次打开的。

实现:
// 从注册表读Open/Save对话框最后一次的记录
// strExtName -- 入口,文件的扩展名,如bin
// strMRUPath -- 出口,接收最后一次打开的文件的路径,如E:\\bin
//
BOOL GetOpenSaveMRU(LPCTSTR strExtName,char *strMRUPath)
{
    HKEY hKEY;
    const char *mru="Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\OpenSaveMRU\\";
    CString strmru(mru);
    strmru += strExtName;
    long lRet = RegOpenKeyEx(HKEY_CURRENT_USER,strmru,0,KEY_READ,&hKEY);

    if (lRet != ERROR_SUCCESS ) {
        return FALSE;
    }

    DWORD keytype1 = REG_SZ;
    DWORD dwInBytes = 256;
    BYTE pInBuf[256];
    lRet = RegQueryValueEx(hKEY,"MRUList",NULL,&keytype1,pInBuf,&dwInBytes);
    if (lRet != ERROR_SUCCESS ) {
        return FALSE;
    }

    dwInBytes = 256;
    char strLast[] = {pInBuf[0],0};
    lRet = RegQueryValueEx(hKEY,(LPTSTR)strLast,NULL,&keytype1,(LPBYTE)   strMRUPath,&dwInBytes);
    
    if (lRet != ERROR_SUCCESS) {
        return FALSE;
    }

    CString str1(strMRUPath);
    int idx=str1.ReverseFind('\\');
    strMRUPath[idx]=0;

    RegCloseKey(hKEY);
    return TRUE;
}

调用方法:
char m_strBINDir[256];
ZeroMemory(m_strBINDir,0,sizeof(m_strBINDir));
GetOpenSaveMRU("bin",m_strBINDir);
这样m_strBINDir中就获取了上一次调用文件打开/保存对话框选择bin后缀的文件路径。



[本日志由 cnfgg 于 2010-01-12 05:40 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: 对话框 位置
相关日志:
评论: 2 | 引用: 0 | 查看次数: -
回复回复点点[2010-02-01 07:43 PM | del]
我学的也是VC,不过是菜鸟。日志多更新啊。我会经常来看的。
回复来自 admin 的评论 admin 于 2010-02-03 10:46 PM 回复
欢迎,有空会多更新的,最近比较忙。
回复回复小辉网[2010-01-21 09:28 PM | del]
如果你的博客是delphi的话就更好了。呵呵
回复来自 admin 的评论 admin 于 2010-01-23 01:54 PM 回复
嗯,delphi不错的。
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.