说明

因为之前旧项目采用的是 MFC+BCG 界面库的方法实现的。维护旧项目过程中,遇到选择文件对话框没有从默认位置选择的问题,学习和思考后,问题得到解决,特此记录。

原来的 BCG中配置选择的方法是这样的:

lpszDefExt = _T("DAT");

lpszFilter = _T("文件|*.dat|\

文件|*.bln|\

文件|*.xyz|\

文件|*.txt||");

m_editDataName.EnableFileBrowseButton (lpszDefExt,lpszFilter);

相当于,BCG内部已经帮我们实现完全了。不好做修改。

BCG中的继承

class CCustomBrowseEdit : public CBCGPEdit

{

virtual void OnBrowse ();

};

void CCustomBrowseEdit::OnBrowse ()

{

//文件类型过滤

const TCHAR pszFilter[] = _T("dat File (*.dat)|*.dat|");

//第一个参数为TRUE是打开文件,为FALSE是文件另存为

CFileDialog dlg(FALSE, this->m_strDefFileExt, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,

this->m_strFileFilter, this);

//设置对话框默认呈现的路径

dlg.m_ofn.lpstrInitialDir = WorkDir;

if (dlg.DoModal() == IDOK)

{

//获取选中的文件的路径

CString strFilePath = dlg.GetPathName();

this->SetWindowText(strFilePath);

}

}

继承类,通过重写 OnBrowse 方法,实现改变了对话框默认选择的方式

this->m_strDefFileExt 这个利用继承了BCG类的方法,访问了BCG的成员。 this->SetWindowText(strFilePath); 这个利用继承了CEdit类的方法,访问了CEdit的成员,实现了设定编辑框的文本。

总结

多看示例文档,总会有新的思路不断尝试,永不放弃!

查看原文