//----------------------------------------------------------------------------
// filedialog.h
//----------------------------------------------------------------------------
#ifndef _INC_FILEDIALOG_H_
#define _INC_FILEDIALOG_H_
class CFileDialog{
protected:
OPENFILENAME m_of;
CHAR m_filename[MAX_PATH],m_filetitle[MAX_PATH];
public:
CFileDialog(){;}
CFileDialog(HWND hwnd,LPSTR filter,LPSTR filename,LPSTR initdir = NULL,LPSTR title = NULL){
Init(hwnd,filter,filename,initdir,title);
}
void Init(HWND hwnd,LPSTR filter,LPSTR filename,LPSTR initdir = NULL,LPSTR title = NULL){
lstrcpy(m_filename,filename);
::GetFileTitle(m_filename,m_filetitle,sizeof(m_filetitle));
ZeroMemory(&m_of,sizeof(m_of));
m_of.lStructSize = sizeof(m_of);
m_of.hwndOwner = hwnd;
m_of.hInstance = GetModuleHandle(NULL);
m_of.lpstrFilter = filter;
m_of.nFilterIndex = 1;
m_of.lpstrFile = m_filename;
m_of.nMaxFile = sizeof(m_filename);
m_of.lpstrFileTitle = m_filetitle;
m_of.nMaxFileTitle = sizeof(m_filetitle);
m_of.lpstrInitialDir = initdir;
m_of.lpstrTitle = title;
}
BOOL GetSave(){
m_of.Flags = OFN_CREATEPROMPT|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_PATHMUSTEXIST;
return GetSaveFileName(&m_of);
}
BOOL GetOpen(){
m_of.Flags = OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST;
return GetOpenFileName(&m_of);
}
LPSTR GetFileName(){return m_filename;}
LPSTR GetFileTitle(){return m_filetitle;}
};
//
// 読み込み用のファイル名を取得する方法です
// 以下は、適当な画像を例に取っています。
//
CFileDialog dlg(hwnd,"BITMAPファイル(*.bmp)\0*.bmp;\0JPEGファイル(*.jpg,*,jpeg)\0*jpg;*.jpeg;\0\0",
"",NULL,"画像ファイルをオープンする");
if(dlg.GetOpen()){
// OKボタンが押された場合
HFILE fp = HFILE_ERROR;
if((fp = _lopen(dlg.GetFileName(),OF_READ)) != HFILE_ERROR){
:
// 読込みルーチン
:
_lclose(fp);
}
}
//
// 書き出し用のファイル名を取得する方法です
//
CFileDialog dlg(hwnd,"テキストファイル(*.txt)\0*.txt;\0\0","新規文章.txt",NULL,"文章保存先");
if(dlg.GetSave()){
// OKボタンが押された場合
HFILE fp = HFILE_ERROR;
if((fp = _lcreat(dlg.GetFileName(),0)) != HFILE_ERROR){
:
// 書き出しルーチン
:
_lclose(fp);
}
}
#endif
恐らく、フィルター文字列の書き方がポイントになってくると思います。