mfc cfolderdialog에 편집 상자를 추가하려면 어떻게합니까 ( "폴더 찾아보기"대화 상자)?

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

  •  06-07-2019
  •  | 
  •  

문제

현재 CDOCManagerex 클래스에서 파일 작업을 처리하는 데 사용되는 CFolderDialog 클래스가 있습니다.

Alt Text 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 ++ 클래스는 Win32 Shbrowseforfolder () 메소드 라운드 래퍼이며 해당 메소드는 BrowseInfo 구조의 Ulflags 멤버에 bif_editbox (또는 더 나은 Bif_usenewui)를 설정하여 편집 상자를 갖는 것을 지원합니다.

C ++ 클래스를 살펴보면이를 달성하는 가장 간단한 방법은 생성자 호출의 DWFLAGS 멤버로서 BIF_USENEWUI를 통과시키는 것입니다. (나는 단지 shbrowseforfolder에 직접 전화하고 C ++ 클래스를 귀찮게하지 않으려는 유혹을 받았습니다.)

그러나 MSDN 에서이 플래그에 대한 경고에 주목하십시오.

보다 일반적으로, 사용자가 자신의 목적으로 사용할 수있는 편집 컨트롤을 원한다면 사용자가 무엇이든 입력 할 수있게하는 경우 더 문제가됩니다. 사용자 정의 컨트롤과 함께 Shbrowseforfolder ()가 사용하는 대화 상자를 확장 할 수있는 방법이 없습니다. 그렇게하고 싶다면 결국 전체 대화를 다시 구현해야합니다. 좋은 생각은 아닙니다.

또한 마지막으로, Vista (및 그 너머)로 자신을 제한 할 수 있다면 디렉토리 선택 대화 상자를 갖는 또 다른 방법이 있습니다 : fos_pickfolders 플래그와 함께 새로운 ifiledialog com 인터페이스를 사용하십시오.

다른 팁

어쩌면 이것의 아이디어 중 일부는 당신이 원하는 것을 할 것입니까?

http://www.codeproject.com/kb/dialog/browse_for_folder_dialog.aspx

아니면 이거

http://www.codeguru.com/cpp/wp/files/browserfunctionsdialogs/article.php/c4443

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top