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

对话框与窗口

开发平台:

Visual C++

  1. // XTBrowseEdit.h : interface for the CXTBrowseEdit 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(__XTBROWSEEDIT_H__)
  22. #define __XTBROWSEEDIT_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. class CXTBrowseEdit;
  28. #define XT_IDC_LBOX_EDIT                101
  29. // --------------------------------------------------------------------
  30. // Summary:
  31. //     CXTBrowseButton is a CXTButton derived class that is used
  32. //     by CXTBrowseEdit to create the browse button that is used to
  33. //     display file dialogs and popup menus.
  34. // --------------------------------------------------------------------
  35. class _XTP_EXT_CLASS CXTBrowseButton : public CXTButton
  36. {
  37. DECLARE_DYNAMIC(CXTBrowseButton)
  38. public:
  39. // ----------------------------------------------
  40. // Summary:
  41. //     Constructs a CXTBrowseButton object
  42. // ----------------------------------------------
  43. CXTBrowseButton();
  44. // -----------------------------------------------------------------
  45. // Summary:
  46. //     Destroys a CXTBrowseButton object, handles cleanup and
  47. //     deallocation
  48. // -----------------------------------------------------------------
  49. virtual ~CXTBrowseButton();
  50. public:
  51. // ----------------------------------------------------------------------
  52. // Summary:
  53. //     This member function is called to create the browse button used by
  54. //     the edit control.
  55. // Parameters:
  56. //     pEditWnd -      [in] Parent edit control.
  57. //     dwBStyle -      [in] Search type
  58. //     nID -           [in] Resource id for push button
  59. //     nMenu -         [in] Popup menu id
  60. //     nSubMenuIndx -  [in] Index of popup submenu.
  61. // Returns:
  62. //     TRUE if successful, otherwise FALSE.
  63. // ----------------------------------------------------------------------
  64. virtual BOOL Create(CXTBrowseEdit* pEditWnd, DWORD dwBStyle, UINT nID, UINT nMenu = (UINT)-1, UINT nSubMenuIndx = (UINT)-1);
  65. // ----------------------------------------------------------------------------
  66. // Summary:
  67. //     This member function will set the browse style for the button.
  68. // Parameters:
  69. //     dwxStyle -  Specifies the browse style. The button style can be defined
  70. //                 as one or more of the styles listed in the Remarks section.
  71. // Remarks:
  72. //     The CXTBrowseButton can be set to use one or more of the following
  73. //     styles:
  74. //     * <b>BES_XT_CHOOSEDIR</b> Display the choose folder dialog.
  75. //     * <b>BES_XT_CHOOSEFILE</b> Display the choose file dialog.
  76. //     * <b>BES_XT_POPUPMENU</b> Display a user defined context menu.
  77. // See Also:
  78. //     SetXButtonStyle
  79. // ----------------------------------------------------------------------------
  80. void SetBrowseStyle(DWORD dwxStyle);
  81. protected:
  82. //{{AFX_CODEJOCK_PRIVATE
  83. DECLARE_MESSAGE_MAP()
  84. //{{AFX_VIRTUAL(CXTItemEdit)
  85. virtual BOOL PreTranslateMessage(MSG* pMsg);
  86. virtual void OnClicked();
  87. //}}AFX_VIRTUAL
  88. //{{AFX_MSG(CXTBrowseButton)
  89. afx_msg void OnEnable(BOOL bEnable);
  90. afx_msg void OnBtnClicked();
  91. //}}AFX_MSG
  92. //}}AFX_CODEJOCK_PRIVATE
  93. private:
  94. BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  95. BOOL Create(LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
  96. protected:
  97. DWORD           m_dwBStyle;     // Search type
  98. UINT            m_nID;          // Resource id for push button
  99. UINT            m_nMenu;        // Popup menu id
  100. UINT            m_nSubMenuIndx; // Index of popup submenu.
  101. CXTBrowseEdit*  m_pEditWnd;     // Parent edit control.
  102. CXTIconHandle   m_hPopupIcon;   // Popup menu icon.
  103. friend class CXTBrowseEdit;
  104. };
  105. // --------------------------------------------------------------------
  106. // Summary:
  107. //     CXTBrowseEdit is a CXTEdit derived class. This class also
  108. //     has a push button associated with it. The control can be used to
  109. //     search for directories and files or activate a popup menu.
  110. // --------------------------------------------------------------------
  111. class _XTP_EXT_CLASS CXTBrowseEdit : public CXTEdit
  112. {
  113. DECLARE_DYNAMIC(CXTBrowseEdit)
  114. public:
  115. // --------------------------------------------
  116. // Summary:
  117. //     Constructs a CXTBrowseEdit object
  118. // --------------------------------------------
  119. CXTBrowseEdit();
  120. // ---------------------------------------------------------------
  121. // Summary:
  122. //     Destroys a CXTBrowseEdit object, handles cleanup and
  123. //     deallocation
  124. // ---------------------------------------------------------------
  125. virtual ~CXTBrowseEdit();
  126. public:
  127. // -----------------------------------------------------------------------
  128. // Summary:
  129. //     Call this member function to determine if the browse edit control
  130. //     is in the middle of a browse operation.
  131. // Returns:
  132. //     true if the control is displaying a File Open dialog or popup menu.
  133. // -----------------------------------------------------------------------
  134. bool IsBrowsing();
  135. // -------------------------------------------------------------------------------
  136. // Summary:
  137. //     Call this member function to set the gap between the browse button
  138. //     and the edit window.
  139. // Parameters:
  140. //     nGap -  [in] Gap, in pixels, between the browse button and the edit window.
  141. // -------------------------------------------------------------------------------
  142. void SetGap(int nGap);
  143. // ------------------------------------------------------------------------------
  144. // Summary:
  145. //     This member function will set a CFileDialog derived class object to
  146. //     be the file open dialog.
  147. // Parameters:
  148. //     pFileDialog -  [in] Points to the CFileDialog object that will replace the
  149. //                    standard File Open dialog.
  150. // ------------------------------------------------------------------------------
  151. virtual void SetFileDialog(CFileDialog* pFileDialog);
  152. // -------------------------------------------------------------------------------
  153. // Summary:
  154. //     This member function will set the File Open dialog style.
  155. // Parameters:
  156. //     bOpenFileDialog -  [in] Set to TRUE to construct a File Open dialog box, or
  157. //                        FALSE to construct a File Save as dialog box.
  158. // -------------------------------------------------------------------------------
  159. virtual void SetDlgOpenFile(BOOL bOpenFileDialog = TRUE);
  160. // -----------------------------------------------------------------------------
  161. // Summary:
  162. //     This member function sets the default extension for the File Open
  163. //     dialog.
  164. // Parameters:
  165. //     lpszDefExt -  [in] Points to a NULL terminated string that represents the
  166. //                  default file extension to be used with the File Open dialog.
  167. // -----------------------------------------------------------------------------
  168. void SetDlgDefExt(LPCTSTR lpszDefExt = NULL);
  169. // ------------------------------------------------------------------------------
  170. // Summary:
  171. //     This member function sets the default file name for the File Open
  172. //     dialog.
  173. // Parameters:
  174. //     lpszFileName -  [in] Points to a NULL terminated string that represents the
  175. //                    default file name to be used with the File Open dialog.
  176. // ------------------------------------------------------------------------------
  177. void SetDlgFileName(LPCTSTR lpszFileName = NULL);
  178. // ---------------------------------------------------------------------
  179. // Summary:
  180. //     This member function sets the style flags for the File Open
  181. //     dialog.
  182. // Parameters:
  183. //     dwFlags -  [in] The desired OFN_ styles for the File Open dialog.
  184. // ---------------------------------------------------------------------
  185. virtual void SetDlgStyle(DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT);
  186. // ----------------------------------------------------------------------------
  187. // Summary:
  188. //     This member function sets the file filter for the File Open
  189. //     dialog.
  190. // Parameters:
  191. //     lpszFilter -  [in] Points to a NULL terminated string that represents the
  192. //                  file filter used by the File Open dialog.
  193. // ----------------------------------------------------------------------------
  194. void SetDlgFilter(LPCTSTR lpszFilter = NULL);
  195. // --------------------------------------------------------------------------
  196. // Summary:
  197. //     This member function sets the title for the directory dialog.
  198. // Parameters:
  199. //     lpszTitle -  [in] Points to a NULL terminated string the represents the
  200. //                  title of the "browse for directory" dialog.
  201. // --------------------------------------------------------------------------
  202. void SetDlgTitle(LPCTSTR lpszTitle = NULL);
  203. // --------------------------------------------------------------------------
  204. // Summary:
  205. //     This member function sets the initial directory for the directory dialog.
  206. // Parameters:
  207. //     lpszInitialDir -  [in] Points to a NULL terminated string the represents the
  208. //                  initial directory of the dialog.
  209. // --------------------------------------------------------------------------
  210. void SetDlgInitialDir(LPCTSTR lpszInitialDir);
  211. // -----------------------------------------------------------------------------
  212. // Summary:
  213. //     This member function is called to initialize the browse edit
  214. //     control.
  215. // Parameters:
  216. //     pParentWnd -    [in] Pointer to the parent of the edit control.
  217. //     dwBStyle -      [in] A <i>DWORD</i> value that represents the type of
  218. //                     search to perform. It can be any one of the styles listed
  219. //                     in the remarks section.
  220. //     nMenu -         [in] If <i>dwBStyle</i> contains the BES_XT_POPUPMENU flag,
  221. //                     then <i>nMenu</i> represents the resource ID of a popup
  222. //                     menu. Otherwise this value is ignored.
  223. //     nSubMenuIndx -  [in] Index of submenu to display.
  224. // Remarks:
  225. //     The Initialize function must be called once for each browse edit
  226. //     control to complete initialization. This should be done after you
  227. //     have subclassed or created the browse edit control.<p/>
  228. //
  229. //     The browse edit control can be defined to use any of the following
  230. //     styles:
  231. //     * <b>BES_XT_CHOOSEDIR</b> Display the choose folder dialog.
  232. //     * <b>BES_XT_CHOOSEFILE</b> Display the choose file dialog.
  233. //     * <b>BES_XT_POPUPMENU</b> Display a user defined context menu.
  234. //
  235. //     The single argument version of Initialize will call the CXTEdit
  236. //     base class to initialize the edit portion of the control only,
  237. //     generally you would not want to use this override for standard
  238. //     initialization.
  239. // Example:
  240. //     The following example demonstrates the use of Initialize.
  241. // <code>
  242. // BOOL CBrowseEditDlg::OnInitDialog()
  243. // {
  244. //     CXTResizeDialog::OnInitDialog();
  245. //     ...
  246. //     // Initialize browse edit controls.
  247. //     m_edit1.Initialize(this, BES_XT_POPUPMENU, IDR_POPUP);
  248. //     m_edit2.Initialize(this, BES_XT_CHOOSEDIR);
  249. //     m_edit3.Initialize(this, BES_XT_CHOOSEFILE);
  250. //
  251. //     return TRUE;  // return TRUE  unless you set the focus to a control
  252. // }
  253. // </code>
  254. // Returns:
  255. //     TRUE if initialization was successful, otherwise FALSE.
  256. // -----------------------------------------------------------------------------
  257. virtual bool Initialize(CWnd* pParentWnd, DWORD dwBStyle, UINT nMenu = 0, int nSubMenuIndx = 0);
  258. virtual bool Initialize(CWnd* pParentWnd); //<COMBINE CXTBrowseEdit::Initialize@CWnd*@DWORD@UINT@int>
  259. // ----------------------------------------------------------------------
  260. // Summary:
  261. //     This member function is called whenever the browse button is
  262. //     pressed, and can be overridden to perform custom browse functions.
  263. // ----------------------------------------------------------------------
  264. virtual void OnBrowse();
  265. //-------------------------------------------------------------------------
  266. // Summary:
  267. //     This member function is called by the browse edit control to
  268. //     display a directory chooser dialog.
  269. //-------------------------------------------------------------------------
  270. virtual void ChooseDirectory();
  271. //-------------------------------------------------------------------------
  272. // Summary:
  273. //     This member function is called by the browse edit control to
  274. //     display a File Open dialog.
  275. //-------------------------------------------------------------------------
  276. virtual void ChooseFile();
  277. // ---------------------------------------------------------------------
  278. // Summary:
  279. //     This member function is called by the browse edit control to
  280. //     create and track a pop-up menu. The menu selection is then copied
  281. //     to the edit control.
  282. // ---------------------------------------------------------------------
  283. virtual void PopupMenu();
  284. // -------------------------------------------------------------------------
  285. // Summary:
  286. //     This member function is called by the browse edit control to position
  287. //     the browse button in relation to the edit control.
  288. // -------------------------------------------------------------------------
  289. virtual void PositionBrowseButton();
  290. protected:
  291. //{{AFX_CODEJOCK_PRIVATE
  292. //{{AFX_MSG(CXTBrowseEdit)
  293. afx_msg void OnEnable(BOOL bEnable);
  294. afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
  295. afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos);
  296. //}}AFX_MSG
  297. DECLARE_MESSAGE_MAP()
  298. //}}AFX_CODEJOCK_PRIVATE
  299. protected:
  300. int              m_nGap;            // Distance between the button and edit control.
  301. bool             m_bBrowsing;       // true if in browse operation.
  302. BOOL             m_bOpenFileDialog; // TRUE for Open File dialog, FALSE for Save as. See SetDlgOpenFile.
  303. UINT             m_nMenu;           // Popup menu ID.
  304. UINT             m_nSubMenuIndx;    // Index of a popup submenu.
  305. DWORD            m_dwFlags;         // File dialog styles.
  306. DWORD            m_dwBStyle;        // Search type.
  307. CString          m_strDefExt;       // Default file extension.
  308. CString          m_strFileName;     // Default file name.
  309. CString          m_strFilter;       // Default file filter.
  310. CString          m_strInitialDir;
  311. CString          m_strTitle;        // Directory dialog title.
  312. CFileDialog*     m_pFileDialog;     // Points to a valid CFileDialog object.
  313. CXTBrowseButton  m_btnBrowse;       // Pointer to a push button.
  314. };
  315. //////////////////////////////////////////////////////////////////////
  316. AFX_INLINE bool CXTBrowseEdit::Initialize(CWnd* pParentWnd) {
  317. return CXTEdit::Initialize(pParentWnd);
  318. }
  319. AFX_INLINE void CXTBrowseEdit::SetGap(int nGap) {
  320. ASSERT(nGap >= 0); m_nGap = nGap;
  321. }
  322. AFX_INLINE void CXTBrowseEdit::SetFileDialog(CFileDialog* pFileDialog/*=NULL*/) {
  323. m_pFileDialog = pFileDialog;
  324. }
  325. AFX_INLINE void CXTBrowseEdit::SetDlgOpenFile(BOOL bOpenFileDialog/*=TRUE*/) {
  326. m_bOpenFileDialog = bOpenFileDialog;
  327. }
  328. AFX_INLINE void CXTBrowseEdit::SetDlgDefExt(LPCTSTR strDefExt/*=NULL*/) {
  329. m_strDefExt = strDefExt;
  330. }
  331. AFX_INLINE void CXTBrowseEdit::SetDlgFileName(LPCTSTR strFileName/*=NULL*/) {
  332. m_strFileName = strFileName;
  333. }
  334. AFX_INLINE void CXTBrowseEdit::SetDlgStyle(DWORD dwFlags/*=OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT*/) {
  335. m_dwFlags = dwFlags;
  336. }
  337. AFX_INLINE void CXTBrowseEdit::SetDlgFilter(LPCTSTR strFilter/*=NULL*/) {
  338. m_strFilter = strFilter;
  339. }
  340. AFX_INLINE void CXTBrowseEdit::SetDlgTitle(LPCTSTR strTitle/*=NULL*/) {
  341. m_strTitle = strTitle;
  342. }
  343. AFX_INLINE bool CXTBrowseEdit::IsBrowsing() {
  344. return m_bBrowsing;
  345. }
  346. AFX_INLINE void CXTBrowseEdit::SetDlgInitialDir(LPCTSTR lpszInitialDir) {
  347. m_strInitialDir = lpszInitialDir;
  348. }
  349. const DWORD BES_XT_CHOOSEDIR       = 0x0001;  //<ALIAS CXTBrowseEdit::Initialize@CWnd*@DWORD@UINT@int>
  350. const DWORD BES_XT_CHOOSEFILE      = 0x0002;  //<ALIAS CXTBrowseEdit::Initialize@CWnd*@DWORD@UINT@int>
  351. const DWORD BES_XT_POPUPMENU       = 0x0004;  //<ALIAS CXTBrowseEdit::Initialize@CWnd*@DWORD@UINT@int>
  352. // Note: this must match the LBS_XT_BROWSE define
  353. const DWORD BES_XT_BROWSE          = 0x0010; // Display a user defined dialog for browsing
  354. //===========================================================================
  355. // Summary:
  356. //     CXTItemEdit is a CXTBrowseEdit derived class.  It is used to create
  357. //     a CXTItemEdit window that can be used as an "in-place" edit field that
  358. //     can be dynamically created for controls such as a list box.
  359. //===========================================================================
  360. class _XTP_EXT_CLASS CXTItemEdit : public CXTBrowseEdit
  361. {
  362. DECLARE_DYNAMIC(CXTItemEdit)
  363. public:
  364. //-----------------------------------------------------------------------
  365. // Summary:
  366. //     Constructs a CXTItemEdit object that can be used as an "in-place" edit
  367. //     field and can be dynamically created for controls such as a list box
  368. // Parameters:
  369. //     pParent       - Points to the parent window.
  370. //     rect          - Size of the edit item.
  371. //     strWindowText - Text to be initially displayed in the edit field.
  372. //     dwBStyle      - Specifies the browse edit style for the in-place
  373. //                     edit field. See CXTBrowseEdit::SetBrowseStyle
  374. //                     for available styles.
  375. //     bAutoDelete   - Set to true if the object is to be self deleting.
  376. //-----------------------------------------------------------------------
  377. CXTItemEdit(CWnd* pParent, const CRect& rect, CString& strWindowText,
  378. DWORD dwBStyle = BES_XT_CHOOSEDIR, bool bAutoDelete = true);
  379. //-----------------------------------------------------------------------
  380. // Summary:
  381. //     Destroys a CXTItemEdit object, handles cleanup and deallocation
  382. //-----------------------------------------------------------------------
  383. virtual ~CXTItemEdit();
  384. public:
  385. //-----------------------------------------------------------------------
  386. // Summary:
  387. //     This member function is called whenever the control loses focus.
  388. //     This will destroy the window, and notify the parent via WM_COMMAND
  389. //     that the editing has been completed. The two possible commands are:
  390. //     ON_BEN_XT_LABELEDITEND and ON_BEN_XT_LABELEDITCANCEL
  391. //-----------------------------------------------------------------------
  392. virtual void EndLabelEdit();
  393. protected:
  394. //{{AFX_CODEJOCK_PRIVATE
  395. //{{AFX_VIRTUAL(CXTItemEdit)
  396. public:
  397. virtual BOOL PreTranslateMessage(MSG* pMsg);
  398. protected:
  399. virtual void PostNcDestroy();
  400. //}}AFX_VIRTUAL
  401. //{{AFX_MSG(CXTItemEdit)
  402. afx_msg void OnKillFocus(CWnd* pNewWnd);
  403. afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
  404. //}}AFX_MSG
  405. DECLARE_MESSAGE_MAP()
  406. //}}AFX_CODEJOCK_PRIVATE
  407. public:
  408. bool     m_bModified;     // true if the item was modified.
  409. bool     m_bAutoDelete;   // true if self deleting.
  410. bool     m_bEscapeKey;    // true if the edit window was closed with the escape key.
  411. CString& m_strWindowText; // The edit controls text.
  412. protected:
  413. bool m_bClosePosted;    // Used internally to determine if a WM_CLOSE message has been sent.
  414. };
  415. //////////////////////////////////////////////////////////////////////
  416. AFX_INLINE BOOL CXTBrowseButton::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
  417. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  418. }
  419. AFX_INLINE BOOL CXTBrowseButton::Create(LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID) {
  420. return CButton::Create(lpszCaption, dwStyle, rect, pParentWnd, nID);
  421. }
  422. #endif // #if !defined(__XTBROWSEEDIT_H__)