ファイルダイアログのカスタマイズ ~フィルタの拡張子をデフォルトに、、、その2

ファイルダイアログのカスタマイズ ~フィルタの拡張子をデフォルトに、、、
ちょっと、普通に使用できるように修正しました。

以下のクラス定義をヘッダファイルに追加して、CFileDialog の代わりに、 CFileDialogEx を使用すると、GetFilePath()にて、選択したフィルタの拡張子が付いたファイル名を取得することが出来るようになります。

class CFileDialogEx : public CFileDialog
{
public:
    CFileDialogEx(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,
        DWORD dwSize = 0)
    : CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName
            , dwFlags, lpszFilter, pParentWnd, dwSize)
    {}
    virtual ~CFileDialogEx(){}

    virtual void OnInitDone()
    {
        OnTypeChange();
        CFileDialog::OnInitDone();
    }

    void OnTypeChange()
    {
        // タイプが変更されたら、フィルタから拡張子を取得して、デフォルトとして登録
        LPCSTR ptr = m_ofn.lpstrFilter;
        // m_ofn.lpstrFilter = "Bitmap\0*.bmp\0Tiff\0*.tif\0...\0\0";
        int nTarget = ((m_ofn.nFilterIndex-1)*2) + 1;
        while(nTarget--)
        {
            while(*(ptr++) != '\0');
        }
        TRACE("CFileDialogEx Filter %d: %s\n", m_ofn.nFilterIndex, ptr);
        CString strExt(ptr);
        if(strExt.Left(1) == "*") strExt = strExt.TrimLeft("*");
        if(strExt.Left(1) == ".") strExt = strExt.TrimLeft(".");
        SetDefExt(strExt);
        CFileDialog::OnTypeChange();
    }
};

[PR]
by isoq | 2005-03-08 01:16 | C/C++/Win32
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇
<< NewsHandler2の息吹 NaiNaiがバージョンアップ... >>