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

对话框与窗口

开发平台:

Visual C++

  1. // XTCheckListBox.h : interface for the CXTCheckListBox 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(__XTCHECKLISTBOX_H__)
  22. #define __XTCHECKLISTBOX_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. // ----------------------------------------------------------------------
  28. // Summary:
  29. //     The CXTCheckListBox class is a CXTListBox derived class. It
  30. //     provides the functionality of Office style checklist box. A
  31. //     "checklist box" displays a list of items such as filenames. Each
  32. //     item in the list has a check box next to it that the user can
  33. //     either check or clear.
  34. //
  35. // Remarks:
  36. //     CXTCheckListBox is only for owner-drawn controls because
  37. //     the list contains more than text strings. At its simplest, a
  38. //     checklist box contains text strings and check boxes, but you do
  39. //     not need to have text at all. For example, you could have a list
  40. //     of small bitmaps with a check box next to each item.
  41. //
  42. //     To create your own checklist box, you must derive your own class
  43. //     from CXTCheckListBox. To derive your own class, write a
  44. //     constructor for the derived class, then call Create.
  45. //
  46. //     If your checklist box is a default checklist box (a list of
  47. //     strings with the default-sized check boxes to the left of each),
  48. //     you can use the default CXTCheckListBox::DrawItem to draw the
  49. //     checklist box. Otherwise, you must override the
  50. //     CListBox::CompareItem function and the CXTCheckListBox::DrawItem
  51. //     and CXTCheckListBox::MeasureItem functions.
  52. // ----------------------------------------------------------------------
  53. class _XTP_EXT_CLASS CXTCheckListBox : public CXTListBox
  54. {
  55. DECLARE_DYNAMIC(CXTCheckListBox)
  56. protected:
  57. // ----------------------------------------------------------------------
  58. // Summary:
  59. //     CCheckListState is a helper class used by CXTCheckListBox
  60. //     that contains information about the checkbox image that is used by
  61. //     the check list box.
  62. // ----------------------------------------------------------------------
  63. class _XTP_EXT_CLASS CCheckListState
  64. {
  65. public:
  66. // -------------------------------------------------------------------
  67. // Summary:
  68. //     Constructs a CCheckListState object
  69. // Parameters:
  70. //     bListBox3D - TRUE to use 3d list box checkmarks
  71. // -------------------------------------------------------------------
  72. CCheckListState(BOOL bListBox3D);
  73. //-----------------------------------------------------------------------
  74. // Summary:
  75. //     Destroys a CCheckListState object, handles cleanup and deallocation
  76. //-----------------------------------------------------------------------
  77. virtual ~CCheckListState();
  78. public:
  79. HBITMAP m_hbitmapCheck; // Handle to the check mark image bitmap.
  80. CSize   m_sizeCheck;    // Width and height of the check mark bitmap.
  81. };
  82. private:
  83. struct CHECK_DATA;
  84. public:
  85. // -------------------------------------------------------------
  86. // Summary:
  87. //     Constructs a CXTCheckListBox object
  88. // Parameters:
  89. //     bListBox3D - TRUE to use 3d list box checkmarks
  90. // -------------------------------------------------------------
  91. CXTCheckListBox(BOOL bListBox3D = FALSE);
  92. // -----------------------------------------------------------------
  93. // Summary:
  94. //     Destroys a CXTCheckListBox object, handles cleanup and
  95. //     deallocation
  96. // -----------------------------------------------------------------
  97. virtual ~CXTCheckListBox();
  98. public:
  99. //-----------------------------------------------------------------------
  100. // Summary:
  101. //     Creates the Windows checklist box and attaches it to the CXTListBox
  102. //     object
  103. // Parameters:
  104. //     dwStyle    - Specifies the style of the checklist box. The style
  105. //                  must be either LBS_OWNERDRAWFIXED (all items in
  106. //                  the list are the same height) or LBS_OWNERDRAWVARIABLE
  107. //                  (items in the list are of varying heights). This
  108. //                  style can be combined with other list-box styles.
  109. //     rect       - Specifies the checklist-box size and position. Can
  110. //                  be either a CRect object or a RECT structure.
  111. //     pParentWnd - Specifies the checklist box's parent window (usually a
  112. //                  CDialog object). It must not be NULL.
  113. //     nID        - Specifies the checklist box's control ID.
  114. // Returns:
  115. //     Nonzero if successful; otherwise 0.
  116. //-----------------------------------------------------------------------
  117. virtual BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
  118. // ---------------------------------------------------------------------------
  119. // Summary:
  120. //     Call this function to set the style of check boxes in the
  121. //     checklist box.
  122. // Parameters:
  123. //     nStyle -  Determines the style of check boxes in the checklist box. See
  124. //               the Remarks section for available styles.
  125. // Remarks:
  126. //     Styles to be added or removed can be combined by using the bitwise
  127. //     OR (|) operator. It can be one or more of the following:
  128. //     * <b>BS_3STATE</b> Same as a check box, except that the box can be dimmed
  129. //       as well as checked. The dimmed state typically is used to show that a
  130. //       check box has been disabled.
  131. //     * <b>BS_AUTO3STATE</b> Same as a three-state check box, except that the box
  132. //       changes its state when the user selects it.
  133. //     * <b>BS_AUTOCHECKBOX</b> Same as a check box, except that a check mark
  134. //       appears in the check box when the user selects the box; the check mark
  135. //       disappears the next time the user selects the box.
  136. //     * <b>BS_CHECKBOX</b> Creates a small square that has text displayed to its
  137. //       right (unless this style is combined with the BS_LEFTTEXT style).
  138. //     For information on these styles, see Button Styles.
  139. // ---------------------------------------------------------------------------
  140. void SetCheckStyle(UINT nStyle);
  141. // ------------------------------------------------------------
  142. // Summary:
  143. //     Retrieves the CXTCheckListBox style.
  144. // Remarks:
  145. //     Call this function to get the checklist box's style. For
  146. //     information on possible styles, see SetCheckStyle.
  147. // Returns:
  148. //     The style of the control's check boxes.
  149. // See Also:
  150. //     SetCheckStyle
  151. // ------------------------------------------------------------
  152. UINT GetCheckStyle();
  153. //-----------------------------------------------------------------------
  154. // Summary:
  155. //     Call this function to set the check box of the item specified
  156. //     by nIndex.
  157. // Parameters:
  158. //     nIndex - Index of the item whose check box is to be set.
  159. //     nCheck - State of the check box: 0 for clear, 1 for checked,
  160. //              and 2 for indeterminate.
  161. //-----------------------------------------------------------------------
  162. void SetCheck(int nIndex, int nCheck);
  163. //-----------------------------------------------------------------------
  164. // Summary:
  165. //     Call this function to determine the check state of an item.
  166. // Parameters:
  167. //     nIndex - Index of the item whose check status is to be retrieved.
  168. // Returns:
  169. //     Zero if the item is not checked, 1 if it is checked, and 2 if it is
  170. //     indeterminate.
  171. //-----------------------------------------------------------------------
  172. int GetCheck(int nIndex);
  173. //-----------------------------------------------------------------------
  174. // Summary:
  175. //     Call this function to enable or disable a checklist box item.
  176. // Parameters:
  177. //     nIndex - Index of the checklist box item to be enabled.
  178. //     bEnabled - Specifies whether the item is enabled or disabled.
  179. //-----------------------------------------------------------------------
  180. void Enable(int nIndex, BOOL bEnabled = TRUE);
  181. //-----------------------------------------------------------------------
  182. // Summary:
  183. //     Call this function to determine whether or not an item is enabled.
  184. // Parameters:
  185. //     nIndex - Index of the item.
  186. // Returns:
  187. //     Nonzero if the item is enabled; otherwise 0.
  188. //-----------------------------------------------------------------------
  189. BOOL IsEnabled(int nIndex);
  190. // ---------------------------------------------------------------------------------
  191. // Summary:
  192. //     The framework calls this function to get the position and size of
  193. //     the check box in an item.
  194. // Parameters:
  195. //     rectItem -      The position and size of the list item.
  196. //     rectCheckBox -  The default position and size of an item's check
  197. //                     box.
  198. // Remarks:
  199. //     The default implementation only returns the default position and
  200. //     size of the check box (rectCheckBox). By default, a check box is
  201. //     aligned in the upper-left corner of an item and is the standard
  202. //     check box size. There may be cases where you want the check boxes
  203. //     on the right or want a larger or smaller check box. In these
  204. //     cases, override OnGetCheckPosition to change the check box
  205. //     position and size within the item.
  206. // Example:
  207. //     The following function overrides the default and puts the check box
  208. //     on the right of the item, makes it the same height as the item
  209. //     (minus a pixel offset at the top and bottom), and makes it the
  210. //     standard check box width:
  211. // <code>
  212. // CRect CMyCheckListBox::OnGetCheckPosition(CRect rectItem, CRect rectCheckBox)
  213. // {
  214. //     CRect rectMyCheckBox;
  215. //     rectMyCheckBox.top = rectItem.top -1;
  216. //     rectMyCheckBox.bottom = rectItem.bottom -1;
  217. //     rectMyCheckBox.right = rectItem.right -1;
  218. //     rectMyCheckBox.left = rectItem.right -1 - rectCheckBox.Width();
  219. //     return rectMyCheckBox;
  220. // }
  221. // </code>
  222. // Returns:
  223. //     The position and size of an item's check box.
  224. // ---------------------------------------------------------------------------------
  225. virtual CRect OnGetCheckPosition(CRect rectItem, CRect rectCheckBox);
  226. protected:
  227. //-----------------------------------------------------------------------
  228. // Summary:
  229. //     This member function is called by the CXTListBase class to
  230. //     perform initialization when the window is created or sub-classed.
  231. // Returns:
  232. //     TRUE if the window was successfully initialized, otherwise FALSE.
  233. //-----------------------------------------------------------------------
  234. virtual bool Init();
  235. //-----------------------------------------------------------------------
  236. // Summary:
  237. //     Returns the height for the font used by the check list box.
  238. // Returns:
  239. //     An integer that represents the font height.
  240. //-----------------------------------------------------------------------
  241. virtual int GetFontHeight();
  242. // ---------------------------------------------------------------------------------------
  243. // Summary:
  244. //     Called by the framework to determine the relative position of a
  245. //     new item in the check list box.
  246. // Parameters:
  247. //     lpCompareItemStruct -  Pointer to a COMPAREITEMSTRUCT struct.
  248. // Returns:
  249. //     Indicates the relative position of the two items described in the COMPAREITEMSTRUCT
  250. //     structure. It may be any of the following values:
  251. // <code>
  252. // -1 Item 1 sorts before item 2.
  253. //  0 Item 1 and item 2 sort the same.
  254. //  1 Item 1 sorts after item 2.
  255. // </code>
  256. // See CWnd::OnCompareItem for a description of the COMPAREITEMSTRUCT
  257. //     structure.
  258. // ---------------------------------------------------------------------------------------
  259. virtual int PreCompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);
  260. // --------------------------------------------------------------------
  261. // Summary:
  262. //     Called by the check list box to determine the minimum height for
  263. //     each item in the check list box.
  264. // Returns:
  265. //     An integer that represents the minimum item height.
  266. // --------------------------------------------------------------------
  267. virtual int CalcMinimumItemHeight();
  268. //-----------------------------------------------------------------------
  269. // Summary:
  270. //     Call this function to determine if a left mouse click occurred
  271. //     in the check box to the left of a list box item.
  272. // Parameters:
  273. //     point    - A CPoint object that specifies the XY point where the
  274. //                left mouse button was clicked.
  275. //     bInCheck - TRUE if the current list box item is checked.
  276. // Returns:
  277. //     The index of the list box item that was checked.  If no list box
  278. //     item was checked, then return -1.
  279. //-----------------------------------------------------------------------
  280. virtual int CheckFromPoint(CPoint point, BOOL& bInCheck);
  281. // ---------------------------------------------------------------------------------------
  282. // Summary:
  283. //     Called to paint the control to an off screen device context for a
  284. //     themed application.
  285. // Parameters:
  286. //     lpDrawItemStruct -  Contains information about the item to draw. The DRAWITEMSTRUCT
  287. //                         structure provides information the owner window must have to
  288. //                         determine how to paint an owner-drawn control or menu item.
  289. // <code>
  290. // typedef struct tagDRAWITEMSTRUCT {
  291. //     UINT   CtlType;
  292. //     UINT   CtlID;
  293. //     UINT   itemID;
  294. //     UINT   itemAction;
  295. //     UINT   itemState;
  296. //     HWND   hwndItem;
  297. //     HDC    hDC;
  298. //     RECT   rcItem;
  299. //     DWORD  itemData;
  300. // } DRAWITEMSTRUCT;
  301. // </code>
  302. // Remarks:
  303. //     Call this function to pre-draw the item to a memory DC or to the
  304. //     ThemeManager. This prevents flickering of the window during
  305. //     drawing.
  306. // ---------------------------------------------------------------------------------------
  307. virtual void PreDrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
  308. // -------------------------------------------------------------------------------------------
  309. // Summary:
  310. //     This function is called to measure the size of the item in the
  311. //     list box for the proper handling of an owner drawn list box.
  312. // Parameters:
  313. //     lpMeasureItemStruct -  A LPMEASUREITEMSTRUCT struct. The MEASUREITEMSTRUCT structure
  314. //                            informs Windows of the dimensions of an owner-drawn control or
  315. //                            menu item. This allows Windows to process user interaction with
  316. //                            the control correctly. Failure to fill out the proper members in
  317. //                            the MEASUREITEMSTRUCT structure will cause improper operation of
  318. //                            the control.
  319. //
  320. // <code>
  321. // typedef struct tagMEASUREITEMSTRUCT {
  322. //     UINT   CtlType;
  323. //     UINT   CtlID;
  324. //     UINT   itemID;
  325. //     UINT   itemWidth;
  326. //     UINT   itemHeight;
  327. //     DWORD  itemData
  328. // } MEASUREITEMSTRUCT;
  329. // </code>
  330. //
  331. //                            itemWidth Specifies the width of a menu item. The
  332. //                            owner of the owner-draw menu item must fill this member before
  333. //                            it returns from the message.
  334. //
  335. //                            itemHeight Specifies the height of an individual item in
  336. //                            a list box or a menu. Before it returns from the message, the owner
  337. //                            of the owner-draw combo box, list box, or menu item must fill out
  338. //                            this member. The maximum height of a list box item is 255.
  339. // -------------------------------------------------------------------------------------------
  340. virtual void PreMeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
  341. // -----------------------------------------------------------------------------------------
  342. // Summary:
  343. //     This function is called so that an owner drawn list box control
  344. //     can properly handle the delete item message WM_DELETEITEM.
  345. // Parameters:
  346. //     lpDeleteItemStruct -  A LPDELETEITEMSTRUCT struct that contains information about the
  347. //                           items to delete. The DELETEITEMSTRUCT structure has the
  348. //                           following form:
  349. //
  350. // <code>
  351. // typedef struct tagDELETEITEMSTRUCT { /* ditms */
  352. //     UINT CtlType;
  353. //     UINT CtlID;
  354. //     UINT itemID;
  355. //     HWND hwndItem;
  356. //     UINT itemData;
  357. // } DELETEITEMSTRUCT;
  358. // </code>
  359. //
  360. //                           The DELETEITEMSTRUCT structure describes a deleted
  361. //                           owner-drawn list-box or combo-box item.
  362. // -----------------------------------------------------------------------------------------
  363. virtual void PreDeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);
  364. //-----------------------------------------------------------------------
  365. // Summary:
  366. //     Call this function to check all items in the list box that are
  367. //     currently highlighted and not disabled.
  368. // Parameters:
  369. //     nCheck - Integer value that specifies the check state.  1 for
  370. //              checked, 0 for not checked, and 2 for intermediate.
  371. //-----------------------------------------------------------------------
  372. virtual void SetSelectionCheck(int nCheck);
  373. // ----------------------------------------------------------------------
  374. // Summary:
  375. //     Called by the CXTCheckListBox to redraw a check box.
  376. // Parameters:
  377. //     nIndex -  Integer value that specifies the index of the value to
  378. //               invalidate.
  379. // Remarks:
  380. //     This member function determines the size of the bounding rectangle
  381. //     of the selected item's check box. Then calls invalidate rectangle
  382. //     so that the background of the rectangle is redrawn during the next
  383. //     WM_PAINT message.
  384. // ----------------------------------------------------------------------
  385. virtual void InvalidateCheck(int nIndex);
  386. //-----------------------------------------------------------------------
  387. // Summary:
  388. //     Called by the CXTCheckListBox to redraw an item.
  389. // Parameters:
  390. //     nIndex - Integer value that specifies the index of the value to
  391. //              invalidate.
  392. // Remarks:
  393. //     This member function determines the size of the bounding rectangle of
  394. //     the selected item.  Then calls invalidate rectangle so that the item's
  395. //     background is redrawn during the next WM_PAINT message.
  396. //-----------------------------------------------------------------------
  397. virtual void InvalidateItem(int nIndex);
  398. // -------------------------------------------------------------------------
  399. // Summary:
  400. //     Called to paint the control to an off screen device context for a
  401. //     themed application.
  402. // Parameters:
  403. //     pDC -       A CDC pointer that represents the current device context.
  404. // drawItem -  A DRAWITEMSTRUCT that contains information about the item to
  405. //                 draw. This is necessary because the list box is an owner
  406. //                 drawn control.
  407. // nCheck -    Integer value that specifies the check state. 1 for checked,
  408. //                 0 for not checked, and 2 for intermediate.
  409. // cyItem -    The vertical position of the item in the list box.
  410. // Remarks:
  411. //     Call this function to pre-draw an item in a themed application.
  412. //     This is used to prevent flickering when re-drawing the control.
  413. // Returns:
  414. //     Returns true if the item is successfully drawn, otherwise return
  415. //     false. Also, if the application is not themed, then this function
  416. //     returns false.
  417. // -------------------------------------------------------------------------
  418. bool PreDrawItemThemed(CDC* pDC, DRAWITEMSTRUCT &drawItem, int nCheck, int cyItem);
  419. // -------------------------------------------------------------------------
  420. // Summary:
  421. //     Called to paint the control to an off screen device context for a
  422. //     non-themed application.
  423. // Parameters:
  424. //     pDC -       A CDC pointer that represents the current device context.
  425. // drawItem -  A DRAWITEMSTRUCT that contains information about the item to
  426. //                 draw. This is necessary because the list box is an owner
  427. //                 drawn control.
  428. // nCheck -    Integer value that specifies the check state. 1 for checked,
  429. //                 0 for not checked, and 2 for intermediate.
  430. // cyItem -    The vertical position of the item in the list box.
  431. // Remarks:
  432. //     Call this function to pre-draw an item in a non-themed
  433. //     application. This is used to prevent flickering when re-drawing
  434. //     the control.
  435. // -------------------------------------------------------------------------
  436. void PreDrawItemNonThemed(CDC* pDC, DRAWITEMSTRUCT &drawItem, int nCheck, int cyItem);
  437. protected:
  438. //{{AFX_CODEJOCK_PRIVATE
  439. DECLARE_MESSAGE_MAP()
  440. //{{AFX_VIRTUAL(CXTCheckListBox)
  441. virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
  442. virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
  443. virtual BOOL OnChildNotify(UINT, WPARAM, LPARAM, LRESULT*);
  444. virtual void PreSubclassWindow();
  445. //}}AFX_VIRTUAL
  446. //{{AFX_MSG(CXTCheckListBox)
  447. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  448. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  449. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  450. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  451. afx_msg LRESULT OnSetFont(WPARAM wParam, LPARAM lParam);
  452. afx_msg LRESULT OnLBAddString(WPARAM wParam, LPARAM lParam);
  453. afx_msg LRESULT OnLBFindString(WPARAM wParam, LPARAM lParam);
  454. afx_msg LRESULT OnLBFindStringExact(WPARAM wParam, LPARAM lParam);
  455. afx_msg LRESULT OnLBGetItemData(WPARAM wParam, LPARAM lParam);
  456. afx_msg LRESULT OnLBGetText(WPARAM wParam, LPARAM lParam);
  457. afx_msg LRESULT OnLBInsertString(WPARAM wParam, LPARAM lParam);
  458. afx_msg LRESULT OnLBSelectString(WPARAM wParam, LPARAM lParam);
  459. afx_msg LRESULT OnLBSetItemData(WPARAM wParam, LPARAM lParam);
  460. afx_msg LRESULT OnLBSetItemHeight(WPARAM wParam, LPARAM lParam);
  461. //}}AFX_MSG
  462. //}}AFX_CODEJOCK_PRIVATE
  463. private:
  464. BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  465. protected:
  466. int                 m_cyText;         // Represents the text height for the check list box.
  467. UINT                m_nStyle;         // Specifies the style for the check list box.
  468. CCheckListState     m_checkListState; // Holds the check mark image information.
  469. CXTPWinThemeWrapper m_themeHelper;    // Used for drawing Windows XP themed checkbox.
  470. };
  471. /////////////////////////////////////////////////////////////////////////////
  472. AFX_INLINE UINT CXTCheckListBox::GetCheckStyle() {
  473. return m_nStyle;
  474. }
  475. AFX_INLINE BOOL CXTCheckListBox::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
  476. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  477. }
  478. #endif // #if !defined(__XTCHECKLISTBOX_H__)