#ifndef _dkutil_Dialog__h_
#define _dkutil_Dialog__h_

namespace dkutil{
	

/*!
☆ファイルオープンダイアログ:ファイルオープンダイアログをだします。
@param	*pPath[out]		: ファイルが格納されるパス
@param size[in] pPathのサイズ。(MAX_PATH以上でないと、falseを返す。
@param	*pTitle[in]: ダイアログのタイトル
@param	*pFilter[in]	: 拡張子の指定
@param	*pExt[in]		: 拡張子
@param WindowHandle[in] 親ウインドウハンドル。(別にNULLでもOK
@return		: 成功 true / 失敗 false ( ファイルが選択されなかったを含む )
@note
この関数はカレントディレクトリ問題に対応しています。<br>
<b>＊カレントディレクトリ問題。</b><br>
ファイルを開く系のダイアログを表示して、OKを押した際、カレントディレクトリが
変更されてしまい、今まで、fopen("OK.txt");とかやって相対パスで読み込んでいたファイルが
読み込めなくなってしまう現象。
*/
inline bool FileOpenDialog( char *pPath,size_t size, const char *pTitle, const char *pFilter, const char *pExt ,HWND WindowHandle)
{
	if(pPath == NULL || size < MAX_PATH){
		return false;
	}
	pPath[0] = '\0';

	//今この関数を呼び出しているソフトのディレクトリを保存。
	char path[MAX_PATH];
	memset(path,0,sizeof(path));
	::GetCurrentDirectory(MAX_PATH,path);
	
	// ファイルオープン
	
	OPENFILENAME ofn;
	ZeroMemory( &ofn, sizeof(OPENFILENAME) );
	
	ofn.lStructSize		= sizeof(OPENFILENAME);
	ofn.hwndOwner		= WindowHandle;
	ofn.lpstrTitle		= pTitle;
	ofn.lpstrFilter		= pFilter;
	ofn.nFilterIndex	= 1;
	ofn.lpstrFile		= pPath;
	ofn.nMaxFile		= 256;
	ofn.lpstrDefExt		= pExt;
	ofn.lpstrInitialDir	= NULL;
	ofn.Flags			= OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;

	bool result = (::GetOpenFileName( &ofn ) != false);

	//ディレクトリ設定を戻す
	SetCurrentDirectory(path);

	return result;
}


/*!
☆ファイルオープンダイアログ:ファイルオープンダイアログをだします。

@param	*pPath[out]		: ファイルが格納されるパス
@param size[in] pPathのサイズ(MAX_PATH以上でないとfalseを返します。)
@param	*pTitle[in]	: ダイアログのタイトル
@param	*pFilter[in]	: 拡張子の指定
@param	*pExt[in]		: 拡張子
@param WindowHandle[in] 親ウインドウハンドル。(別にNULLでもOK
@return	bool	: 成功 true / 失敗 false (キャンセルされた場合もfalse)
@note
カレントディレクトリ問題に対応しています。詳しくはFileOpenDialog()にて。
*/
inline bool FileSaveDialog( char *pPath, size_t size,const char *pTitle, const char *pFilter, const char *pExt ,HWND WindowHandle)
{
	if(pPath==NULL || size < MAX_PATH){
		return false;
	}
	pPath[0] = '\0';
	
	//今この関数を呼び出しているソフトのディレクトリを保存。
	char path[MAX_PATH];
	memset(path,0,sizeof(path));
	::GetCurrentDirectory(MAX_PATH,path);


	OPENFILENAME ofn;
	ZeroMemory( &ofn, sizeof(OPENFILENAME) );
	
	ofn.lStructSize		= sizeof(OPENFILENAME);
	ofn.hwndOwner		= WindowHandle;
	ofn.lpstrTitle		= pTitle;
	ofn.lpstrFilter		= pFilter;
	ofn.nFilterIndex	= 1;
	ofn.lpstrFile		= pPath;
	ofn.nMaxFile		= 256;
	ofn.lpstrDefExt		= pExt;
	ofn.lpstrInitialDir	= NULL;
	ofn.Flags			= OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY;

	bool result = (::GetOpenFileName( &ofn ) != false);

	//ディレクトリ設定を戻す
	SetCurrentDirectory(path);

	return result;
}	
	
}//end of dkutil namespace











#endif //end of include once
