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

对话框与窗口

开发平台:

Visual C++

  1. // XTPSkinObjectFrame.h: interface for the CXTPSkinObjectFrame class.
  2. //
  3. // This file is a part of the XTREME SKINFRAMEWORK 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(__XTPSKINOBJECTFRAME_H__)
  22. #define __XTPSKINOBJECTFRAME_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include "XTPSkinObject.h"
  28. //{{AFX_CODEJOCK_PRIVATE
  29. #ifndef WM_NCMOUSELEAVE
  30. #define WM_NCMOUSELEAVE     0x02A2
  31. #endif
  32. #ifndef WM_QUERYUISTATE
  33. #define WM_UPDATEUISTATE    0x0128
  34. #define WM_QUERYUISTATE     0x0129
  35. #define UISF_HIDEACCEL      0x2
  36. #define UISF_HIDEFOCUS      0x1
  37. #endif
  38. #define XTP_HTSCROLLUP          60
  39. #define XTP_HTSCROLLDOWN        61
  40. #define XTP_HTSCROLLUPPAGE      62
  41. #define XTP_HTSCROLLDOWNPAGE    63
  42. #define XTP_HTSCROLLTHUMB       64
  43. #define XTP_TID_MOUSELEAVE  0xACB
  44. #define XTP_TID_REFRESHFRAME  0xACD
  45. struct XTP_SKINSCROLLBARPOSINFO
  46. {
  47. int    posMin;
  48. int    posMax;
  49. int    page;
  50. int    pos;
  51. int    pxTop;
  52. int    pxBottom;
  53. int    pxLeft;
  54. int    pxRight;
  55. int    cpxThumb;
  56. int    pxUpArrow;
  57. int    pxDownArrow;
  58. int    pxStart;
  59. int    pxThumbBottom;
  60. int    pxThumbTop;
  61. int    cpx;
  62. int    pxMin;
  63. RECT   rc;
  64. int    ht;
  65. BOOL   fVert;
  66. int    nBar;
  67. BOOL   fVisible;
  68. };
  69. struct XTP_SKINSCROLLBARTRACKINFO
  70. {
  71. BOOL   fHitOld;
  72. BOOL   fTrackVert;
  73. RECT   rcTrack;
  74. UINT   cmdSB;
  75. UINT_PTR  hTimerSB;
  76. int    dpxThumb;
  77. int    pxOld;
  78. int    posOld;
  79. int    posNew;
  80. BOOL   bTrackThumb;
  81. HWND   hWndSB;
  82. HWND   hWndSBNotify;
  83. int    nBar;
  84. BOOL   fNonClient;
  85. XTP_SKINSCROLLBARPOSINFO* pSBInfo;
  86. };
  87. //}}AFX_CODEJOCK_PRIVATE
  88. //===========================================================================
  89. // Summary:
  90. //     CXTPSkinObjectFrame is a CXTPSkinObject derived class.
  91. //     It is parent control for all implementations that have border or scroll bars
  92. //===========================================================================
  93. class _XTP_EXT_CLASS CXTPSkinObjectFrame : public CXTPSkinObject
  94. {
  95. DECLARE_DYNCREATE(CXTPSkinObjectFrame)
  96. public:
  97. //===========================================================================
  98. // Summary:
  99. //     Caption button class
  100. //===========================================================================
  101. class _XTP_EXT_CLASS CCaptionButton
  102. {
  103. public:
  104. //-----------------------------------------------------------------------
  105. // Summary:
  106. //     Constructs a CXTPSkinObject object.
  107. // Parameters:
  108. //     nCommand - Command id of button
  109. //     pFrame - Parent frame object
  110. //     nHTCode - Hit test code of the button
  111. //     m_nClassPart - Class part
  112. //-----------------------------------------------------------------------
  113. CCaptionButton(int nCommand, CXTPSkinObjectFrame* pFrame, UINT nHTCode, int m_nClassPart);
  114. //-----------------------------------------------------------------------
  115. // Summary:
  116. //     This method is called to draw caption button
  117. // Parameters:
  118. //     pDC - Pointer to device context
  119. //     bFrameActive - TRUE if frame is active
  120. //-----------------------------------------------------------------------
  121. void Draw(CDC* pDC, BOOL bFrameActive);
  122. //-----------------------------------------------------------------------
  123. // Summary:
  124. //     Determines if button is pressed
  125. //-----------------------------------------------------------------------
  126. BOOL IsPressed() const;
  127. //-----------------------------------------------------------------------
  128. // Summary:
  129. //     Determines if button is highlighted
  130. //-----------------------------------------------------------------------
  131. BOOL IsHighlighted() const;
  132. public:
  133. UINT m_nHTCode;         // HitTest code
  134. CRect m_rcButton;       // Button bounding rectangle
  135. int m_nClassPart;       // Class part
  136. CXTPSkinObjectFrame* m_pFrame;      // Parent frame object
  137. int m_nCommand;         // Button Command
  138. BOOL m_bEnabled;
  139. };
  140. typedef CArray<CCaptionButton*, CCaptionButton*> CCaptionButtons;
  141. public:
  142. //-----------------------------------------------------------------------
  143. // Summary:
  144. //     Constructs a CXTPSkinObjectFrame object.
  145. //-----------------------------------------------------------------------
  146. CXTPSkinObjectFrame();
  147. //-----------------------------------------------------------------------
  148. // Summary:
  149. //     Destroys a CXTPSkinObjectFrame object, handles cleanup and deallocation.
  150. //-----------------------------------------------------------------------
  151. virtual ~CXTPSkinObjectFrame();
  152. public:
  153. //-----------------------------------------------------------------------
  154. // Summary:
  155. //     This method is called to redraw scroll bar of the frame
  156. // Parameters:
  157. //     nBar - Scroll bar
  158. //-----------------------------------------------------------------------
  159. void RedrawScrollBar(int nBar);
  160. //-----------------------------------------------------------------------
  161. // Summary:
  162. //     Retrieves borders of window
  163. //-----------------------------------------------------------------------
  164. CRect GetBorders() const;
  165. //-----------------------------------------------------------------------
  166. // Summary:
  167. //     Determines if caption currently active
  168. //-----------------------------------------------------------------------
  169. BOOL IsActive() const;
  170. //-----------------------------------------------------------------------
  171. // Summary:
  172. //     Retrieves collection of caption buttons
  173. //-----------------------------------------------------------------------
  174. CCaptionButtons* GetCaptionButtons();
  175. //-----------------------------------------------------------------------
  176. // Summary:
  177. //     Call this method to get client brush
  178. // Parameters:
  179. //     pDC - Device context
  180. //-----------------------------------------------------------------------
  181. virtual HBRUSH GetClientBrush(CDC* pDC);
  182. public:
  183. //{{AFX_CODEJOCK_PRIVATE
  184. BOOL IsFrameScrollBars();
  185. HBRUSH GetClientBrush(HDC hDC, HWND hWnd, UINT nCtlColor);
  186. XTP_SKINSCROLLBARTRACKINFO* GetScrollBarTrackInfo() const;
  187. //}}AFX_CODEJOCK_PRIVATE
  188. protected:
  189. //-----------------------------------------------------------------------
  190. // Summary:
  191. //     This method is called when skin was changed
  192. // Parameters:
  193. //     bPrevState - TRUE if previously skin was installed
  194. //     bNewState - TRUE if skin is installed
  195. //-----------------------------------------------------------------------
  196. virtual void OnSkinChanged(BOOL bPrevState, BOOL bNewState);
  197. //-----------------------------------------------------------------------
  198. // Summary:
  199. //     This method is called when visual metrics was changed
  200. //-----------------------------------------------------------------------
  201. virtual void RefreshMetrics();
  202. //-----------------------------------------------------------------------
  203. // Summary:
  204. //     This method is called when hook is attached
  205. //-----------------------------------------------------------------------
  206. virtual void OnHookAttached(LPCREATESTRUCT lpcs, BOOL bAuto);
  207. //-----------------------------------------------------------------------
  208. // Summary:
  209. //     This method is called when hook is detached
  210. //-----------------------------------------------------------------------
  211. void OnHookDetached(BOOL bAuto);
  212. //{{AFX_CODEJOCK_PRIVATE
  213. public:
  214. void RedrawFrame();
  215. protected:
  216. void CreateHeaderRgn(CRgn& rgnHeader, int nWidth);
  217. void UpdateFrameRegion(CSize szFrameRegion);
  218. void UpdateButtons();
  219. void InvalidateButtons();
  220. CCaptionButton* HitTestButton(CPoint pt);
  221. void UpdateButton(int nID, BOOL bVisible, BOOL bEnabled, UINT htCode, int nClassPart);
  222. void RemoveButtons();
  223. void RefreshFrameStyle();
  224. BOOL HasCaption() const;
  225. HBRUSH FillBackground(CDC* pDC, LPCRECT lprc, int nMessage = WM_CTLCOLORSTATIC);
  226. HBRUSH GetFillBackgroundBrush(CDC* pDC, int nMessage);
  227. void ResizeFrame();
  228. virtual int GetClientBrushMessage();
  229. protected:
  230. virtual void DrawFrame(CDC* pDC);
  231. void ScreenToFrame(LPPOINT lpPoint);
  232. void ClientToFrame(LPPOINT lpPoint);
  233. void AdjustFrame(CRect& rc);
  234. BOOL OnHookMessage(UINT nMessage, WPARAM& wParam, LPARAM& lParam, LRESULT& lResult);
  235. BOOL OnHookDefWindowProc(UINT nMessage, WPARAM& wParam, LPARAM& lParam, LRESULT& lResult);
  236. protected:
  237. void DrawScrollBar(CDC* pDC, XTP_SKINSCROLLBARPOSINFO* pSBInfo);
  238. void TrackInit(CPoint point, XTP_SKINSCROLLBARPOSINFO* pSBInfo, BOOL bDirect);
  239. void ContScroll();
  240. void DoScroll(HWND hwnd, HWND hwndNotify, int cmd, int pos, BOOL fVert);
  241. void TrackBox(UINT message, CPoint point);
  242. void TrackThumb(UINT message, CPoint point);
  243. void MoveThumb(int px);
  244. int HitTestScrollBar(XTP_SKINSCROLLBARPOSINFO* pSBInfo, POINT pt);
  245. void EndScroll(BOOL fCancel);
  246. void CalcScrollBarInfo(LPRECT lprc, XTP_SKINSCROLLBARPOSINFO* pSBInfo, SCROLLINFO* pSI);
  247. void RedrawScrollBar(XTP_SKINSCROLLBARPOSINFO* pSBInfo);
  248. void SetupScrollInfo(XTP_SKINSCROLLBARPOSINFO* pSBInfo);
  249. CRect GetScrollBarRect(int sbCode);
  250. void TrackCaptionButton();
  251. BOOL IsSizeBox();
  252. virtual BOOL IsDefWindowProcAvail(int nMessage) const;
  253. BOOL PreHookMessage(UINT nMessage);
  254. BOOL IsFlatScrollBarInitialized() const;
  255. BOOL FrameHasMenuBar();
  256. void DrawFrameMenuBar(CDC* pDC);
  257. HWND FindMDIClient();
  258. //}}AFX_CODEJOCK_PRIVATE
  259. protected:
  260. //{{AFX_CODEJOCK_PRIVATE
  261. DECLARE_MESSAGE_MAP()
  262. //{{AFX_VIRTUAL(CXTPSkinObjectFrame)
  263. //}}AFX_VIRTUAL
  264. //{{AFX_MSG(CXTPSkinObjectFrame)
  265. afx_msg void OnNcPaint();
  266. afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
  267. afx_msg void OnNcMouseMove(UINT nHitTest, CPoint point);
  268. afx_msg LRESULT OnNcHitTest(CPoint point);
  269. afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);
  270. afx_msg void OnNcRButtonUp(UINT nHitTest, CPoint point);
  271. afx_msg void OnNcLButtonDblClk(UINT nHitTest, CPoint point);
  272. afx_msg void OnTimer(UINT_PTR nIDEvent);
  273. afx_msg void OnNcMouseLeave();
  274. afx_msg LRESULT OnSetText(WPARAM wParam, LPARAM lParam);
  275. afx_msg BOOL OnNcActivate(BOOL bActive);
  276. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  277. afx_msg void OnWindowPosChanging(WINDOWPOS FAR* lpwndpos);
  278. afx_msg LRESULT OnPrint(WPARAM, LPARAM);
  279. afx_msg void OnGetMinMaxInfo(MINMAXINFO* lpMMI);
  280. afx_msg void OnStyleChanged(int nStyleType, LPSTYLESTRUCT lpStyleStruct);
  281. afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
  282. BOOL HandleMouseMove(CPoint point);
  283. LRESULT HandleNcHitTest(CPoint point);
  284. afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos);
  285. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  286. LRESULT CallDefDlgProc(UINT nMessage, WPARAM wParam, LPARAM lParam);
  287. //}}AFX_MSG
  288. //}}AFX_CODEJOCK_PRIVATE
  289. private:
  290. void CancelMouseLeaveTracking();
  291. public:
  292. BOOL  m_bLockFrameDraw;         // TRUE to lock draw
  293. DWORD m_dwDialogTexture;            // Dialog texture
  294. CXTPSkinObjectFrame* m_pMDIClient;
  295. public:
  296. static POINT m_sMenuOffset;
  297. protected:
  298. CCaptionButtons m_arrButtons;           // Caption buttons
  299. CRect m_rcBorders;          // Frame borders
  300. CCaptionButton* m_pButtonHot;           // Hot caption button
  301. CCaptionButton* m_pButtonPressed;       // Pressed caption button
  302. BOOL m_bRegionChanged;          // TRUE if region was changed
  303. XTP_SKINSCROLLBARTRACKINFO* m_pSBTrack; // Track info of scroll bars
  304. XTP_SKINSCROLLBARPOSINFO m_spi[2];          // Scroll bar position info
  305. CSize m_szFrameRegion;          // Lase frame region
  306. BOOL m_bMDIClient;              // TRUE if frame is MDI client
  307. BOOL m_bActive;                 // TRUE if caption is active
  308. DWORD m_dwStyle;                // Styles of window
  309. DWORD m_dwExStyle;              // ExStyles of window
  310. CRect m_rcMenuBar;
  311. BOOL m_bInUpdateRegion;
  312. int m_nCtlColorMessage;
  313. private:
  314. friend class CXTPSkinManager;
  315. friend class CCaptionButton;
  316. };
  317. //===========================================================================
  318. // Summary:
  319. //     CXTPSkinObjectUser32Control is a CXTPSkinObjectFrame derived class.
  320. //     It is base class for all User32 defined controls
  321. //===========================================================================
  322. class _XTP_EXT_CLASS CXTPSkinObjectUser32Control : public CXTPSkinObjectFrame
  323. {
  324. protected:
  325. //-----------------------------------------------------------------------
  326. // Summary:
  327. //     Constructs a CXTPSkinObjectUser32Control object.
  328. //-----------------------------------------------------------------------
  329. CXTPSkinObjectUser32Control();
  330. protected:
  331. //-----------------------------------------------------------------------
  332. // Summary:
  333. //     This method called to determine if scroll bar position was changed
  334. //-----------------------------------------------------------------------
  335. virtual void CheckScrollBarsDraw();
  336. protected:
  337. //{{AFX_CODEJOCK_PRIVATE
  338. DECLARE_MESSAGE_MAP()
  339. // Overrides
  340. //{{AFX_VIRTUAL(CXTPSkinObjectUser32Control)
  341. BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
  342. //}}AFX_VIRTUAL
  343. //{{AFX_MSG(CXTPSkinObjectUser32Control)
  344. afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  345. afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  346. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  347. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  348. afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
  349. afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos);
  350. //}}AFX_MSG
  351. protected:
  352. SCROLLINFO m_si[2];
  353. //}}AFX_CODEJOCK_PRIVATE
  354. };
  355. //===========================================================================
  356. // Summary:
  357. //     CXTPSkinObjectComCtl32Control is a CXTPSkinObjectUser32Control derived class.
  358. //     It is base class for all ComCtl32 defined controls
  359. //===========================================================================
  360. class _XTP_EXT_CLASS CXTPSkinObjectComCtl32Control : public CXTPSkinObjectUser32Control
  361. {
  362. protected:
  363. //-----------------------------------------------------------------------
  364. // Summary:
  365. //     Constructs a CXTPSkinObjectComCtl32Control object.
  366. //-----------------------------------------------------------------------
  367. CXTPSkinObjectComCtl32Control();
  368. protected:
  369. //-----------------------------------------------------------------------
  370. // Summary:
  371. //     This method called to determine if scroll bar position was changed
  372. //-----------------------------------------------------------------------
  373. virtual void CheckScrollBarsDraw();
  374. };
  375. AFX_INLINE BOOL CXTPSkinObjectFrame::IsActive() const {
  376. return m_bActive;
  377. }
  378. AFX_INLINE CRect CXTPSkinObjectFrame::GetBorders() const {
  379. return m_rcBorders;
  380. }
  381. AFX_INLINE XTP_SKINSCROLLBARTRACKINFO* CXTPSkinObjectFrame::GetScrollBarTrackInfo() const {
  382. return m_pSBTrack;
  383. }
  384. AFX_INLINE CXTPSkinObjectFrame::CCaptionButtons* CXTPSkinObjectFrame::GetCaptionButtons() {
  385. return &m_arrButtons;
  386. }
  387. #endif // !defined(__XTPSKINOBJECTFRAME_H__)