原文链接:CYABFFW: Yet Another BrowseForFolder Wrapper

      以良好的MFC风格将Shell API函数SHBrowseForFolder()封装为一个CWnd子类。

 

使用示例1

一个MFC风格的BrowseForFolder 封装类_#ifdefCYABFFW dlg();
一个MFC风格的BrowseForFolder 封装类_#ifdefif (IDOK == dlg.DoModal())
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06    CString s = dlg.GetPath();
一个MFC风格的BrowseForFolder 封装类_desktop_07    // Do something with `s' 一个MFC风格的BrowseForFolder 封装类_#ifdef_05
一个MFC风格的BrowseForFolder 封装类_#ifdef

使用示例2:

一个MFC风格的BrowseForFolder 封装类_#ifdefCYABFFW dlg(_T("Please select a directory"), // Hint to user
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdef            BIF_USE_NEWUI,                   // Flags for the dlg
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdef            this,                            // Parent window
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdef            CSIDL_DRIVES);                   // Root of search
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdefif (IDOK == dlg.DoModal())
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06    CString s = dlg.GetPath();
一个MFC风格的BrowseForFolder 封装类_desktop_07    // Do something with `s' 一个MFC风格的BrowseForFolder 封装类_#ifdef_05
一个MFC风格的BrowseForFolder 封装类_#ifdef

 

