CFileDialogのカスタマイズ方法は従来のSetTemplateがある.一方,Vista以降のOS限定でVS2008およびVS2010以降であれば,レイアウトの自由度はないが直接コントロールを使いすることが可能である.
CFileDialogの派生クラスを作り,SetTemplateでDialog Templateを設定する.各コントロールに対するイベント等を派生クラスに実装する.
Visual Studio2008以降をWindows VistaもしくはWindows7で用いる場合は,コンストラクタの最後の引数BOOL bVistaStyleをFALSEにしなければならない.
開発環境がWindowsXPであっても実行環境がVista以降となる可能性があるため,明示的にFALSEを指定しておく.
これによりSetTemplateが可能となる.なお,TRUEの状態でSetTemplateをコールすると例外が投げられる.
Visual Studio2008以降をWindows VistaもしくはWindows7で用いる場合は,コンストラクタの最後の引数BOOL bVistaStyleをFALSEにしなければならない.
開発環境がWindowsXPであっても実行環境がVista以降となる可能性があるため,明示的にFALSEを指定しておく.
これによりSetTemplateが可能となる.なお,TRUEの状態でSetTemplateをコールすると例外が投げられる.
コンストラクタの最後の引数 BOOL bVistaStyle をTRUEとするとVista以降のGUIで表示される.IFileDialogCustomizeを取得し,様々なコントロールを追加および値の取得が可能である.
CFileDialog fd(TRUE, "txt", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "text file(*.txt)|*.txt|all file(*.*)|*.*||", this, 0, TRUE); IFileDialogCustomize* pCustomize = fd.GetIFileDialogCustomize(); pCustomize->AddCheckButton(107, "Sample check box", FALSE);
さらに簡便化されており,CFileDialogにIFileDialogCustomizeの関数が委譲されている.しかしそれはまだ中途半端でありIFileDialogCustomizeの全ての機能を持っているわけではない.
例えば,IFileDialogCustomize::GetSelectedControlItemなど.
例えば,IFileDialogCustomize::GetSelectedControlItemなど.
CFileDialog fd(TRUE, "txt", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "text file(*.txt)|*.txt|all file(*.*)|*.*||", this, 0, TRUE);
AddCheckButton(107, "Sample Check Button", FALSE);
if(fd.DoModal() == IDOK)
{
if( fd.GetCheckButtonState() )
{
//checked
}
else
{
//not checked
}
}

コメントをかく