方法を追加編集ボックスMFC CFolderDialog("閲覧のためのフォルダ"ダイアログ)?

StackOverflow https://stackoverflow.com/questions/1030159

  •  06-07-2019
  •  | 
  •  

質問

私は現在、CFolderDialogクラスがカバーされておりましてCDocManagerEx扱うためのクラスファイルとしての業務。

altテキストhttp://img268.yfrog.com/img268/9271/filedialog.png

わからない場合は私に必要なものはこのメソッド実装は、このクラス(このプロジェクト掲載 こちらのが、このクラス定義の場合です:

class CFolderDialog  
{
    friend static int CALLBACK BrowseDirectoryCallback(
        HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData);

public:
    CFolderDialog(  LPCTSTR lpszFolderName = NULL, 
        DWORD dwFlags = NULL/*BIF_RETURNONLYFSDIRS*/, 
        CWnd* pParentWnd = NULL);
    virtual ~CFolderDialog();
    virtual int DoModal();
    CString GetPathName() const;

protected:
    virtual void OnInitDialog();
    virtual void OnSelChanged(ITEMIDLIST* pIdl);
    virtual void CallbackFunction(HWND hWnd, UINT uMsg, LPARAM lParam);

    void EnableOK(BOOL bEnable = TRUE);
    void SetSelection(LPCTSTR pszSelection);
    void SetSelection(ITEMIDLIST* pIdl);
    void SetStatusText(LPCTSTR pszStatusText);
    CString ShortName(const CString& strName);

public:
    BROWSEINFO m_bi;

protected:
    CString m_strInitialFolderName;
    CString m_strFinalFolderName;

    TCHAR m_szDisplayName[MAX_PATH];
    TCHAR m_szPath[MAX_PATH];

    HWND m_hDialogBox;
};

class CMyFolderDialog : public CFolderDialog  
{
public:
    CMyFolderDialog(LPCTSTR lpszFolderName = NULL, 
        DWORD dwFlags = NULL, 
        CWnd* pParentWnd = NULL,
        LPCTSTR pszFileFilter = NULL);
    virtual ~CMyFolderDialog();
protected:
    virtual void OnSelChanged(ITEMIDLIST* pIdl);

protected:
    CString m_strFileFilter;
};

私の目標はこの問題を追加編集の画面で以下のワークスペースのディレクトリを選択します。という量そのものの持つ最も簡単な方法で達成。

役に立ちましたか?

解決

また編集を制御することで、ユーザの名前のディレクトリに入ることが可能です。C++クラスライブラリだけを使用するラッパーのWin32SHBrowseForFolder()メソッドは、このメソッドを支える編集ボックスに設定してBIF_EDITBOXは、BIF_USENEWUIのulFlagsのBROWSEINFOます。

のC++クラスは、このように見えるのにもっとも簡単な方法でこれを達成するにはパスBIF_USENEWUIのdwFlags員のコンストラクタます。がんに誘惑されることでSHBrowseForFolder直接、まぁいいんじゃないのC++クラスです。)

いには注意して警告このフラグにMSDNは:OleInitialize()またはCoInitialize()は呼び出される前に呼び出されな参加をお待ちしており、ダイアログこのフラグ.

より一般的には、したい場合に、編集制御できる利用のために自分の目的で、ユーザーのあとには何も入力し、その問題:が延長するダイアログを使用SHBrowseForFolder()カスタムで制御できます。たいのであれば、まとの再実施の全体のダイアログではないが、良い方法がありました。

また、最終的に、できればリアルに限定するようにしVista以降)が別の言い方をしているディレクトリ選択ダイアログ:用の新しいIFileDialog COMインタフェースのFOS_PICKFOLDERSフラグ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top