一个MFC风格的BrowseForFolder 封装类_desktop_26一个MFC风格的BrowseForFolder 封装类_ide_27YABFFW.h
一个MFC风格的BrowseForFolder 封装类_#ifdefclass CYABFFW : public CWnd
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  // Construction
一个MFC风格的BrowseForFolder 封装类_sed_06public:
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Construct with a textual hint, BFF flags, parent window, a
一个MFC风格的BrowseForFolder 封装类_sed_06  /// root folder expressed as a CSIDL value, and a default
一个MFC风格的BrowseForFolder 封装类_#ifdef_37  /// selection expressed as a textual path
一个MFC风格的BrowseForFolder 封装类_sed_06  CYABFFW(const CString &strHint = CString(), UINT nFlags = 0U,
一个MFC风格的BrowseForFolder 封装类_sed_06          CWnd *pParentWnd = NULL, int nRootFolder = CSIDL_DESKTOP,
一个MFC风格的BrowseForFolder 封装类_sed_06          const CString &strDefaultSel = CString());
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Construct with a default selection expressed as a CSIDL
一个MFC风格的BrowseForFolder 封装类_sed_06  /// value, a textual hint, BFF flags, parent window, & a root
一个MFC风格的BrowseForFolder 封装类_#ifdef_37  /// folder expressed as a CSIDL value
一个MFC风格的BrowseForFolder 封装类_sed_06  CYABFFW(int nDefaultSel, const CString &strHint = CString(),
一个MFC风格的BrowseForFolder 封装类_sed_06          UINT nFlags = 0U, CWnd *pParentWnd = NULL,
一个MFC风格的BrowseForFolder 封装类_sed_06          int nRootFolder = CSIDL_DESKTOP);
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Construct with a hint from Resource, BFF flags, parent
一个MFC风格的BrowseForFolder 封装类_sed_06  /// window, a root folder expressed as a CSIDL value, and a
一个MFC风格的BrowseForFolder 封装类_#ifdef_37  /// default selection expressed as a textual path
一个MFC风格的BrowseForFolder 封装类_sed_06  CYABFFW(int nHint, UINT nFlags = 0U, CWnd *pParentWnd = NULL,
一个MFC风格的BrowseForFolder 封装类_sed_06          int nRootFolder = CSIDL_DESKTOP,
一个MFC风格的BrowseForFolder 封装类_sed_06          const CString &strDefaultSel = CString());
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Construct with a hint from Resource, a default selection
一个MFC风格的BrowseForFolder 封装类_sed_06  /// expressed as a CSIDL value, BFF flags, parent window, & a
一个MFC风格的BrowseForFolder 封装类_#ifdef_37  /// root folder expressed as a CSIDL value
一个MFC风格的BrowseForFolder 封装类_sed_06  CYABFFW(int nDefaultSel, int nHint, UINT nFlags = 0U,
一个MFC风格的BrowseForFolder 封装类_sed_06          CWnd *pParentWnd = NULL, int nRootFolder = CSIDL_DESKTOP);
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Construct with a textual hint, an arbitrary root folder,
一个MFC风格的BrowseForFolder 封装类_sed_06  /// BFF flags, a parent window, and a default selection
一个MFC风格的BrowseForFolder 封装类_#ifdef_37  /// expressed as a textual path
一个MFC风格的BrowseForFolder 封装类_sed_06  CYABFFW(const CString &strHint, const CString &strRoot,
一个MFC风格的BrowseForFolder 封装类_sed_06          UINT nFlags = 0U, CWnd *pParentWnd = NULL,
一个MFC风格的BrowseForFolder 封装类_sed_06          const CString &strDefaultSel = CString());
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Construct with a textual hint, a default selection
一个MFC风格的BrowseForFolder 封装类_sed_06  /// expressed as a CSIDL value, an arbitrary root folder, BFF
一个MFC风格的BrowseForFolder 封装类_#ifdef_37  /// flags, & a parent window
一个MFC风格的BrowseForFolder 封装类_sed_06  CYABFFW(int nDefaultSel, const CString &strHint, const CString &strRoot,
一个MFC风格的BrowseForFolder 封装类_sed_06          UINT nFlags = 0U, CWnd *pParentWnd = NULL);
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Construct with a hint from Resource, an arbitrary root
一个MFC风格的BrowseForFolder 封装类_sed_06  /// folder, BFF flags, a parent widnow, and a textual default
一个MFC风格的BrowseForFolder 封装类_#ifdef_37  /// selection
一个MFC风格的BrowseForFolder 封装类_sed_06  CYABFFW(int nHint, const CString &strRoot, UINT nFlags = 0U,
一个MFC风格的BrowseForFolder 封装类_sed_06          CWnd *pParentWnd = NULL,
一个MFC风格的BrowseForFolder 封装类_sed_06          const CString &strDefaultSel = CString());
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Construct with a hint from Resource, a default selection
一个MFC风格的BrowseForFolder 封装类_sed_06  /// expressed as a CSIDL value, an arbitrary root folder, BFF
一个MFC风格的BrowseForFolder 封装类_#ifdef_37  /// flags, & a parent widnow
一个MFC风格的BrowseForFolder 封装类_sed_06  CYABFFW(int nDefaultSel, int nHint, const CString &strRoot,
一个MFC风格的BrowseForFolder 封装类_sed_06          UINT nFlags = 0U, CWnd *pParentWnd = NULL);
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  // Attributes
一个MFC风格的BrowseForFolder 封装类_sed_06public:
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Retrieve the display name of the selected item
一个MFC风格的BrowseForFolder 封装类_sed_06  CString GetDisplayName() const;
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Retrieve the ITEMIDLIST of the selected item
一个MFC风格的BrowseForFolder 封装类_sed_06  LPCITEMIDLIST GetItemIdList() const;
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Retrieve the path to the selected item
一个MFC风格的BrowseForFolder 封装类_sed_06  CString GetPath() const;
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  // Operations
一个MFC风格的BrowseForFolder 封装类_sed_06public:
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Display the Dialog - returns IDOK or IDCANCEL
一个MFC风格的BrowseForFolder 封装类_sed_06  int DoModal();
一个MFC风格的BrowseForFolder 封装类_sed_06  // Overrides
一个MFC风格的BrowseForFolder 封装类_sed_06public:
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Called when the BFF Dialog has initialized
一个MFC风格的BrowseForFolder 封装类_sed_06  virtual void OnInitBFFDialog();
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Called when the selection has changed in the tree control
一个MFC风格的BrowseForFolder 封装类_sed_06  virtual void OnBFFSelChanged(LPITEMIDLIST pNewSel);
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Called when the user types an invalid name
一个MFC风格的BrowseForFolder 封装类_sed_06  virtual BOOL OnBFFValidateFailed(const CString &strBadName);
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  // ClassWizard generated virtual function overrides
一个MFC风格的BrowseForFolder 封装类_sed_06  //{{AFX_VIRTUAL(CYABFFW)
一个MFC风格的BrowseForFolder 封装类_sed_06  //}}AFX_VIRTUAL
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  // Implementation
一个MFC风格的BrowseForFolder 封装类_sed_06public:
一个MFC风格的BrowseForFolder 封装类_sed_06  virtual ~CYABFFW();
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  // Generated message map functions
一个MFC风格的BrowseForFolder 封装类_sed_06protected:
一个MFC风格的BrowseForFolder 封装类_sed_06  //{{AFX_MSG(CYABFFW) NOTE - the ClassWizard will add and remove
一个MFC风格的BrowseForFolder 封装类_sed_06  // member functions here.
一个MFC风格的BrowseForFolder 封装类_sed_06  //}}AFX_MSG
一个MFC风格的BrowseForFolder 封装类_sed_06  DECLARE_MESSAGE_MAP()
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06private:
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Static method to be used for the SHBFF callback
一个MFC风格的BrowseForFolder 封装类_sed_06  static int CALLBACK BrowseCallbackProc(HWND hWnd, UINT nMsg,
一个MFC风格的BrowseForFolder 封装类_sed_06                                         LPARAM lParam,
一个MFC风格的BrowseForFolder 封装类_sed_06                                         LPARAM lpData);
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06private:
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Free the memory referenced by m_pItemIdList
一个MFC风格的BrowseForFolder 封装类_sed_06  void FreeItemIdList(IMalloc *pMalloc = NULL);
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// CSIDL => ITEMIDLIST
一个MFC风格的BrowseForFolder 封装类_sed_06  LPITEMIDLIST ResolveCsidl(int nCsidl) const;
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Textual filesystem path => ITEMIDLIST
一个MFC风格的BrowseForFolder 封装类_sed_06  LPITEMIDLIST ResolveFsPath(const CString &strPath) const;
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06private:
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Display name of the selected item
一个MFC风格的BrowseForFolder 封装类_sed_06  CString m_strDisplayName;
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Flags to be passed to the browse dialog
一个MFC风格的BrowseForFolder 封装类_sed_06  UINT m_nFlags;
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// "Hint" to be displayed above the tree control
一个MFC风格的BrowseForFolder 封装类_sed_06  CString m_strHint;
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// ITEMIDLIST identifying the selected Shell item
一个MFC风格的BrowseForFolder 封装类_sed_06  LPITEMIDLIST m_pItemIdList;
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Parent CWnd (NULL => App main window)
一个MFC风格的BrowseForFolder 封装类_sed_06  CWnd *m_pParentWnd;
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Selected path
一个MFC风格的BrowseForFolder 封装类_sed_06  CString m_strPath;
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// ITEMIDLIST identifying the root
一个MFC风格的BrowseForFolder 封装类_sed_06  LPITEMIDLIST m_pRoot;
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Default selection, if given as text (empty if none)
一个MFC风格的BrowseForFolder 封装类_sed_06  CString m_strDefaultSel;
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  /**//// Default selection, if given as a CSIDL value (NULL if none)
一个MFC风格的BrowseForFolder 封装类_sed_06  LPITEMIDLIST m_pDefaultSel;
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_desktop_07};
一个MFC风格的BrowseForFolder 封装类_#ifdef

 

