1. CFileDialog 类,用于打开和另存为对话框
/
// CFileDialog - used for FileOpen... or FileSaveAs...
class CFileDialog : public CCommonDialog
{
DECLARE_DYNAMIC(CFileDialog)
public:
// Attributes
OPENFILENAME m_ofn; // open file parameter block
// 构造函数
CFileDialog(BOOL bOpenFileDialog, // TRUE for FileOpen, FALSE for FileSaveAs
LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL);
// Operations
virtual int DoModal();
// Helpers for parsing file name after successful return
// or during Overridable callbacks if OFN_EXPLORER is set
CString GetPathName() const; // return full path and filename
CString GetFileName() const; // return only filename
CString GetFileExt() const; // return only ext
CString GetFileTitle() const; // return file title
BOOL GetReadOnlyPref() const; // return TRUE if readonly checked
// Enumerating multiple file selections
POSITION GetStartPosition() const;
CString GetNextPathName(POSITION& pos) const;
// Helpers for custom templates
void SetTemplate(UINT nWin3ID, UINT nWin4ID);
void SetTemplate(LPCTSTR lpWin3ID, LPCTSTR lpWin4ID);
// Other operations available while the dialog is visible
CString GetFolderPath() const; // return full path
void SetControlText(int nID, LPCSTR lpsz);
void HideControl(int nID);
void SetDefExt(LPCSTR lpsz);
// Overridable callbacks
protected:
friend UINT CALLBACK _AfxCommDlgProc(HWND, UINT, WPARAM, LPARAM);
virtual UINT OnShareViolation(LPCTSTR lpszPathName);
virtual BOOL OnFileNameOK();
virtual void OnLBSelChangedNotify(UINT nIDBox, UINT iCurSel, UINT nCode);
// only called back if OFN_EXPLORER is set
virtual void OnInitDone();
virtual void OnFileNameChange();
virtual void OnFolderChange();
virtual void OnTypeChange();
// Implementation
#ifdef _DEBUG
public:
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
BOOL m_bOpenFileDialog; // TRUE for file open, FALSE for file save
CString m_strFilter; // filter string
// separate fields with '|', terminate with '||\0'
TCHAR m_szFileTitle[64]; // contains file title after return
TCHAR m_szFileName[_MAX_PATH]; // contains full path name after return
OPENFILENAME* m_pofnTemp;
virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
};
另存为对话框举例:
//---------------另存为对话框--------------
CString szFilter = "DAT文件(*.bmp)|*.bmp|所有文件(*.*)|*.*||";
CFileDialog dlg(FALSE, //另存为
"bmp",
NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
szFilter,
AfxGetMainWnd());
dlg.DoModal();
CString szFileName = dlg.GetFileName();//获取文件名,包括扩展名
CString szPath = dlg.GetPathName();//获取完整路径,包括文件名
2. 浏览某一个目录的方法:
以下代码是从网上摘录的,非本人所创,原来的出处已经找不着了,请作者见谅。。。 感谢他们的共享精神。。。
BROWSEINFO bInfo;
ZeroMemory(&bInfo,sizeof(bInfo));
bInfo.hwndOwner = m_hWnd;
TCHAR tchPath[255];
bInfo.lpszTitle = _T( "DAT文件目录路径: ");
bInfo.ulFlags = BIF_RETURNONLYFSDIRS;
LPITEMIDLIST lpDlist;
//用来保存返回信息的IDList,使用SHGetPathFromIDList函数转换为字符串
lpDlist = SHBrowseForFolder(&bInfo) ; //显示选择对话框
if(lpDlist != NULL)
{
SHGetPathFromIDList(lpDlist,tchPath);//把项目标识列表转化成目录
// TRACE(tchPath);
SetDlgItemText(IDC_EDIT1,tchPath);
}
...