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

对话框与窗口

开发平台:

Visual C++

  1. // XTEditListBox.h interface for the CXTEditListBox 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(__XTEDITLISTBOX_H__)
  22. #define __XTEDITLISTBOX_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. //////////////////////////////////////////////////////////////////////
  28. // ---------------------------------------------------------------------
  29. // Summary:
  30. //     CXTEditListBoxToolBar is a CStatic derived class. It used by the
  31. //     CXTEditListBox class to create a toolbar above the edit list box
  32. //     to display icons for editing.
  33. // Remarks:
  34. //     CXTEditListBoxToolBar can be used for other classes by
  35. //     setting the notify window in Initialize. This window will receive
  36. //     notification messages whenever the new, delete, up, and down
  37. //     buttons are pressed. You can handle these messages by adding an
  38. //     ON_BN_CLICKED handler for each of the buttons XT_IDC_BTN_NEW,
  39. //     XT_IDC_BTN_DELETE, XT_IDC_BTN_UP and XT_IDC_BTN_DOWN.
  40. // ---------------------------------------------------------------------
  41. class _XTP_EXT_CLASS CXTEditListBoxToolBar : public CStatic
  42. {
  43. DECLARE_DYNAMIC(CXTEditListBoxToolBar)
  44. public:
  45. //-----------------------------------------------------------------------
  46. // Summary:
  47. //     Constructs a CXTEditListBoxToolBar object
  48. //-----------------------------------------------------------------------
  49. CXTEditListBoxToolBar();
  50. //-----------------------------------------------------------------------
  51. // Summary:
  52. //     Destroys a CXTEditListBoxToolBar object, handles cleanup and deallocation
  53. //-----------------------------------------------------------------------
  54. virtual ~CXTEditListBoxToolBar();
  55. public:
  56. // ------------------------------------------------------------------------
  57. // Summary:
  58. //     Initializes the CXTEditListBoxToolBar control.
  59. // Parameters:
  60. //     bAutoFont -  True to enable automatic font initialization.
  61. // Remarks:
  62. //     Call this member function to initialize the edit group control. This
  63. //     method should be called directly after creating or sub-classing the
  64. //     control.
  65. // ------------------------------------------------------------------------
  66. virtual void Initialize(bool bAutoFont = true);
  67. // ---------------------------------------------------------------------
  68. // Summary:
  69. //     This member function returns a reference to the new button of the
  70. //     edit group.
  71. // Returns:
  72. //     A reference to a CXTButton object.
  73. // ---------------------------------------------------------------------
  74. CXTButton& GetNewButton();
  75. // --------------------------------------------------------------------
  76. // Summary:
  77. //     This member function returns a reference to the delete button of
  78. //     the edit group.
  79. // Returns:
  80. //     A reference to a CXTButton object.
  81. // --------------------------------------------------------------------
  82. CXTButton& GetDeleteButton();
  83. // --------------------------------------------------------------------
  84. // Summary:
  85. //     This member function returns a reference to the up button of the
  86. //     edit group.
  87. // Returns:
  88. //     A reference to a CXTButton object.
  89. // --------------------------------------------------------------------
  90. CXTButton& GetUpButton();
  91. // ----------------------------------------------------------------------
  92. // Summary:
  93. //     This member function returns a reference to the down button of the
  94. //     edit group.
  95. // Returns:
  96. //     A reference to a CXTButton object.
  97. // ----------------------------------------------------------------------
  98. CXTButton& GetDownButton();
  99. //-----------------------------------------------------------------------
  100. // Summary:
  101. //     This member function will enable or disable editing.
  102. // Parameters:
  103. //     bEnable - True to enable editing.
  104. //-----------------------------------------------------------------------
  105. void EnableEdit(bool bEnable);
  106. // --------------------------------------------------------------------------
  107. // Summary:
  108. //     This member function will set the display style for the toolbar
  109. //     buttons.
  110. // Parameters:
  111. //     dwxStyle -  Specifies the button style as defined in the Remarks
  112. //                 section.
  113. //     bRedraw -   Specifies whether the button is to be redrawn. A nonzero
  114. //                 value redraws the button. A zero value does not redraw the
  115. //                 button. The button is redrawn by default.
  116. // Remarks:
  117. //     Styles to be added or removed can be combined by using the bitwise
  118. //     OR (|) operator. It can be one or more of the following:<p/>
  119. //     * <b>BS_XT_FLAT</b> Draws a flat button.
  120. //     * <b>BS_XT_SEMIFLAT</b> Draws a semi-flat button.
  121. //     * <b>BS_XT_TWOROWS</b> Draws images and text that are
  122. //           centered.
  123. //     * <b>BS_XT_SHOWFOCUS</b> Draws a focus rect when the button
  124. //           has input focus.
  125. //     * <b>BS_XT_HILITEPRESSED</b> Highlights the button when
  126. //           pressed.
  127. //     * <b>BS_XT_XPFLAT</b> Draws a flat button ala Office XP.
  128. //     * <b>BS_XT_WINXP_COMPAT</b> Enables Windows XP themes if
  129. //           available.
  130. // Returns:
  131. //     The previous style that was set.
  132. // --------------------------------------------------------------------------
  133. virtual void SetXButtonStyle(DWORD dwxStyle, BOOL bRedraw = TRUE);
  134. //{{AFX_CODEJOCK_PRIVATE
  135. //{{AFX_VIRTUAL(CXTEditListBoxToolBar)
  136. virtual BOOL PreTranslateMessage(MSG* pMsg);
  137. //}}AFX_VIRTUAL
  138. //}}AFX_CODEJOCK_PRIVATE
  139. //-----------------------------------------------------------------------
  140. // Summary:
  141. //     This member function is called by the CXTEditListBoxToolBar object to
  142. //     render text display for the control.
  143. // Parameters:
  144. //     pDC      - Pointer to a valid device context.
  145. //     rcClient - Area to draw text on.
  146. //-----------------------------------------------------------------------
  147. virtual void DrawText(CDC* pDC, CRect& rcClient);
  148. // ------------------------------------------------------------------
  149. // Summary:
  150. //     Recalculates the button layout within the CXTEditListBoxToolBar window.
  151. // Remarks:
  152. //     This member function is called by the CXTEditListBoxToolBar object to
  153. //     position the group bar buttons when the window is sized.
  154. // ------------------------------------------------------------------
  155. virtual void MoveButtons();
  156. // ---------------------------------------------------------------------
  157. // Summary:
  158. //     Sends notification to the owner window.
  159. // Parameters:
  160. //     nCmdID -  Command ID to send.
  161. // Remarks:
  162. //     This member function sends the command specified by <i>nCmdID</i>
  163. //     to the owner of the CXTEditListBoxToolBar object. The command is
  164. //     sent whenever a button is pressed on the group bar.
  165. // ---------------------------------------------------------------------
  166. virtual void SendCommand(UINT nCmdID);
  167. protected:
  168. //{{AFX_CODEJOCK_PRIVATE
  169. DECLARE_MESSAGE_MAP()
  170. //{{AFX_MSG(CXTEditListBoxToolBar)
  171. afx_msg void OnButtonNew();
  172. afx_msg void OnButtonDelete();
  173. afx_msg void OnButtonUp();
  174. afx_msg void OnButtonDown();
  175. afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos);
  176. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  177. afx_msg void OnPaint();
  178. afx_msg void OnNcPaint();
  179. afx_msg void OnEnable(BOOL bEnable);
  180. afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
  181. //}}AFX_MSG
  182. //}}AFX_CODEJOCK_PRIVATE
  183. protected:
  184. bool m_bShowUpDownButtons;     // Controls whether of not the up.down buttons are shown.
  185. bool m_bShowNewDeleteButtons;     // Controls whether of not the up.down buttons are shown.
  186. bool          m_bEnableEdit;   // True if editing is enabled.
  187. CRect         m_arClipRect[4]; // Array of toolbar button sizes.
  188. CXTButton     m_arButton[4];   // Array of toolbar buttons.
  189. CXTIconHandle m_arIcon[4];     // Array of toolbar button icons.
  190. CToolTipCtrl  m_tooltip;       // Tooltip control for edit buttons.
  191. friend class CXTEditListBox;
  192. };
  193. //////////////////////////////////////////////////////////////////////
  194. AFX_INLINE CXTButton& CXTEditListBoxToolBar::GetNewButton() {
  195. return m_arButton[0];
  196. }
  197. AFX_INLINE CXTButton& CXTEditListBoxToolBar::GetDeleteButton() {
  198. return m_arButton[1];
  199. }
  200. AFX_INLINE CXTButton& CXTEditListBoxToolBar::GetUpButton() {
  201. return m_arButton[2];
  202. }
  203. AFX_INLINE CXTButton& CXTEditListBoxToolBar::GetDownButton() {
  204. return m_arButton[3];
  205. }
  206. AFX_INLINE void CXTEditListBoxToolBar::EnableEdit(bool bEnable) {
  207. m_bEnableEdit = bEnable;
  208. }
  209. // forwards
  210. class CXTItemEdit;
  211. const DWORD LBS_XT_DEFAULT         = 0x0000;  //<ALIAS CXTEditListBox::SetListEditStyle@UINT@DWORD>
  212. const DWORD LBS_XT_CHOOSEDIR       = 0x0001;  //<ALIAS CXTEditListBox::SetListEditStyle@UINT@DWORD>
  213. const DWORD LBS_XT_CHOOSEFILE      = 0x0002;  //<ALIAS CXTEditListBox::SetListEditStyle@UINT@DWORD>
  214. const DWORD LBS_XT_NOTOOLBAR       = 0x0008;  //<ALIAS CXTEditListBox::SetListEditStyle@UINT@DWORD>
  215. const DWORD LBS_XT_BROWSE          = 0x0010; // Browse button
  216. const DWORD LBS_XT_HIDE_UP_DOWN    = 0x0020; // Hide Up/Down buttons
  217. const DWORD LBS_XT_ONLY_UP_DOWN    = 0x0040; // Only Up/Down buttons
  218. const DWORD LBS_XT_BROWSE_ONLY     = 0x0080; // Browse button
  219. //===========================================================================
  220. // Summary:
  221. //     CXTEditListBox is a CXTListBox derived class. It is used to create an
  222. //     editable list box. This list box can be configured to display a toolbar
  223. //     for editing. You can define browse styles to search for files or folders.
  224. //     Each entry is made editable with a double mouse click.
  225. //===========================================================================
  226. class _XTP_EXT_CLASS CXTEditListBox : public CXTListBox
  227. {
  228. DECLARE_DYNAMIC(CXTEditListBox)
  229. public:
  230. //-----------------------------------------------------------------------
  231. // Summary:
  232. //     Constructs a CXTEditListBox object
  233. //-----------------------------------------------------------------------
  234. CXTEditListBox();
  235. //-----------------------------------------------------------------------
  236. // Summary:
  237. //     Destroys a CXTEditListBox object, handles cleanup and deallocation
  238. //-----------------------------------------------------------------------
  239. virtual ~CXTEditListBox();
  240. public:
  241. // -----------------------------------------------------------------------------
  242. // Summary:
  243. //     Sets the edit style for the edit list box.
  244. // Parameters:
  245. //     lpszTitle -  NULL terminated string that represents the caption title.
  246. //     nTitle -     Resource ID of the string to load for the caption title.
  247. //     dwLStyle -   Style for the list edit control. Pass in LBS_XT_NOTOOLBAR
  248. //                  if you do not wish the caption edit navigation control bar
  249. //                  to be displayed.
  250. // Remarks:
  251. //     Call this member function to set the style and title for the edit
  252. //     list box. The style of the edit list box can be set to one or more
  253. //     of the following values:<p/>
  254. //
  255. //     * <b>LBS_XT_DEFAULT</b> Standard edit field.
  256. //     * <b>LBS_XT_CHOOSEDIR</b> Choose directory browse edit field.
  257. //     * <b>LBS_XT_CHOOSEFILE</b> Choose file browse edit field.
  258. //     * <b>LBS_XT_NOTOOLBAR</b> Do not display edit toolbar.
  259. // -----------------------------------------------------------------------------
  260. void SetListEditStyle(UINT nTitle, DWORD dwLStyle = LBS_XT_DEFAULT);
  261. void SetListEditStyle(LPCTSTR lpszTitle, DWORD dwLStyle = LBS_XT_DEFAULT); //<combine CXTEditListBox::SetListEditStyle@UINT@DWORD>
  262. // --------------------------------------------------------------------
  263. // Summary:
  264. //     Retrieves the current item index.
  265. // Returns:
  266. //     An integer value that represents the edit control index.
  267. // Remarks:
  268. //     Call this member function to get the current index for the edit
  269. //     control. Similar to GetCurSel; however, the current index is the
  270. //     index of the last item to be modified or added to the edit list
  271. //     box and not necessarily the selected item.
  272. // --------------------------------------------------------------------
  273. int GetCurrentIndex();
  274. //-----------------------------------------------------------------------
  275. // Summary:
  276. //     This member function will enable editing for the list box item.
  277. // Parameters:
  278. //     iItem - Index of the item to edit.
  279. //-----------------------------------------------------------------------
  280. void EditItem(int iItem);
  281. // --------------------------------------------------------------------
  282. // Summary:
  283. //     Retrieves the edited item's text label.
  284. // Remarks:
  285. //     This member function is called to retrieve the text for the item
  286. //     that is being edited in the list box and save the value to
  287. //     m_strItemText.
  288. // --------------------------------------------------------------------
  289. virtual void GetEditItemText();
  290. // --------------------------------------------------------------------
  291. // Summary:
  292. //     This method is called to set inplace edit text
  293. // Parameters:
  294. //     pcszText - next text to set
  295. // --------------------------------------------------------------------
  296. void SetEditText(LPCTSTR pcszText);
  297. // --------------------------------------------------------------------
  298. // Summary:
  299. //     Returns a pointer to the CXTEditListBoxToolBar toolbar.
  300. // Returns:
  301. //     A reference to a CXTEditListBoxToolBar object.
  302. // Remarks:
  303. //     Call this member function to return a reference to the
  304. //     CXTEditListBoxToolBar control that is associated with the edit list box.
  305. // --------------------------------------------------------------------
  306. CXTEditListBoxToolBar& GetEditGroup();
  307. //-----------------------------------------------------------------------
  308. // Summary:
  309. //     Call this member function to set the default filter for the
  310. //     file dialog.
  311. // Parameters:
  312. //     lpszFilter - Points to a NULL terminated string that represents
  313. //                 the file filter used by the file open dialog.
  314. //-----------------------------------------------------------------------
  315. void SetDlgFilter(LPCTSTR lpszFilter = NULL);
  316. // --------------------------------------------------------------------------
  317. // Summary:
  318. //     This member function sets the initial directory for the file dialog.
  319. // Parameters:
  320. //     lpszInitialDir -  [in] Points to a NULL terminated string the represents the
  321. //                  initial directory of the file open dialog..
  322. // --------------------------------------------------------------------------
  323. void SetDlgInitialDir(LPCTSTR lpszInitialDir);
  324. //-----------------------------------------------------------------------
  325. // Summary:
  326. //     Call this member function to determine if the edit list has a toolbar.
  327. // Returns:
  328. //     true if the toolbar is turned on, otherwise returns false.
  329. //-----------------------------------------------------------------------
  330. bool HasToolbar();
  331. //-----------------------------------------------------------------------
  332. // Summary:
  333. //     This member function will enable or disable editing.
  334. // Parameters:
  335. //     bEnable - True to enable editing.
  336. //-----------------------------------------------------------------------
  337. void EnableEdit(bool bEnable);
  338. // ---------------------------------------------------------------------
  339. // Summary:
  340. //     Initializes the CXTEditListBox control.
  341. // Parameters:
  342. //     bAutoFont -  True to enable automatic font initialization.
  343. // Remarks:
  344. //     Call this member function to initialize the list box. This method
  345. //     should be called directly after creating or sub-classing the
  346. //     control.
  347. // ---------------------------------------------------------------------
  348. virtual void Initialize(bool bAutoFont = true);
  349. // -------------------------------------------------------------------
  350. // Summary:
  351. //     Recalculates the toolbar layout for the CXTEditListBox.
  352. // Remarks:
  353. //     Call this member function to correctly reposition the edit list
  354. //     box toolbar. This will readjust the layout to correctly and
  355. //     position the toolbar in relation to the list.
  356. // -------------------------------------------------------------------
  357. virtual void RecalcLayout();
  358. // -------------------------------------------------------------
  359. // Summary:
  360. //     Sets the default text for new items.
  361. // Parameters:
  362. //     lpszItemDefaultText -  NULL terminated string.
  363. // Remarks:
  364. //     Call this member function to set the default text that is
  365. //     displayed when a new item is added to the edit list box.
  366. // -------------------------------------------------------------
  367. void SetNewItemDefaultText(LPCTSTR lpszItemDefaultText);
  368. // ----------------------------------------------------------------------
  369. // Summary:
  370. //     Moves item up
  371. // Parameters:
  372. //     nIndex - Item index to move
  373. // ----------------------------------------------------------------------
  374. virtual void MoveItemUp(int nIndex);
  375. // ----------------------------------------------------------------------
  376. // Summary:
  377. //     Moves item down
  378. // Parameters:
  379. //     nIndex - Item index to move
  380. // ----------------------------------------------------------------------
  381. virtual void MoveItemDown(int nIndex);
  382. protected:
  383. //-----------------------------------------------------------------------
  384. // Summary:
  385. //     This member function will create the edit group control.
  386. // Parameters:
  387. //     bAutoFont - True to enable automatic font initialization.
  388. // Returns:
  389. //     TRUE if successful, otherwise returns FALSE.
  390. //-----------------------------------------------------------------------
  391. virtual BOOL CreateEditGroup(bool bAutoFont = true);
  392. // ----------------------------------------------------------------------
  393. // Summary:
  394. //     Enables editing for the currently selected item.
  395. // Parameters:
  396. //     bNewItem -  TRUE to add a new item.
  397. // Remarks:
  398. //     This member function will enable editing for the currently
  399. //     selected list box item. If 'bNewItem' is TRUE, a new item is added
  400. //     to the end of the list box.
  401. // ----------------------------------------------------------------------
  402. virtual void EditListItem(BOOL bNewItem);
  403. // ----------------------------------------------------------------------
  404. // Summary:
  405. //     Deletes currently selected item
  406. // ----------------------------------------------------------------------
  407. virtual void DeleteItem();
  408. // ----------------------------------------------------------------------
  409. // Summary:
  410. //     This method is called to create in-place Edit control
  411. // Parameters:
  412. //     rcItem - Bounding rectangle of edit control.
  413. // ----------------------------------------------------------------------
  414. virtual CXTItemEdit* CreateEditControl(CRect rcItem);
  415. protected:
  416. //{{AFX_CODEJOCK_PRIVATE
  417. DECLARE_MESSAGE_MAP()
  418. //{{AFX_VIRTUAL(CXTEditListBox)
  419. virtual BOOL PreTranslateMessage(MSG* pMsg);
  420. virtual COLORREF GetBackColor();
  421. //}}AFX_VIRTUAL
  422. //{{AFX_MSG(CXTEditListBox)
  423. afx_msg void OnEndLabelEdit();
  424. afx_msg void OnItemBrowse();
  425. afx_msg void OnNewItem();
  426. afx_msg void OnDeleteItem();
  427. afx_msg void OnMoveItemUp();
  428. afx_msg void OnMoveItemDown();
  429. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  430. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  431. afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);
  432. afx_msg void OnNcMButtonDown(UINT nHitTest, CPoint point);
  433. afx_msg void OnNcRButtonDown(UINT nHitTest, CPoint point);
  434. afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos);
  435. afx_msg void OnEnable(BOOL bEnable);
  436. afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
  437. afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
  438. afx_msg void OnSize(UINT nType, int cx, int cy);
  439. //}}AFX_MSG
  440. //}}AFX_CODEJOCK_PRIVATE
  441. protected:
  442. CWnd* m_pParentWnd;             // Pointer to the parent window.
  443. CString m_strItemDefaultText;   // Default text used when new items are created.
  444. int             m_nIndex;       // Current index when edit functions are performed.
  445. BOOL            m_bNewItem;     // TRUE if a new item is being entered into the list box.
  446. bool            m_bEnableEdit;  // True if editing is enabled.
  447. DWORD           m_dwLStyle;     // List edit styles.
  448. CString         m_strTitle;     // Caption area title.
  449. CString         m_strFilter;    // Default file filter.
  450. CString         m_strInitialDir;   // Initial Dir.
  451. CString         m_strItemText;  // Current text of a selected item during edit.
  452. CXTItemEdit*    m_pItemEdit;    // Points to the in-place edit item.
  453. CXTEditListBoxToolBar    m_editGroup;    // The edit group (toolbar) that appears above the list box.
  454. };
  455. //////////////////////////////////////////////////////////////////////
  456. AFX_INLINE int CXTEditListBox::GetCurrentIndex() {
  457. return m_nIndex;
  458. }
  459. AFX_INLINE CXTEditListBoxToolBar& CXTEditListBox::GetEditGroup() {
  460. return m_editGroup;
  461. }
  462. AFX_INLINE void CXTEditListBox::SetDlgFilter(LPCTSTR lpszFilter/*=NULL*/) {
  463. m_strFilter = lpszFilter;
  464. }
  465. AFX_INLINE void CXTEditListBox::SetDlgInitialDir(LPCTSTR lpszInitialDir/*=NULL*/) {
  466. m_strInitialDir = lpszInitialDir;
  467. }
  468. AFX_INLINE bool CXTEditListBox::HasToolbar() {
  469. return ((m_dwLStyle & LBS_XT_NOTOOLBAR) == 0);
  470. }
  471. AFX_INLINE void CXTEditListBox::EnableEdit(bool bEnable) {
  472. m_bEnableEdit = bEnable; m_editGroup.EnableEdit(bEnable);
  473. }
  474. AFX_INLINE void CXTEditListBox::SetNewItemDefaultText(LPCTSTR lpszItemDefaultText) {
  475. m_strItemDefaultText = lpszItemDefaultText;
  476. }
  477. #endif // #if !defined(__XTEDITLISTBOX_H__)