BrowseForFolder.h
上传用户:furain
上传日期:2007-01-04
资源大小:14k
文件大小:5k
源码类别:

Shell编程

开发平台:

Visual C++

  1. //////////////////////////////////////////////////////////////////////
  2. //
  3. // ShellBrowser.h: interface for the CShellBrowser class.
  4. //
  5. // Copyright 1998 Scott D. Killen
  6. //
  7. //////////////////////////////////////////////////////////////////////
  8. #ifndef __SHELLBROWSER_H__
  9. #define __SHELLBROWSER_H__
  10. #if _MSC_VER >= 1000
  11. #pragma once
  12. #endif // _MSC_VER >= 1000
  13. #include <memory>
  14. #include <shlobj.h>
  15. //////////////////////////////////////////////////////////////////////
  16. //
  17. // CShellBrowser
  18. //
  19. class CBrowseForFolder
  20. {
  21. public:
  22. CBrowseForFolder(const HWND hParent = NULL, const LPITEMIDLIST pidl = NULL, const int nTitleID = 0);
  23. CBrowseForFolder(const HWND hParent, const LPITEMIDLIST pidl, const CString& strTitle);
  24. virtual ~CBrowseForFolder() = 0;
  25. //
  26. // Set the handle of the owner window for the dialog box.
  27. //
  28. void SetOwner(const HWND hwndOwner);
  29. //
  30. // Set the root of the heirarchy that will be browsed.  Get pidl from SHGetSpecialFolderLocation.
  31. // This can be set to NULL to use the Virtual Folder that represents the Windows Desktop.
  32. //
  33. void SetRoot(const LPITEMIDLIST pidl);
  34. //
  35.     // Access a string that is displayed above the tree view control in the dialog box. This
  36. // string can be used to specify instructions to the user.  strTitle is a CString containing
  37. // the text to be displayed.  nTitle is the index of a string resource to be loaded.  The
  38. // return value is false if the resource could not be loaded.
  39. //
  40. CString GetTitle() const;
  41. void SetTitle(const CString& strTitle);
  42. bool SetTitle(const int nTitle);
  43. //
  44. // ulFlags = Value specifying the types of folders to be listed in the dialog box as well as
  45. //           other options. This member can include zero or more of the following values:
  46. //
  47. //          BIF_BROWSEFORCOMPUTER    Only returns computers. If the user selects anything
  48. //                                   other than a computer, the OK button is grayed.
  49. //
  50. //          BIF_BROWSEFORPRINTER     Only returns printers. If the user selects anything 
  51. //                                   other than a printer, the OK button is grayed.
  52. //
  53. //          BIF_DONTGOBELOWDOMAIN    Does not include network folders below the domain level
  54. //                                   in the tree view control.
  55. //
  56. //          BIF_RETURNFSANCESTORS    Only returns file system ancestors. If the user selects
  57. //                                   anything other than a file system ancestor, the OK
  58. //                                   button is grayed.
  59.     //
  60.     //          BIF_RETURNONLYFSDIRS     Only returns file system directories. If the user
  61. //                                   selects folders that are not part of the file system,
  62. //                                   the OK button is grayed.
  63. //
  64. //          BIF_STATUSTEXT           Includes a status area in the dialog box. The callback
  65. //                                   function can set the status text by sending messages to
  66. //                                   the dialog box. 
  67. //
  68. UINT GetFlags() const;
  69. void SetFlags(const UINT ulFlags);
  70. //
  71. // Call GetSelectedFolder to retrieve the folder selected by the user.
  72. //
  73. CString GetSelectedFolder() const;
  74. //
  75. // Function to retreive the image associated with the selected folder. The image is specified
  76. // as an index to the system image list. 
  77. //
  78. int GetImage() const;
  79. //
  80. // Call SelectFolder to display the dialog and get a selection from the user.  Use
  81. // GetSelectedFolder and GetImage to get the results of the dialog.
  82. //
  83. bool SelectFolder();
  84. protected:
  85. //
  86. // OnInit is called before the dialog is displayed on the screen.
  87. //
  88. virtual void OnInit() const;
  89. //
  90. // OnSelChanged is called whenever the user selects a different directory.  pidl is the
  91. // LPITEMIDLIST of the new selection.  Use SHGetPathFromIDList to retrieve the path of the
  92. // selection.
  93. //
  94. virtual void OnSelChanged(const LPITEMIDLIST pidl) const;
  95. //
  96. // Call EnableOK to enable the OK button on the active dialog.  If bEnable is true then the
  97. // button is enabled, otherwise it is disabled.
  98. // NOTE -- This function should only be called within overrides of OnInit and OnSelChanged.
  99. //
  100. void EnableOK(const bool bEnable) const;
  101. //
  102. // Call SetSelection to set the selection in the active dialog.  pidl is the LPITEMIDLIST
  103. // of the path to be selected.  strPath is a CString containing the path to be selected.
  104. // NOTE -- This function should only be called within overrides of OnInit and OnSelChanged.
  105. //
  106. void SetSelection(const LPITEMIDLIST pidl) const;
  107. void SetSelection(const CString& strPath) const;
  108. //
  109. // Call SetStatusText to set the text in the Status area in the active dialog.  strText is
  110. // the text to be displayed.
  111. // NOTE -- This function should only be called within overrides of OnInit and OnSelChanged.
  112. //
  113. void SetStatusText(const CString& strText) const;
  114. private:
  115. static int __stdcall BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData);
  116. typedef std::auto_ptr<char> AUTO_STR;
  117. AUTO_STR m_pchTitle;
  118. BROWSEINFO m_bi;
  119. char m_szSelected[MAX_PATH];
  120. CString m_strPath;
  121. HWND m_hwnd;
  122. };
  123. inline UINT CBrowseForFolder::GetFlags() const
  124. {
  125. return m_bi.ulFlags;
  126. }
  127. inline int CBrowseForFolder::GetImage() const
  128. {
  129. return m_bi.iImage;
  130. }
  131. #endif // __SHELLBROWSER_H__