XTBrowseDialog.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:19k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTBrowseDialog.h: interface for the CXTBrowseDialog class.
  2. //
  3. // This file is a part of the XTREME CONTROLS MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTBROWSEDIALOG_H__)
  22. #define __XTBROWSEDIALOG_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. // ----------------------------------------------------------------------
  28. // Summary:
  29. //     CXTBrowseDialog is derived from the BROWSEINFO structure.
  30. //     It is used to display a directory chooser dialog using shell
  31. //     extensions.
  32. // Remarks:
  33. //     The CXTBrowseDialog class allows you to configure
  34. //     various options, including setting the dialog's title or assigning
  35. //     a callback function for defining the folder display and file
  36. //     filtering styles.
  37. // ----------------------------------------------------------------------
  38. class _XTP_EXT_CLASS CXTBrowseDialog : protected BROWSEINFO
  39. {
  40. public:
  41. // ----------------------------------------------------------------------
  42. // Summary:
  43. //     Constructs a CXTBrowseDialog object
  44. // Parameters:
  45. //     pParent -  [in] Points to a CWnd object that represents the parent
  46. //                window for the browse dialog.
  47. // ----------------------------------------------------------------------
  48. CXTBrowseDialog(CWnd* pParent = NULL);
  49. // -----------------------------------------------------------------
  50. // Summary:
  51. //     Destroys a CXTBrowseDialog object, handles cleanup and
  52. //     deallocation
  53. // -----------------------------------------------------------------
  54. virtual ~CXTBrowseDialog();
  55. public:
  56. // --------------------------------------------------------------------
  57. // Summary:
  58. //     Call this member function to invoke the browse dialog box and to
  59. //     return the dialog box result when done.
  60. // Returns:
  61. //     IDOK if the OK button was pressed, otherwise returns IDCANCEL.
  62. // --------------------------------------------------------------------
  63. INT_PTR DoModal();
  64. // -------------------------------------------------------------------------
  65. // Summary:
  66. //     Call this member function to set the owner window for the dialog box.
  67. // Parameters:
  68. //     hWnd -  [in] Handle to the owner window for the dialog box.
  69. // -------------------------------------------------------------------------
  70. void SetOwner(HWND hWnd);
  71. // ----------------------------------------------------------------
  72. // Summary:
  73. //     Call this member function to get an HWND handle to the owner
  74. //     window for the dialog box.
  75. // Returns:
  76. //     An HWND handle.
  77. // ----------------------------------------------------------------
  78. HWND GetOwner();
  79. // ----------------------------------------------------------------------------
  80. // Summary:
  81. //     Call this member function to set the address of an ITEMIDLIST
  82. //     structure which specifies the location of the root folder to
  83. //     browse from.
  84. // Parameters:
  85. //     pidl -  [in] Address of an ITEMIDLIST structure specifying the location
  86. //             of the root folder to browse from. Only the specified folder and
  87. //             its subfolders appear in the dialog box. This member can be
  88. //             NULL, in which case, the namespace root (the desktop folder) is
  89. //             used.
  90. // ----------------------------------------------------------------------------
  91. void SetPidlRoot(LPCITEMIDLIST pidl);
  92. //-----------------------------------------------------------------------
  93. // Summary:
  94. //     Call this member function to return the address of the ITEMIDLIST
  95. //     structure that was specified for the location of the root folder.
  96. // Returns:
  97. //     The address of the ITEMIDLIST structure that was specified for the
  98. //     location of the root folder.
  99. //-----------------------------------------------------------------------
  100. LPCITEMIDLIST GetPidlRoot();
  101. // --------------------------------------------------------------------------------
  102. // Summary:
  103. //     Call this member function to set the address for the display name
  104. //     the dialog box will use.
  105. // Parameters:
  106. //     szDisplayName -  [in] Address of a buffer to receive the display name of the
  107. //                      folder selected by the user. The size of this buffer is
  108. //                      assumed to be MAX_PATH bytes.
  109. // --------------------------------------------------------------------------------
  110. void SetDisplayName(LPCTSTR szDisplayName);
  111. //-----------------------------------------------------------------------
  112. // Summary:
  113. //     Call this member function to return the display name that is used
  114. //     by the browse dialog box.
  115. // Returns:
  116. //     The display name that is used by the browse dialog box.
  117. //-----------------------------------------------------------------------
  118. LPCTSTR GetDisplayName();
  119. // --------------------------------------------------------------------------------
  120. // Summary:
  121. //     Call this member function to set the title for the browse dialog
  122. //     box.
  123. // Parameters:
  124. //     szTitle -  [in] Address of a null-terminated string that is displayed above
  125. //                the tree view control in the dialog box. This string can be
  126. //                used to specify instructions to the user.
  127. // --------------------------------------------------------------------------------
  128. void SetTitle(LPCTSTR szTitle);
  129. // ---------------------------------------------------------------------
  130. // Summary:
  131. //     Call this member function to return a NULL terminated string that
  132. //     represents the title that was set for the dialog box.
  133. // Returns:
  134. //     A NULL terminated string that represents the title that was set
  135. //     for the dialog box.
  136. // ---------------------------------------------------------------------
  137. LPCTSTR GetTitle();
  138. // ---------------------------------------------------------------------------
  139. // Summary:
  140. //     Call this member function to set the flags for specifying the
  141. //     options for the browse dialog box.
  142. // Parameters:
  143. //     uf -  [in] Flags specifying the options for the dialog box. See the
  144. //           Remarks section below for a list of available styles.
  145. // Remarks:
  146. //     Styles to be added or removed can be combined by using the bitwise
  147. //     OR (|) operator. It can be one or more of the following:
  148. //     * <b>BIF_BROWSEFORCOMPUTER</b> Only return computers. If the user
  149. //          selects anything other than a computer, the OK button is grayed.
  150. //     * <b>BIF_BROWSEFORPRINTER</b> Only allow the selection of printers.
  151. //          If the user selects anything other than a printer, the OK button
  152. //          is grayed. In Microsoft Windows XP, the best practice is to
  153. //          use an XP-style dialog, setting the root of the dialog to the
  154. //          Printers and Faxes folder (CSIDL_PRINTERS).
  155. //     * <b>BIF_BROWSEINCLUDEFILES</b> Version 4.71. The browse dialog
  156. //          box will display files as well as folders.
  157. //     * <b>BIF_BROWSEINCLUDEURLS</b> Version 5.0. The browse dialog box
  158. //          can display URLs. The BIF_USENEWUI and BIF_BROWSEINCLUDEFILES
  159. //          flags must also be set. If these three flags are not set, the
  160. //          browser dialog box will reject URLs. Even when these flags
  161. //          are set, the browse dialog box will only display URLs if the
  162. //          folder that contains the selected item supports them. When
  163. //          the folder's IShellFolder::GetAttributesOf method is called
  164. //          to request the selected item's attributes, the folder must
  165. //          set the SFGAO_FOLDER attribute flag. Otherwise, the browse
  166. //          dialog box will not display the URL.
  167. //     * <b>BIF_DONTGOBELOWDOMAIN</b> Do not include network folders below
  168. //          the domain level in the dialog box's tree view control.
  169. //     * <b>BIF_EDITBOX</b> Version 4.71. Include an edit control in the
  170. //          browse dialog box that allows the user to type the name of an item.
  171. //     * <b>BIF_NEWDIALOGSTYLE</b> Version 5.0. Use the new user interface.
  172. //          Setting this flag provides the user with a larger dialog box
  173. //          that can be resized. The dialog box has several new capabilities
  174. //          including: drag-and-drop capability within the dialog box,
  175. //          reordering, shortcut menus, new folders, delete, and other
  176. //          shortcut menu commands. To use this flag, you must call OleInitialize
  177. //          or CoInitialize before calling SHBrowseForFolder.
  178. //     * <b>BIF_NONEWFOLDERBUTTON</b> Version 6.0. Do not include the New
  179. //          Folder button in the browse dialog box.
  180. //     * <b>BIF_NOTRANSLATETARGETS</b> Version 6.0. When the selected item
  181. //          is a shortcut, return the PIDL of the shortcut itself rather
  182. //          than its target.
  183. //     * <b>BIF_RETURNFSANCESTORS</b> Only return file system ancestors.
  184. //          An ancestor is a subfolder that is beneath the root folder
  185. //          in the namespace hierarchy. If the user selects an ancestor
  186. //          of the root folder that is not part of the file system, the
  187. //          OK button is grayed.
  188. //     * <b>BIF_RETURNONLYFSDIRS</b> Only return file system directories.
  189. //          If the user selects folders that are not part of the file system,
  190. //          the OK button is grayed.
  191. //     * <b>BIF_SHAREABLE</b> Version 5.0. The browse dialog box can display
  192. //          shareable resources on remote systems. It is intended for applications
  193. //          that want to expose remote shares on a local system. The BIF_NEWDIALOGSTYLE
  194. //          flag must also be set.
  195. //     * <b>BIF_STATUSTEXT</b> Include a status area in the dialog box.
  196. //          The callback function can set the status text by sending messages
  197. //          to the dialog box. This flag is not supported when BIF_NEWDIALOGSTYLE
  198. //          is specified.
  199. //     * <b>BIF_UAHINT</b> Version 6.0. When combined with BIF_NEWDIALOGSTYLE,
  200. //          adds a usage hint to the dialog box in place of the edit box.
  201. //          BIF_EDITBOX overrides this flag.
  202. //     * <b>BIF_USENEWUI</b> Version 5.0. Use the new user interface, including
  203. //          an edit box. This flag is equivalent to BIF_EDITBOX | BIF_NEWDIALOGSTYLE.
  204. //          To use BIF_USENEWUI, you must call OleInitialize or CoInitialize
  205. //          before calling SHBrowseForFolder.
  206. //     * <b>BIF_VALIDATE</b> Version 4.71. If the user types an invalid
  207. //          name into the edit box, the browse dialog box will call the
  208. //          application's BrowseCallbackProc with the BFFM_VALIDATEFAILED
  209. //          message. This flag is ignored if BIF_EDITBOX is not specified.
  210. // ---------------------------------------------------------------------------
  211. void SetOptions(UINT uf);
  212. //-----------------------------------------------------------------------
  213. // Summary:
  214. //     Call this member function to return the flags specifying the options
  215. //     that have been set for the dialog box.
  216. // Returns:
  217. //     The flags specifying the options that have been set for the dialog box.
  218. //-----------------------------------------------------------------------
  219. UINT GetOptions();
  220. // --------------------------------------------------------------------------
  221. // Summary:
  222. //     Call this member function to define the address for the
  223. //     BrowseCallbackProc function that is to be called when an event
  224. //     occurs.
  225. // Parameters:
  226. //     pf -  [in] Address of an application-defined function that the dialog
  227. //           box calls when an event occurs. For more information, see the
  228. //           BrowseCallbackProc function. This member can be NULL.
  229. // --------------------------------------------------------------------------
  230. void SetCallback(BFFCALLBACK pf);
  231. //-----------------------------------------------------------------------
  232. // Summary:
  233. //     Call this member function to return the address for the BrowseCallbackProc
  234. //     function that is called when an event occurs.
  235. // Returns:
  236. //     The address for the BrowseCallbackProc function that is called
  237. //     when an event occurs.
  238. //-----------------------------------------------------------------------
  239. BFFCALLBACK GetCallback();
  240. // -----------------------------------------------------------------------
  241. // Summary:
  242. //     Call this member function to set the application data that is
  243. //     passed to the callback function.
  244. // Parameters:
  245. //     lp -  [in] Application-defined value that the dialog box passes to
  246. //           the callback function, if one is specified.
  247. // -----------------------------------------------------------------------
  248. void SetData(LPARAM lp);
  249. // ----------------------------------------------------------------------------
  250. // Summary:
  251. //     Returns application data that was set to be passed to the
  252. //     callback function.
  253. // Returns:
  254. //     The application data that was set to be passed to the callback function,
  255. //     if one is specified.
  256. // ----------------------------------------------------------------------------
  257. LPARAM GetData();
  258. // ---------------------------------------------------------------------------------
  259. // Summary:
  260. //     Call this member function to set the initial path to select when
  261. //     the browse dialog is first opened.
  262. // Parameters:
  263. //     szSelPath -  [in] A NULL terminated string that represents the directory that
  264. //                  is selected when the dialog is initially opened. If not set,
  265. //                  GetCurrentDirectory is called to set the directory.
  266. // ---------------------------------------------------------------------------------
  267. void SetSelPath(LPCTSTR szSelPath);
  268. // --------------------------------------------------------------------
  269. // Summary:
  270. //     Call this member function to get a NULL terminated string that
  271. //     represents the currently selected directory.
  272. // Returns:
  273. //     A NULL terminated string that represents the selected directory.
  274. // --------------------------------------------------------------------
  275. LPCTSTR GetSelPath();
  276. // ------------------------------------------------------------------
  277. // Summary:
  278. //     Call this member function to get the index to the system image
  279. //     list of the image associated with the selected folder.
  280. // Returns:
  281. //     The index to the system image list.
  282. // ------------------------------------------------------------------
  283. int GetImage();
  284. //-----------------------------------------------------------------------
  285. // Summary:
  286. //     Application defined callback.
  287. // Parameters:
  288. //     hwnd   - A handle to a window.
  289. //     uMsg   - The message that is sent to the window.
  290. //     lParam - Specifies the application-defined data passed by the
  291. //              BrowseCtrlCallback function.
  292. //     lpData - Data that is passed into the function.
  293. // Remarks:
  294. //     Application defined callback function used with the SHBrowseForFolder
  295. //     function. The browse dialog box calls this function to notify
  296. //     it about events. You can define your own callback function by
  297. //     using the SetCallback method.
  298. // Returns:
  299. //     An integer value.
  300. //-----------------------------------------------------------------------
  301. static int CALLBACK BrowseCtrlCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData);
  302. protected:
  303. //-----------------------------------------------------------------------
  304. // Summary:
  305. //     NULL terminated string that represents the selected directory
  306. //-----------------------------------------------------------------------
  307. TCHAR m_szSelPath[MAX_PATH];
  308. private:
  309. CString m_strTitle; // default dialog title.
  310. };
  311. /////////////////////////////////////////////////////////////////////////////
  312. AFX_INLINE void CXTBrowseDialog::SetOwner(HWND hWnd) {
  313. hwndOwner = hWnd;
  314. }
  315. AFX_INLINE HWND CXTBrowseDialog::GetOwner() {
  316. return hwndOwner;
  317. }
  318. AFX_INLINE void CXTBrowseDialog::SetPidlRoot(LPCITEMIDLIST pidl) {
  319. pidlRoot = pidl;
  320. }
  321. AFX_INLINE LPCITEMIDLIST CXTBrowseDialog::GetPidlRoot() {
  322. return pidlRoot;
  323. }
  324. AFX_INLINE void CXTBrowseDialog::SetDisplayName(LPCTSTR szDisplayName) {
  325. pszDisplayName = (LPTSTR)szDisplayName;
  326. }
  327. AFX_INLINE LPCTSTR CXTBrowseDialog::GetDisplayName() {
  328. return pszDisplayName;
  329. }
  330. AFX_INLINE void CXTBrowseDialog::SetTitle(LPCTSTR szTitle) {
  331. lpszTitle = szTitle;
  332. }
  333. AFX_INLINE LPCTSTR CXTBrowseDialog::GetTitle() {
  334. return lpszTitle;
  335. }
  336. AFX_INLINE void CXTBrowseDialog::SetOptions(UINT uf) {
  337. ulFlags = uf;
  338. }
  339. AFX_INLINE UINT CXTBrowseDialog::GetOptions() {
  340. return ulFlags;
  341. }
  342. AFX_INLINE void CXTBrowseDialog::SetCallback(BFFCALLBACK pf) {
  343. lpfn = pf;
  344. }
  345. AFX_INLINE BFFCALLBACK CXTBrowseDialog::GetCallback() {
  346. return lpfn;
  347. }
  348. AFX_INLINE void CXTBrowseDialog::SetData(LPARAM lp) {
  349. lParam = lp;
  350. }
  351. AFX_INLINE LPARAM CXTBrowseDialog::GetData() {
  352. return lParam;
  353. }
  354. AFX_INLINE LPCTSTR CXTBrowseDialog::GetSelPath() {
  355. return m_szSelPath;
  356. }
  357. AFX_INLINE int CXTBrowseDialog::GetImage() {
  358. return iImage;
  359. }
  360. //{{AFX_CODEJOCK_PRIVATE
  361. #ifndef BIF_BROWSEINCLUDEURLS
  362. #define BIF_BROWSEINCLUDEURLS  0x0080   // Allow URLs to be displayed or entered. (Requires BIF_USENEWUI)
  363. #endif
  364. #ifndef BIF_NEWDIALOGSTYLE
  365. #define BIF_NEWDIALOGSTYLE     0x0040   // Use the new dialog layout with the ability to resize
  366. #endif
  367. #ifndef BIF_NONEWFOLDERBUTTON
  368. #define BIF_NONEWFOLDERBUTTON  0x0200   // Do not add the "New Folder" button to the dialog.  Only applicable with BIF_NEWDIALOGSTYLE.
  369. #endif
  370. #ifndef BIF_NOTRANSLATETARGETS
  371. #define BIF_NOTRANSLATETARGETS 0x0400   // don't traverse target as shortcut
  372. #endif
  373. #ifndef BIF_SHAREABLE
  374. #define BIF_SHAREABLE          0x8000  // sharable resources displayed (remote shares, requires BIF_USENEWUI)
  375. #endif
  376. #ifndef BIF_UAHINT
  377. #define BIF_UAHINT             0x0100   // Add a UA hint to the dialog, in place of the edit box. May not be combined with BIF_EDITBOX
  378. #endif
  379. #ifndef BIF_USENEWUI
  380. #define BIF_USENEWUI           (BIF_NEWDIALOGSTYLE | BIF_EDITBOX)
  381. #endif
  382. //}}AFX_CODEJOCK_PRIVATE
  383. #endif // !defined(__XTBROWSEDIALOG_H__)