CFileDialogで選択されたフィルタを取得するには?

解決


coffee  2007-06-27 00:54:13  No: 65505

VC++ 6.0でMFC(SDI)で開発しております。
「名前をつけて保存」ダイアログを表示する為にCFileDialogを使用しています。

    CFileDialog SaveDlg( FALSE
                        ,"bmp"
                        ,"xxx.bmp"
                        ,NULL
                        ,"モノクロで保存(*.bmp)|*.bmp| RGBで保存(*.bmp)|*.bmp| 色反転で保存(*.bmp)|*.bmp");

上記のコードで表示させると、フィルタに

    モノクロで保存(*.bmp)|*.bmp
    RGBで保存(*.bmp)|*.bmp
    色反転で保存(*.bmp)|*.bmp

のように表示され、選択できますが
 ------------------------------------
 ???? どのフィルタが選択されたか ???? 
 ------------------------------------
が取得できず、非常に困っております。

FilterIndexのようなプロパティで取得できると考えていたのですが
そのようなプロパティ・関数等が見当たらず、さんざん悩んだ挙句ここに投稿した次第です。

是非お力添えを〜よろしくお願い致します。_(._.)_


tetrapod  2007-06-27 01:34:41  No: 65506

FilterIndex あるぢゃん。 m_ofn.nFilterIndex ではダメかいな。


coffee  2007-06-27 01:57:21  No: 65507

むむ…あります…?
ヘルプも調べたのですが
CFileDialogにはそういったメンバは無いようなのです。

http://msdn2.microsoft.com/ja-jp/library/8dwz4azc(VS.80).aspx

本来の使い方としてはフィルタは拡張子毎に分けて

    EXEファイル(*.exe)|*.exe
    DLLファイル(*.dll)|*.dll
    LIBファイル(*.lib)|*.lib

のように設定して使えば区別が付くのですが
拡張子が同じなもので区別が付かないのです(つд`)


Blue  2007-06-27 02:24:22  No: 65508

>CFileDialogにはそういったメンバは無いようなのです。

CFileDialog::m_ofn 
http://msdn2.microsoft.com/ja-jp/library/43xtah3y(VS.80).aspx
より
<MSDN>
m_ofn は OPENFILENAME 型の構造体です。
</MSDN>

OPENFILENAME Structure
http://msdn2.microsoft.com/ja-jp/library/ms646839(en-us).aspx
より
<MSDN>
nFilterIndex

Specifies the index of the currently selected filter in the File Types control.</MSDN>
とあります。

つまり、

if (SaveDlg.DoModal())
{
    switch (SaveDlg.m_ofn.nFilterIndex)
    {
    case 0:



    }
}

って出来ないですかね?


Blue  2007-06-27 02:25:39  No: 65509

訂正

>if (SaveDlg.DoModal())
if (SaveDlg.DoModal() == IDOK)


coffee  2007-06-27 03:04:29  No: 65510

おおおおおう出来ました!
そうかm_ofnというメンバの中にあったのですね…
お二方とも助かりました_(._.)_


coffee  2007-06-27 03:04:48  No: 65511

解決済みチェック忘れてました


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加