CFileDialog 定制
时间: 2024-04-03 10:27:05 浏览: 165
CFileDialog是MFC中的一个类,用于打开和保存文件对话框。通过继承CFileDialog类,我们可以定制自己的文件对话框,以满足特定的需求。下面是一个简单的CFileDialog定制的例子:
```cpp
class CMyFileDialog : public CFileDialog
{
public:
CMyFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL)
: CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd)
{
}
virtual BOOL OnFileNameOK()
{
CString strFileName = GetPathName();
CString strExt = GetFileExt();
if (strExt.CompareNoCase(_T("txt")) != 0)
{
AfxMessageBox(_T("只能选择txt文件!"));
return FALSE;
}
return CFileDialog::OnFileNameOK();
}
};
```
在这个例子中,我们继承了CFileDialog类,并重载了OnFileNameOK函数。在OnFileNameOK函数中,我们可以对用户选择的文件进行一些额外的检查,例如文件类型是否正确等。如果检查失败,我们可以弹出一个消息框提示用户,并返回FALSE,阻止文件对话框关闭。如果检查成功,我们可以调用CFileDialog::OnFileNameOK函数,让文件对话框正常关闭。
使用我们自定义的CMyFileDialog类,可以像使用CFileDialog一样打开文件对话框:
```cpp
CMyFileDialog dlg(TRUE, _T("txt"), NULL, OFN_FILEMUSTEXIST | OFN_HIDEREADONLY,
_T("Text Files (*.txt)|*.txt|All Files (*.*)|*.*||"));
if (dlg.DoModal() == IDOK)
{
CString strFileName = dlg.GetPathName();
// ...
}
```
阅读全文