一个MFC风格的BrowseForFolder 封装类_desktop_26一个MFC风格的BrowseForFolder 封装类_ide_27YABFFW.cpp
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04CYABFFW::CYABFFW( const CString &strHint    /**//*= CString()*/,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                  UINT nFlags               /**//*= 0U*/,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                  CWnd *pParentWnd          /**//*= NULL*/,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                  int nRootFolder           /**//*= CSIDL_DESKTOP*/,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                  const CString &strDefault /**//*= CString()*/     ) :
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_nFlags(nFlags),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_strHint(strHint),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pItemIdList(NULL),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pParentWnd(pParentWnd),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pRoot(NULL),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_strDefaultSel(strDefault),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pDefaultSel(NULL)
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  ASSERT_NULL_OR_VALID(pParentWnd); // Paranoia
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  m_pRoot = ResolveCsidl(nRootFolder);
一个MFC风格的BrowseForFolder 封装类_desktop_07}
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdefCYABFFW::CYABFFW(int            nDefaultSel,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                 const CString &strHint     /**//*= CString()*/,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                 UINT           nFlags      /**//*= 0U*/,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                 CWnd          *pParentWnd  /**//*= NULL*/,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                 int            nRootFolder /**//*= CSIDL_DESKTOP*/):
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_nFlags(nFlags),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_strHint(strHint),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pItemIdList(NULL),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pParentWnd(pParentWnd),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pRoot(NULL),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pDefaultSel(NULL)
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  ASSERT_NULL_OR_VALID(pParentWnd); // Paranoia
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  m_pRoot = ResolveCsidl(nRootFolder);
一个MFC风格的BrowseForFolder 封装类_sed_06  m_pDefaultSel = ResolveCsidl(nDefaultSel);
一个MFC风格的BrowseForFolder 封装类_desktop_07}
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdefCYABFFW::CYABFFW(int            nHint,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                 UINT           nFlags        /**//*= 0U*/,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                 CWnd          *pParentWnd    /**//*= NULL*/,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                 int            nRootFolder   /**//*= CSIDL_DESKTOP*/,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                 const CString &strDefaultSel /**//*= CString()*/) :
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_nFlags(nFlags),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pItemIdList(NULL),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pParentWnd(pParentWnd),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pRoot(NULL),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_strDefaultSel(strDefaultSel),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pDefaultSel(NULL)
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  ASSERT_NULL_OR_VALID(pParentWnd); // Paranoia
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  if (!m_strHint.LoadString(nHint))
一个MFC风格的BrowseForFolder 封装类_sed_06    AfxThrowResourceException();
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  m_pRoot = ResolveCsidl(nRootFolder);
一个MFC风格的BrowseForFolder 封装类_desktop_07}
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdefCYABFFW::CYABFFW(int nDefaultSel,
一个MFC风格的BrowseForFolder 封装类_#ifdef                 int nHint,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                 UINT nFlags      /**//*= 0U*/,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                 CWnd *pParentWnd /**//*= NULL*/,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                 int nRootFolder  /**//*= CSIDL_DESKTOP*/) :
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_nFlags(nFlags),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pItemIdList(NULL),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pParentWnd(pParentWnd),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pRoot(NULL),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pDefaultSel(NULL)
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  ASSERT_NULL_OR_VALID(pParentWnd); // Paranoia
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  if (!m_strHint.LoadString(nHint))
一个MFC风格的BrowseForFolder 封装类_sed_06    AfxThrowResourceException();
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  m_pRoot = ResolveCsidl(nRootFolder);
一个MFC风格的BrowseForFolder 封装类_sed_06  m_pDefaultSel = ResolveCsidl(nDefaultSel);
一个MFC风格的BrowseForFolder 封装类_desktop_07}
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdef CYABFFW::CYABFFW(const CString &strHint,
一个MFC风格的BrowseForFolder 封装类_#ifdef                  const CString &strRoot,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                  UINT nFlags      /**//*= 0U*/,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                  CWnd *pParentWnd /**//*= NULL*/,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                  const CString &strDefaultSel /**//*=CString()*/) :
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_nFlags(nFlags),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_strHint(strHint),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pItemIdList(NULL),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pParentWnd(pParentWnd),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pRoot(NULL),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_strDefaultSel(strDefaultSel),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pDefaultSel(NULL)
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  ASSERT_NULL_OR_VALID(pParentWnd); // Paranoia
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  m_pRoot = ResolveFsPath(strRoot);
一个MFC风格的BrowseForFolder 封装类_desktop_07}
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdefCYABFFW::CYABFFW(int            nDefaultSel,
一个MFC风格的BrowseForFolder 封装类_#ifdef                 const CString &strHint,
一个MFC风格的BrowseForFolder 封装类_#ifdef                 const CString &strRoot,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                 UINT           nFlags      /**//*= 0U*/,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                 CWnd           *pParentWnd /**//*= NULL*/) :
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_nFlags(nFlags),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_strHint(strHint),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pItemIdList(NULL),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pParentWnd(pParentWnd),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pRoot(NULL),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pDefaultSel(NULL)
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  ASSERT_NULL_OR_VALID(pParentWnd); // Paranoia
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  m_pRoot = ResolveFsPath(strRoot);
一个MFC风格的BrowseForFolder 封装类_sed_06  m_pDefaultSel = ResolveCsidl( nDefaultSel );
一个MFC风格的BrowseForFolder 封装类_desktop_07}
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdefCYABFFW::CYABFFW(int nHint,
一个MFC风格的BrowseForFolder 封装类_#ifdef                 const CString &strRoot,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                 UINT nFlags /**//*= 0U*/,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                 CWnd *pParentWnd /**//*= NULL*/,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                 const CString &strDefaultSel /**//*= CString()*/) :
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_nFlags(nFlags),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pItemIdList(NULL),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pParentWnd(pParentWnd),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pRoot(NULL),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_strDefaultSel(strDefaultSel),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pDefaultSel(NULL)
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  ASSERT_NULL_OR_VALID(pParentWnd); // Paranoia
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  if (!m_strHint.LoadString(nHint))
一个MFC风格的BrowseForFolder 封装类_sed_06    AfxThrowResourceException();
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  m_pRoot = ResolveFsPath(strRoot);
一个MFC风格的BrowseForFolder 封装类_desktop_07}
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdefCYABFFW::CYABFFW(int nDefaultSel,
一个MFC风格的BrowseForFolder 封装类_#ifdef                 int nHint,
一个MFC风格的BrowseForFolder 封装类_#ifdef                 const CString &strRoot,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                 UINT nFlags /**//*= 0U*/,
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04                 CWnd *pParentWnd /**//*= NULL*/) :
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_nFlags(nFlags),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pItemIdList(NULL),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pParentWnd(pParentWnd),
一个MFC风格的BrowseForFolder 封装类_#ifdef  m_pRoot(NULL)
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  ASSERT_NULL_OR_VALID(pParentWnd); // Paranoia
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  if (!m_strHint.LoadString(nHint))
一个MFC风格的BrowseForFolder 封装类_sed_06    AfxThrowResourceException();
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  m_pRoot = ResolveFsPath(strRoot);
一个MFC风格的BrowseForFolder 封装类_sed_06  m_pDefaultSel = ResolveCsidl(nDefaultSel);
一个MFC风格的BrowseForFolder 封装类_desktop_07}
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdef#ifdef _DEBUG
一个MFC风格的BrowseForFolder 封装类_#ifdefCString CYABFFW::GetDisplayName() const
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  return m_strDisplayName;
一个MFC风格的BrowseForFolder 封装类_desktop_07}
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdefLPCITEMIDLIST CYABFFW::GetItemIdList() const
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  return m_pItemIdList;
一个MFC风格的BrowseForFolder 封装类_desktop_07}
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdefCString CYABFFW::GetPath() const
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  return m_strPath;
一个MFC风格的BrowseForFolder 封装类_desktop_07}
一个MFC风格的BrowseForFolder 封装类_#ifdef#endif  // _DEBUG
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdefint CYABFFW::DoModal()
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  // We'll need this eventually 一个MFC风格的BrowseForFolder 封装类_#ifdef_05
一个MFC风格的BrowseForFolder 封装类_sed_06  HRESULT hr;
一个MFC风格的BrowseForFolder 封装类_sed_06  IMalloc *pMalloc;
一个MFC风格的BrowseForFolder 封装类_sed_06  if (FAILED(hr = ::SHGetMalloc(&pMalloc)))
一个MFC风格的BrowseForFolder 封装类_sed_06    AfxThrowOleException(hr);
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  // Fill out a 'BROWSEINFO' structure to hand to 'SHBrowseFor-
一个MFC风格的BrowseForFolder 封装类_sed_06  // Folder':
一个MFC风格的BrowseForFolder 封装类_sed_06  BROWSEINFO browseInfo;
一个MFC风格的BrowseForFolder 封装类_sed_06  ::ZeroMemory(&browseInfo, sizeof(BROWSEINFO));
一个MFC风格的BrowseForFolder 封装类_sed_06  browseInfo.hwndOwner = (NULL == m_pParentWnd ? NULL :
一个MFC风格的BrowseForFolder 封装类_sed_06                          m_pParentWnd->m_hWnd);
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  browseInfo.pidlRoot = m_pRoot;
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  // Use a CString for memory management
一个MFC风格的BrowseForFolder 封装类_sed_06  browseInfo.pszDisplayName =
一个MFC风格的BrowseForFolder 封装类_sed_06    m_strDisplayName.GetBufferSetLength(MAX_PATH);
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  browseInfo.lpszTitle = m_strHint;
一个MFC风格的BrowseForFolder 封装类_sed_06  browseInfo.ulFlags = m_nFlags;
一个MFC风格的BrowseForFolder 封装类_sed_06  browseInfo.lpfn = BrowseCallbackProc;
一个MFC风格的BrowseForFolder 封装类_sed_06  browseInfo.lParam = (long)this;
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  if (NULL != m_pItemIdList)
一个MFC风格的BrowseForFolder 封装类_sed_06    FreeItemIdList();           // Probably never happen, but 一个MFC风格的BrowseForFolder 封装类_#ifdef_05
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  if (NULL == (m_pItemIdList = ::SHBrowseForFolder(&browseInfo)))
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06    // User Cancelled out - clean up & bail.
一个MFC风格的BrowseForFolder 封装类_sed_06    m_strDisplayName.ReleaseBuffer();
一个MFC风格的BrowseForFolder 封装类_sed_06    pMalloc->Release();
一个MFC风格的BrowseForFolder 封装类_sed_06    return IDCANCEL;
一个MFC风格的BrowseForFolder 封装类_#ifdef_37  }
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  // Right - if we're here, the user actually selected an item.
一个MFC风格的BrowseForFolder 封装类_sed_06  // Try to get a full path.  This will fail if the selected item
一个MFC风格的BrowseForFolder 封装类_sed_06  // is not part of the FileSystem.
一个MFC风格的BrowseForFolder 封装类_sed_06  ::SHGetPathFromIDList(m_pItemIdList,
一个MFC风格的BrowseForFolder 封装类_sed_06                        m_strPath.GetBufferSetLength(MAX_PATH));
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  // Cleanup time 一个MFC风格的BrowseForFolder 封装类_#ifdef_05
一个MFC风格的BrowseForFolder 封装类_sed_06  m_strPath.ReleaseBuffer();
一个MFC风格的BrowseForFolder 封装类_sed_06  m_strDisplayName.ReleaseBuffer();
一个MFC风格的BrowseForFolder 封装类_sed_06  pMalloc->Release();
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  // Note: m_pItemIdList has *not* been freed!  We keep around in
一个MFC风格的BrowseForFolder 封装类_sed_06  // case the caller wants to retrieve it later.  It will
一个MFC风格的BrowseForFolder 封装类_sed_06  // ultimately be free-d in the destructor.
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  return IDOK;
一个MFC风格的BrowseForFolder 封装类_desktop_07}
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdefvoid CYABFFW::OnInitBFFDialog()
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  if ( ! m_strDefaultSel.IsEmpty( ) )
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06    TRACE( _T( "Setting the default selection to %s.\n" ),
一个MFC风格的BrowseForFolder 封装类_sed_06           ( LPCTSTR ) m_strDefaultSel );
一个MFC风格的BrowseForFolder 封装类_sed_06    SendMessage( BFFM_SETSELECTION, TRUE, ( LPARAM ) ( LPCTSTR ) m_strDefaultSel );
一个MFC风格的BrowseForFolder 封装类_#ifdef_37  }
一个MFC风格的BrowseForFolder 封装类_sed_06  else if ( m_pDefaultSel )
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06    SendMessage( BFFM_SETSELECTION, FALSE, ( LPARAM ) m_pDefaultSel );
一个MFC风格的BrowseForFolder 封装类_#ifdef_37  }
一个MFC风格的BrowseForFolder 封装类_desktop_07}
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04void CYABFFW::OnBFFSelChanged(LPITEMIDLIST /**//*pNewSel*/)
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{ /**//* No handling by default */ }
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04BOOL CYABFFW::OnBFFValidateFailed(const CString & /**//*strBadName*/)
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{ return TRUE; /**//* No handling by default */ }
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdefCYABFFW::~CYABFFW()
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  HRESULT hr;
一个MFC风格的BrowseForFolder 封装类_sed_06  IMalloc *pMalloc;
一个MFC风格的BrowseForFolder 封装类_sed_06  if (FAILED(hr = ::SHGetMalloc(&pMalloc)))
一个MFC风格的BrowseForFolder 封装类_sed_06    AfxThrowOleException(hr);
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  pMalloc->Free(m_pRoot);
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  FreeItemIdList(pMalloc);
一个MFC风格的BrowseForFolder 封装类_desktop_07}
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdefBEGIN_MESSAGE_MAP(CYABFFW, CWnd)
一个MFC风格的BrowseForFolder 封装类_#ifdef  //{{AFX_MSG_MAP(CYABFFW)
一个MFC风格的BrowseForFolder 封装类_#ifdef  // NOTE - the ClassWizard will add and remove mapping macros here.
一个MFC风格的BrowseForFolder 封装类_#ifdef  //}}AFX_MSG_MAP
一个MFC风格的BrowseForFolder 封装类_#ifdefEND_MESSAGE_MAP()
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdefint CYABFFW::BrowseCallbackProc(HWND hWnd,
一个MFC风格的BrowseForFolder 封装类_#ifdef                                UINT nMsg,
一个MFC风格的BrowseForFolder 封装类_#ifdef                                LPARAM lParam,
一个MFC风格的BrowseForFolder 封装类_#ifdef                                LPARAM lpData)
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  CYABFFW *pWnd = reinterpret_cast<CYABFFW*>(lpData);
一个MFC风格的BrowseForFolder 封装类_sed_06  ASSERT_VALID(pWnd);
一个MFC风格的BrowseForFolder 封装类_sed_06  ASSERT(NULL == pWnd->m_hWnd || hWnd == pWnd->m_hWnd);
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  if (NULL == pWnd->m_hWnd && !pWnd->SubclassWindow(hWnd))
一个MFC风格的BrowseForFolder 封装类_sed_06    AfxThrowOleException(HRESULT_FROM_WIN32(::GetLastError()));
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  switch (nMsg)
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  case BFFM_INITIALIZED:
一个MFC风格的BrowseForFolder 封装类_sed_06    // Indicates the browse dialog box has finished
一个MFC风格的BrowseForFolder 封装类_sed_06    // initializing. The lParam value is zero.
一个MFC风格的BrowseForFolder 封装类_sed_06    pWnd->OnInitBFFDialog();
一个MFC风格的BrowseForFolder 封装类_sed_06    return 0;
一个MFC风格的BrowseForFolder 封装类_sed_06  case BFFM_SELCHANGED:
一个MFC风格的BrowseForFolder 封装类_sed_06    // Indicates the selection has changed. The lParam parameter
一个MFC风格的BrowseForFolder 封装类_sed_06    // points to the item identifier list for the newly selected
一个MFC风格的BrowseForFolder 封装类_sed_06    // item.
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35    一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06      LPITEMIDLIST p = reinterpret_cast<LPITEMIDLIST>(lParam);
一个MFC风格的BrowseForFolder 封装类_sed_06      ASSERT_POINTER(p, ITEMIDLIST);
一个MFC风格的BrowseForFolder 封装类_sed_06      pWnd->OnBFFSelChanged(p);
一个MFC风格的BrowseForFolder 封装类_sed_06      return 0;
一个MFC风格的BrowseForFolder 封装类_#ifdef_37    }
一个MFC风格的BrowseForFolder 封装类_sed_06  case BFFM_VALIDATEFAILED:
一个MFC风格的BrowseForFolder 封装类_sed_06    // Indicates the user typed an invalid name into the edit box
一个MFC风格的BrowseForFolder 封装类_sed_06    // of the browse dialog box. The lParam parameter is the
一个MFC风格的BrowseForFolder 封装类_sed_06    // address of a character buffer that contains the invalid
一个MFC风格的BrowseForFolder 封装类_sed_06    // name. An application can use this message to inform the
一个MFC风格的BrowseForFolder 封装类_sed_06    // user that the name entered was not valid. Return zero to
一个MFC风格的BrowseForFolder 封装类_sed_06    // allow the dialog to be dismissed or nonzero to keep the
一个MFC风格的BrowseForFolder 封装类_sed_06    // dialog displayed.
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35    一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06      LPTSTR p = reinterpret_cast<LPTSTR>(lParam);
一个MFC风格的BrowseForFolder 封装类_sed_06      ASSERT(!::IsBadStringPtr(p, UINT_MAX));
一个MFC风格的BrowseForFolder 封装类_sed_06      BOOL bDismissOk = pWnd->OnBFFValidateFailed(CString(p));
一个MFC风格的BrowseForFolder 封装类_sed_06      return bDismissOk ? 0 : 1;
一个MFC风格的BrowseForFolder 封装类_#ifdef_37    }
一个MFC风格的BrowseForFolder 封装类_sed_06  default:
一个MFC风格的BrowseForFolder 封装类_sed_06    TRACE(_T("WARNING: Unknown message 0x%08x (0x%08x) ")
一个MFC风格的BrowseForFolder 封装类_sed_06          _T("passed to CYABFFW::BrowseCallbackProc!\n"),
一个MFC风格的BrowseForFolder 封装类_sed_06          nMsg, lParam);
一个MFC风格的BrowseForFolder 封装类_sed_06    return 0;
一个MFC风格的BrowseForFolder 封装类_#ifdef_37  } // End switch on nMsg.
一个MFC风格的BrowseForFolder 封装类_desktop_07}
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04void CYABFFW::FreeItemIdList(IMalloc *pMalloc /**//*= NULL*/)
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  if (NULL == m_pItemIdList)
一个MFC风格的BrowseForFolder 封装类_sed_06    return;
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  bool bWeRelease = false;
一个MFC风格的BrowseForFolder 封装类_sed_06  if (NULL == pMalloc)
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06    bWeRelease = true;
一个MFC风格的BrowseForFolder 封装类_sed_06    HRESULT hr;
一个MFC风格的BrowseForFolder 封装类_sed_06    IMalloc *pMalloc;
一个MFC风格的BrowseForFolder 封装类_sed_06    if (FAILED(hr = ::SHGetMalloc(&pMalloc)))
一个MFC风格的BrowseForFolder 封装类_sed_06      AfxThrowOleException(hr);
一个MFC风格的BrowseForFolder 封装类_#ifdef_37  }
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  pMalloc->Free(m_pItemIdList);
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  if (bWeRelease)
一个MFC风格的BrowseForFolder 封装类_sed_06    pMalloc->Release();
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  m_pItemIdList = NULL;
一个MFC风格的BrowseForFolder 封装类_desktop_07}
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdefLPITEMIDLIST CYABFFW::ResolveCsidl(int nCsidl) const
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  // Short-circuit special case 一个MFC风格的BrowseForFolder 封装类_#ifdef_05
一个MFC风格的BrowseForFolder 封装类_sed_06  if (CSIDL_DESKTOP == nCsidl)
一个MFC风格的BrowseForFolder 封装类_sed_06    return NULL;
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  LPITEMIDLIST pidlRoot;
一个MFC风格的BrowseForFolder 封装类_sed_06  HRESULT hr = ::SHGetFolderLocation(NULL, nCsidl, NULL, 0U,
一个MFC风格的BrowseForFolder 封装类_sed_06                                     &pidlRoot);
一个MFC风格的BrowseForFolder 封装类_sed_06  if (FAILED(hr))
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06    ASSERT(NULL == pidlRoot);
一个MFC风格的BrowseForFolder 封装类_sed_06    AfxThrowOleException(hr);
一个MFC风格的BrowseForFolder 封装类_#ifdef_37  }
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  return pidlRoot;              // Caller assumes responsibility
一个MFC风格的BrowseForFolder 封装类_desktop_07}
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdefLPITEMIDLIST CYABFFW::ResolveFsPath(const CString &strPath) const
一个MFC风格的BrowseForFolder 封装类_封装_03一个MFC风格的BrowseForFolder 封装类_#ifdef_04一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06  USES_CONVERSION;
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06# ifdef _DEBUG
一个MFC风格的BrowseForFolder 封装类_sed_06  DWORD dwFileAttrs = ::GetFileAttributes(strPath);
一个MFC风格的BrowseForFolder 封装类_sed_06  ASSERT(0xffffffff != dwFileAttrs &&
一个MFC风格的BrowseForFolder 封装类_sed_06         FILE_ATTRIBUTE_DIRECTORY & dwFileAttrs);
一个MFC风格的BrowseForFolder 封装类_sed_06# endif  // _DEBUG
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  HRESULT hr;
一个MFC风格的BrowseForFolder 封装类_sed_06  IShellFolder *pDesktop;
一个MFC风格的BrowseForFolder 封装类_sed_06  if ( FAILED(hr = ::SHGetDesktopFolder(&pDesktop)) )
一个MFC风格的BrowseForFolder 封装类_sed_06    AfxThrowOleException(hr);
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  // Unfortunately, T2OLE expects a non-const string, so 一个MFC风格的BrowseForFolder 封装类_#ifdef_05
一个MFC风格的BrowseForFolder 封装类_sed_06  LPOLESTR p2 = T2OLE(const_cast<LPTSTR>(
一个MFC风格的BrowseForFolder 封装类_sed_06                        static_cast<LPCTSTR>(strPath)));
一个MFC风格的BrowseForFolder 封装类_sed_06  LPITEMIDLIST pItemIdList;
一个MFC风格的BrowseForFolder 封装类_sed_06  if ( FAILED(hr = pDesktop->ParseDisplayName(NULL, NULL,
一个MFC风格的BrowseForFolder 封装类_sed_06                                              p2,
一个MFC风格的BrowseForFolder 封装类_sed_06                                              NULL,
一个MFC风格的BrowseForFolder 封装类_sed_06                                              &pItemIdList,
一个MFC风格的BrowseForFolder 封装类_sed_06                                              NULL)) )
一个MFC风格的BrowseForFolder 封装类_sed_34一个MFC风格的BrowseForFolder 封装类_ide_35  一个MFC风格的BrowseForFolder 封装类_#ifdef_05{
一个MFC风格的BrowseForFolder 封装类_sed_06    pDesktop->Release();
一个MFC风格的BrowseForFolder 封装类_sed_06    AfxThrowOleException(hr);
一个MFC风格的BrowseForFolder 封装类_#ifdef_37  }
一个MFC风格的BrowseForFolder 封装类_sed_06
一个MFC风格的BrowseForFolder 封装类_sed_06  pDesktop->Release();
一个MFC风格的BrowseForFolder 封装类_sed_06  return pItemIdList;           // Caller assumes responsibility
一个MFC风格的BrowseForFolder 封装类_desktop_07}
一个MFC风格的BrowseForFolder 封装类_#ifdef
一个MFC风格的BrowseForFolder 封装类_#ifdef