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

对话框与窗口

开发平台:

Visual C++

  1. // XTFlatComboBox.h interface for the CXTFlatComboBox 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(__XTFLATCOMBOBOX_H__)
  22. #define __XTFLATCOMBOBOX_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. class CXTFlatComboBoxTheme;
  28. class CXTFlatEditTheme;
  29. #include "XTThemeManager.h"
  30. //===========================================================================
  31. // Summary:
  32. //     CXTFlatComboBox is a CComboBox derived class. The CXTFlatComboBox class
  33. //     can easily give your application's standard CComboBox control the Flat
  34. //     Look that is seen in many of the Microsoft(r) Office(tm) products.
  35. // Remarks:
  36. //     To use the control, use Class Wizard to add the CComboBox member variable (
  37. //     Class Wizard -> Member Variables Tab -> Add Variable) and rename CComboBox
  38. //     to CXTFlatComboBox.
  39. //===========================================================================
  40. class _XTP_EXT_CLASS CXTFlatComboBox : public CComboBox, public CXTThemeManagerStyleHostBase
  41. {
  42. DECLARE_DYNAMIC(CXTFlatComboBox)
  43. DECLARE_THEME_HOST(CXTFlatComboBox)
  44. DECLARE_THEME_REFRESH(CXTFlatComboBox)
  45. public:
  46. //-----------------------------------------------------------------------
  47. // Summary:
  48. //     Constructs a CXTFlatComboBox object
  49. //-----------------------------------------------------------------------
  50. CXTFlatComboBox();
  51. //-----------------------------------------------------------------------
  52. // Summary:
  53. //     Destroys a CXTFlatComboBox object, handles cleanup and deallocation
  54. //-----------------------------------------------------------------------
  55. virtual ~CXTFlatComboBox();
  56. public:
  57. //-----------------------------------------------------------------------
  58. // Summary:
  59. //     This member function will disable the flat look for the CXTFlatComboBox.
  60. // Parameters:
  61. //     bDisable - TRUE to disable flat appearance.
  62. //-----------------------------------------------------------------------
  63. void DisableFlatLook(BOOL bDisable);
  64. //-----------------------------------------------------------------------
  65. // Summary:
  66. //     Call this member function to determine if the appearance of the
  67. //     CXTFlatComboBox control is flat.
  68. // Returns:
  69. //     TRUE if the control is flat, otherwise returns FALSE.
  70. //-----------------------------------------------------------------------
  71. BOOL IsFlat();
  72. //-----------------------------------------------------------------------
  73. // Summary:
  74. //     This member function enables or disables auto completion.
  75. // Parameters:
  76. //     bEnable - TRUE to enable auto completion, otherwise FALSE.
  77. //-----------------------------------------------------------------------
  78. virtual void EnableAutoCompletion(BOOL bEnable = TRUE);
  79. //-----------------------------------------------------------------------
  80. // Summary:
  81. //     This member function determines if the mouse is within the control's
  82. //     rect.
  83. // Returns:
  84. //     TRUE if the mouse is over the CXTFlatComboBox, otherwise returns FALSE.
  85. //-----------------------------------------------------------------------
  86. virtual BOOL PointInRect();
  87. //-----------------------------------------------------------------------
  88. // Summary: Call this member function to determine if the control has the focus.
  89. // Returns: TRUE if the control has the focus. FALSE otherwise.
  90. //-----------------------------------------------------------------------
  91. virtual BOOL IsFocused() const;
  92. //-----------------------------------------------------------------------
  93. // Summary      : Call this member function to set the background color
  94. //                for the CXTFlatComboBox control.
  95. // Parameters   : crBack - RGB value representing background color.
  96. // See Also     : SetTextColor, GetBackColor, GetTextColor
  97. //-----------------------------------------------------------------------
  98. virtual void SetBackColor(COLORREF crBack) {
  99. m_crBack = crBack;
  100. }
  101. //-----------------------------------------------------------------------
  102. // Summary      : Call this member function to retrieve the background color
  103. //                for the CXTFlatComboBox.
  104. // Returns      : An RGB color value representing the background color for
  105. //                the CXTFlatComboBox.
  106. // See Also     : SetTextColor, SetBackColor, GetTextColor
  107. //-----------------------------------------------------------------------
  108. COLORREF GetBackColor() const {
  109. return (m_crBack == COLORREF_NULL) ? GetXtremeColor(COLOR_WINDOW) : m_crBack;
  110. }
  111. //-----------------------------------------------------------------------
  112. // Summary      : Call this member function to set the text color
  113. //                for the CXTFlatComboBox control.
  114. // Parameters   : crText - RGB value representing text color.
  115. // See Also     : SetBackColor, GetBackColor, GetTextColor
  116. //-----------------------------------------------------------------------
  117. virtual void SetTextColor(COLORREF crText) {
  118. m_crText = crText;
  119. }
  120. //-----------------------------------------------------------------------
  121. // Summary      : Call this member function to retrieve the text color
  122. //                for the CXTFlatComboBox.
  123. // Returns      : An RGB color value representing the text color for
  124. //                the CXTFlatComboBox.
  125. // See Also     : SetTextColor, SetBackColor, GetBackColor
  126. //-----------------------------------------------------------------------
  127. COLORREF GetTextColor() const {
  128. return (m_crText == COLORREF_NULL) ? GetXtremeColor(COLOR_WINDOWTEXT) : m_crText;
  129. }
  130. protected:
  131. //-----------------------------------------------------------------------
  132. // Summary:
  133. //     This member function is called by the CXTFlatComboBox whenever a paint
  134. //     operation should occur.
  135. // Parameters:
  136. //     pDC    - Points to the current device context.
  137. //     eState - Current state of the CXTFlatComboBox, either xtMouseNormal, xtMouseHover, or xtMouseSelect.
  138. // See Also:
  139. //     XTMouseState
  140. //-----------------------------------------------------------------------
  141. virtual void DrawCombo(CDC* pDC, XTMouseState eState);
  142. //-----------------------------------------------------------------------
  143. // Summary:
  144. //     A helper for rendering the control appearance.
  145. // Parameters:
  146. //     pDC - Pointer to a valid device context
  147. //-----------------------------------------------------------------------
  148. virtual void DoPaint(CDC* pDC);
  149. //-----------------------------------------------------------------------
  150. // Summary:
  151. //      This member function is called to determine the actual client area
  152. //      for the CXTFlatComboBox control. The actual client area is the display area
  153. //      excluding borders and drop arrow box.
  154. // Parameters:
  155. //      rc - Reference to a CRect object to receive client coordinates.
  156. //-----------------------------------------------------------------------
  157. virtual void CalcClientRect(CRect& rc);
  158. protected:
  159. //{{AFX_CODEJOCK_PRIVATE
  160. //{{AFX_VIRTUAL(CXTFlatComboBox)
  161. virtual BOOL PreTranslateMessage(MSG* pMsg);
  162. //}}AFX_VIRTUAL
  163. //{{AFX_MSG(CXTFlatComboBox)
  164. afx_msg void OnTimer(UINT_PTR nIDEvent);
  165. afx_msg void OnPaint();
  166. afx_msg BOOL OnSetFocus();
  167. afx_msg BOOL OnKillFocus();
  168. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  169. afx_msg BOOL OnEditUpdate();
  170. afx_msg BOOL OnEndSel();
  171. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  172. afx_msg LRESULT OnPrintClient(WPARAM wp, LPARAM lp);
  173. //}}AFX_MSG
  174. DECLARE_MESSAGE_MAP()
  175. //}}AFX_CODEJOCK_PRIVATE
  176. public:
  177. BOOL m_bAutoComp;   // Used by Auto completing.
  178. BOOL m_bFlatLook;   // TRUE if the control is flat.
  179. BOOL m_bDisableAC;  // TRUE when auto complete is disabled internally.
  180. protected:
  181. BOOL m_bPainted;    // Used during paint operations.
  182. BOOL m_bHasFocus;   // TRUE if the control has the focus.
  183. DWORD m_nStyle;     // Stores the standard window styles for the control.
  184. DWORD m_nStyleEx;   // Stores the extended window styles for the control.
  185. COLORREF m_crBack;  // RGB color value representing background color.
  186. COLORREF m_crText;  // RGB color value representing text color.
  187. };
  188. //////////////////////////////////////////////////////////////////////
  189. AFX_INLINE void CXTFlatComboBox::EnableAutoCompletion(BOOL bEnable/*=TRUE*/) {
  190. m_bAutoComp = bEnable;
  191. }
  192. AFX_INLINE BOOL CXTFlatComboBox::IsFlat() {
  193. return m_bFlatLook;
  194. }
  195. AFX_INLINE BOOL CXTFlatComboBox::IsFocused() const {
  196. return m_bHasFocus;
  197. }
  198. //===========================================================================
  199. // Summary:
  200. //     CXTEdit is a CEdit derived class. The CXTEdit class provides the functionality
  201. //     of a Windows edit control. An edit control is a rectangular child window
  202. //     in which the user can enter text.
  203. // Remarks:
  204. //     You can create an edit control either from a dialog template or directly
  205. //     in your code. In both cases, first call the constructor CXTEdit to construct
  206. //     the CXTEdit object, then call the Create member function to create the
  207. //     Windows edit control and attach it to the CXTEdit object.
  208. //
  209. //     Construction can be a one-step process in a class derived from CXTEdit.
  210. //     Write a constructor for the derived class and call Create from within
  211. //     the constructor.
  212. //
  213. //     CXTEdit inherits significant functionality from CWnd. To set and retrieve
  214. //     text from a CXTEdit object, use the CWnd member functions SetWindowText
  215. //     and GetWindowText, which either set or get the entire contents of an edit control
  216. //     even if it is a multiline control. Also, if an edit control is multiline,
  217. //     get and set part of the control's text by calling the CXTEdit member
  218. //     functions GetLine, SetSel, GetSel, and ReplaceSel.
  219. //
  220. //     If you want to handle Windows notification messages sent by an edit
  221. //     control to its parent (usually a class derived from CDialog), add a
  222. //     message-map entry and message-handler member function to the parent
  223. //     class for each message.
  224. //
  225. //     Each message-map entry takes the following form:
  226. //
  227. // <code>
  228. // ON_Notification(id, memberFxn)
  229. // </code>
  230. //
  231. //          where 'id' specifies the child window ID of the edit control sending the
  232. //          notification, and 'memberFxn' is the name of the parent member function
  233. //          you have written to handle the notification.
  234. //
  235. //          The parent's function prototype is as follows:
  236. //
  237. // <code>
  238. // afx_msg void memberFxn();
  239. // </code>
  240. //
  241. //          Following is a list of potential message-map entries and a description
  242. //          of the cases in which they would be sent to the parent:
  243. //
  244. //        * <b>ON_EN_CHANGE</b> The user has taken an action that may have altered
  245. //          text in an edit control. Unlike the EN_UPDATE notification message,
  246. //          this notification message is sent after Windows updates the display.
  247. //        * <b>ON_EN_ERRSPACE</b> The edit control cannot allocate enough memory
  248. //          to meet a specific request.
  249. //        * <b>ON_EN_HSCROLL</b> The user clicks an edit control's horizontal scroll
  250. //          bar. The parent window is notified before the screen is updated.
  251. //        * <b>ON_EN_KILLFOCUS</b> The edit control loses the input focus.
  252. //        * <b>ON_EN_MAXTEXT</b> The current insertion has exceeded the specified
  253. //          number of characters for the edit control and has been truncated.
  254. //          Also sent when an edit control does not have the ES_AUTOHSCROLL
  255. //          style and the number of characters to be inserted would exceed the
  256. //          width of the edit control. Also sent when an edit control does not
  257. //          have the ES_AUTOVSCROLL style and the total number of lines resulting
  258. //          from a text insertion would exceed the height of the edit control.
  259. //        * <b>ON_EN_SETFOCUS</b> Sent when an edit control receives the input focus.
  260. //        * <b>ON_EN_UPDATE</b> The edit control is about to display altered text.
  261. //          Sent after the control has formatted the text but before it screens
  262. //          the text so that the window size can be altered, if necessary.
  263. //        * <b>ON_EN_VSCROLL</b> The user clicks an edit control's vertical scroll
  264. //          bar. The parent window is notified before the screen is updated.
  265. //
  266. //     If you create a CXTEdit object within a dialog box, the CXTEdit object
  267. //     is automatically destroyed when the user closes the dialog box.
  268. //
  269. //     If you create a CXTEdit object from a dialog resource using the dialog
  270. //     editor, the CXTEdit object is automatically destroyed when the user
  271. //     closes the dialog box.
  272. //
  273. //     If you create a CXTEdit object within a window, you may also need to
  274. //     destroy it. If you create the CXTEdit object on the stack, it is destroyed
  275. //     automatically. If you create the CXTEdit object on the heap by using
  276. //     the new function, you must call delete on the object to destroy it when
  277. //     the user terminates the Windows edit control. If you allocate any memory
  278. //     in the CXTEdit object, override the CXTEdit destructor to dispose of
  279. //     the allocations.
  280. //===========================================================================
  281. class _XTP_EXT_CLASS CXTEdit : public CEdit
  282. {
  283. DECLARE_DYNAMIC(CXTEdit)
  284. public:
  285. //-----------------------------------------------------------------------
  286. // Summary:
  287. //     Constructs a CXTEdit object
  288. //-----------------------------------------------------------------------
  289. CXTEdit();
  290. //-----------------------------------------------------------------------
  291. // Summary:
  292. //     Destroys a CXTEdit object, handles clean up and deallocation
  293. //-----------------------------------------------------------------------
  294. virtual ~CXTEdit();
  295. public:
  296. // ------------------------------------------------------------------------
  297. // Summary:
  298. //     Determines if the clipboard contains valid information.
  299. // Returns:
  300. //     TRUE if the Clipboard contains data in a format which this edit view
  301. //     can accept, otherwise it returns FALSE.
  302. // Remarks:
  303. //     Call this member function to determine if the Clipboard contains
  304. //     information that can be pasted into this edit view.
  305. // ------------------------------------------------------------------------
  306. virtual BOOL CanPaste();
  307. //-----------------------------------------------------------------------
  308. // Summary:
  309. //     Call this member function to determine if a selection has been made.
  310. // Returns:
  311. //     TRUE if a selection has been made, otherwise returns FALSE.
  312. //-----------------------------------------------------------------------
  313. virtual BOOL SelectionMade();
  314. // ----------------------------------------------------------------------
  315. // Summary:
  316. //     Initializes the CXTEdit control.
  317. // Remarks:
  318. //     Call this member function to initialize edit control. You should
  319. //     always call this after you have created or subclassed your edit
  320. //     control.
  321. // Parameters:
  322. //     pParentWnd -  Pointer to the parent of the edit control.
  323. // Returns:
  324. //     True if the control was successfully initialized, otherwise false.
  325. // ----------------------------------------------------------------------
  326. virtual bool Initialize(CWnd* pParentWnd);
  327. protected:
  328. //{{AFX_CODEJOCK_PRIVATE
  329. DECLARE_MESSAGE_MAP()
  330. //{{AFX_MSG(CXTEdit)
  331. afx_msg void OnContextMenu(CWnd*, CPoint point);
  332. afx_msg void OnEditUndo();
  333. afx_msg void OnUpdateEditUndo(CCmdUI* pCmdUI);
  334. afx_msg void OnEditCut();
  335. afx_msg void OnUpdateEditCut(CCmdUI* pCmdUI);
  336. afx_msg void OnEditCopy();
  337. afx_msg void OnUpdateEditCopy(CCmdUI* pCmdUI);
  338. afx_msg void OnEditPaste();
  339. afx_msg void OnUpdateEditPaste(CCmdUI* pCmdUI);
  340. afx_msg void OnEditClear();
  341. afx_msg void OnUpdateEditClear(CCmdUI* pCmdUI);
  342. afx_msg void OnEditSelectAll();
  343. afx_msg void OnUpdateEditSelectAll(CCmdUI* pCmdUI);
  344. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  345. afx_msg void OnPaint();
  346. afx_msg void OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu);
  347. //}}AFX_MSG
  348. //}}AFX_CODEJOCK_PRIVATE
  349. protected:
  350. CWnd* m_pParentWnd; // Pointer to the parent of the edit control.
  351. };
  352. //===========================================================================
  353. // Summary:
  354. //     CXTFlatEdit is a CXTEdit derived class. The CXTFlatEdit class can easily
  355. //     give your application's standard CEdit control the flat look that is
  356. //     seen in many of the Microsoft(r) Office(tm) products.
  357. // Remarks:
  358. //     To use the control, use Class Wizard to add the CEdit member variable (Class Wizard ->
  359. //     Member Variables Tab -> Add Variable) and rename CEdit to CXTFlatEdit.
  360. //===========================================================================
  361. class _XTP_EXT_CLASS CXTFlatEdit : public CXTEdit, public CXTThemeManagerStyleHostBase
  362. {
  363. DECLARE_DYNAMIC(CXTFlatEdit)
  364. DECLARE_THEME_HOST(CXTFlatEdit)
  365. DECLARE_THEME_REFRESH(CXTFlatEdit)
  366. public:
  367. //-----------------------------------------------------------------------
  368. // Summary:
  369. //     Constructs a CXTFlatEdit object
  370. //-----------------------------------------------------------------------
  371. CXTFlatEdit();
  372. //-----------------------------------------------------------------------
  373. // Summary:
  374. //     Destroys a CXTFlatEdit object, handles cleanup and deallocation
  375. //-----------------------------------------------------------------------
  376. virtual ~CXTFlatEdit();
  377. public:
  378. //-----------------------------------------------------------------------
  379. // Summary:
  380. //     This member function will disable the flat look for the edit control.
  381. // Parameters:
  382. //     bDisable - TRUE to disable the flat appearance.
  383. //-----------------------------------------------------------------------
  384. void DisableFlatLook(BOOL bDisable);
  385. //-----------------------------------------------------------------------
  386. // Summary:
  387. //     Call this member function to determine if the appearance of the edit
  388. //     control is flat.
  389. // Returns:
  390. //     TRUE if the control is flat, otherwise returns FALSE.
  391. //-----------------------------------------------------------------------
  392. BOOL IsFlat();
  393. //-----------------------------------------------------------------------
  394. // Summary:
  395. //     This member function determines if the mouse is within the control's
  396. //     rect.
  397. // Returns:
  398. //     TRUE if the mouse is over the edit box, otherwise returns FALSE.
  399. //-----------------------------------------------------------------------
  400. virtual BOOL PointInRect();
  401. protected:
  402. //-----------------------------------------------------------------------
  403. // Summary:
  404. //     This member function is called by the edit control whenever a paint
  405. //     operation should occur.
  406. // Parameters:
  407. //     pDC    - Points to the current device context.
  408. //     rWindow - Area to render.
  409. // See Also:
  410. //     XTMouseState
  411. //-----------------------------------------------------------------------
  412. virtual void DrawBorders(CDC* pDC, const CRect& rWindow);
  413. protected:
  414. //{{AFX_CODEJOCK_PRIVATE
  415. DECLARE_MESSAGE_MAP()
  416. //{{AFX_MSG(CXTFlatEdit)
  417. afx_msg void OnNcPaint();
  418. afx_msg void OnTimer(UINT_PTR nIDEvent);
  419. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  420. afx_msg void OnSetFocus(CWnd* pOldWnd);
  421. afx_msg void OnKillFocus(CWnd* pNewWnd);
  422. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  423. afx_msg LRESULT OnPrintClient(WPARAM wp, LPARAM lp);
  424. //}}AFX_MSG
  425. //}}AFX_CODEJOCK_PRIVATE
  426. protected:
  427. BOOL m_bPainted;  // Used during paint operations.
  428. BOOL m_bHasFocus; // TRUE if the control has focus.
  429. BOOL m_bFlatLook; // TRUE if the control is flat.
  430. DWORD m_nStyle;   // Stores the standard window styles for the control.
  431. DWORD m_nStyleEx; // Stores the extended window styles for the control.
  432. };
  433. //////////////////////////////////////////////////////////////////////
  434. AFX_INLINE BOOL CXTFlatEdit::IsFlat() {
  435. return m_bFlatLook;
  436. }
  437. #endif // #if !defined(__XTFLATCOMBOBOX_H__)