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

对话框与窗口

开发平台:

Visual C++

  1. // XTPDrawHelpers.h: interface for the CXTPDrawHelpers class.
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO 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(__XTPDRAWHELPERS_H__)
  22. #define __XTPDRAWHELPERS_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. class CXTPPaintManagerColorGradient;
  28. #ifndef LAYOUT_BITMAPORIENTATIONPRESERVED
  29. #define LAYOUT_BITMAPORIENTATIONPRESERVED 0x00000008
  30. #endif
  31. #ifndef LAYOUT_RTL
  32. #define LAYOUT_RTL 0x00000001
  33. #endif
  34. //===========================================================================
  35. // Summary:
  36. //     CXTPTransparentBitmap is a helper class used to extract the
  37. //     transparent color from a transparent BitMap.  Also, this class
  38. //     is used to convert a transparent BitMap into a transparent icon.
  39. //===========================================================================
  40. class _XTP_EXT_CLASS CXTPTransparentBitmap
  41. {
  42. public:
  43. //-----------------------------------------------------------------------
  44. // Summary:
  45. //     Constructor.  Construct a new CXTPTransparentBitmap from a
  46. //     handle to an existing BitMap.
  47. // Parameters:
  48. //     hBitmap - Handle to an existing BitMap.
  49. //-----------------------------------------------------------------------
  50. CXTPTransparentBitmap(HBITMAP hBitmap);
  51. //-----------------------------------------------------------------------
  52. // Summary:
  53. //     Call this function to get the transparent color of the BitMap.
  54. // Returns:
  55. //     -1 if the BitMap is NULL.
  56. //     Otherwise, a COLORREF that contains the transparent color of the BitMap.
  57. //-----------------------------------------------------------------------
  58. COLORREF GetTransparentColor() const;
  59. //-----------------------------------------------------------------------
  60. // Summary:
  61. //     Call this function to create an icon based on the BitMap.
  62. // Returns:
  63. //     NULL if the BitMap is NULL.
  64. //     NULL if the width or height of the BitMap is 0.
  65. //     Otherwise, a handle to the icon created from the BitMap.
  66. //-----------------------------------------------------------------------
  67. HICON ConvertToIcon() const;
  68. protected:
  69. HBITMAP m_hBitmap;  // A handle to a BtiMap.
  70. };
  71. //===========================================================================
  72. // Summary:
  73. //     CXTPClientCursorPos is a helper class used to retrieve the cursor
  74. //     position in client coordinates.
  75. //===========================================================================
  76. class _XTP_EXT_CLASS CXTPClientCursorPos : public CPoint
  77. {
  78. public:
  79. //-----------------------------------------------------------------------
  80. // Summary:
  81. //     Constructs a CXTPClientCursorPos object used to retrieve the
  82. //     cursor position in client coordinates.
  83. // Parameters:
  84. //     pWnd - Pointer to the window that contains the client area to
  85. //            get the cursor position for.
  86. //-----------------------------------------------------------------------
  87. CXTPClientCursorPos(CWnd* pWnd);
  88. };
  89. //===========================================================================
  90. // Summary:
  91. //     CXTPEmptyRect is a helper class used to instantiate an empty
  92. //     CRect object.
  93. //===========================================================================
  94. class _XTP_EXT_CLASS CXTPEmptyRect : public CRect
  95. {
  96. public:
  97. //-----------------------------------------------------------------------
  98. // Summary:
  99. //     Constructs a CXTPEmptyRect object used to instantiate an
  100. //     empty CRect object.
  101. //-----------------------------------------------------------------------
  102. CXTPEmptyRect();
  103. };
  104. //===========================================================================
  105. // Summary:
  106. //     CXTPEmptySize is a helper class used to instantiate an empty
  107. //     CSize object.
  108. //===========================================================================
  109. class _XTP_EXT_CLASS CXTPEmptySize : public CSize
  110. {
  111. public:
  112. //-----------------------------------------------------------------------
  113. // Summary:
  114. //     Constructs a CXTPEmptySize object used to instantiate an
  115. //     empty CSize object.
  116. //-----------------------------------------------------------------------
  117. CXTPEmptySize();
  118. //-----------------------------------------------------------------------
  119. // Summary:
  120. //     Makes CXTPEmptySize a null size by setting all coordinates to zero.
  121. //-----------------------------------------------------------------------
  122. void SetSizeEmpty();
  123. //-----------------------------------------------------------------------
  124. // Summary:
  125. //      Assigns srcSize to CSize.
  126. // Parameters:
  127. //      srcSize - Refers to a source size. Can be a SIZE or CSize.
  128. //-----------------------------------------------------------------------
  129. const SIZE& operator=(const SIZE& srcSize);
  130. };
  131. //===========================================================================
  132. // Summary:
  133. //     CXTPWindowRect is a helper class used to retrieve the screen
  134. //     size for a specified window.
  135. //===========================================================================
  136. class _XTP_EXT_CLASS CXTPWindowRect : public CRect
  137. {
  138. public:
  139. //-----------------------------------------------------------------------
  140. // Summary:
  141. //     Constructs a CXTPWindowRect object used to retrieve the
  142. //     screen size for the specified window.
  143. // Parameters:
  144. //     hWnd - Handle to the window to retrieve the screen size for.
  145. //     pWnd - Points to the window to retrieve the screen size for.
  146. //-----------------------------------------------------------------------
  147. CXTPWindowRect(HWND hWnd);
  148. CXTPWindowRect(const CWnd* pWnd); // <combine CXTPWindowRect::CXTPWindowRect@HWND>
  149. };
  150. //===========================================================================
  151. // Summary:
  152. //     CXTPClientRect is a helper class used to retrieve the client
  153. //     area for a specified window.
  154. //===========================================================================
  155. class _XTP_EXT_CLASS CXTPClientRect : public CRect
  156. {
  157. public:
  158. //-----------------------------------------------------------------------
  159. // Summary:
  160. //     Constructs a CXTPClientRect object used to retrieve the
  161. //     client area for the specified window.
  162. // Parameters:
  163. //     hWnd - Handle to the window to retrieve the client area for.
  164. //     pWnd - Points to the window to retrieve the client area for.
  165. //-----------------------------------------------------------------------
  166. CXTPClientRect(HWND hWnd);
  167. CXTPClientRect(const CWnd* pWnd); //<combine CXTPClientRect::CXTPClientRect@HWND>
  168. };
  169. //===========================================================================
  170. // Summary:
  171. //     CXTPBufferDC is a helper class used to create a memory device
  172. //     context used to draw to an off-screen bitmap.  When destroyed, the
  173. //     class selects the previous bitmap back into the device context to
  174. //     handle GDI resource cleanup.
  175. //===========================================================================
  176. class _XTP_EXT_CLASS CXTPBufferDC : public CDC
  177. {
  178. public:
  179. //-----------------------------------------------------------------------
  180. // Summary:
  181. //     Constructs a CXTPBufferDC object used to create a memory
  182. //     device context used to draw to an off-screen bitmap.
  183. // Parameters:
  184. //     hDestDC - Handle to the destination device context the memory
  185. //               device is BitBlt to.
  186. //     rcPaint - Size of the area to paint.
  187. //-----------------------------------------------------------------------
  188. CXTPBufferDC(HDC hDestDC, const CRect& rcPaint);
  189. //-----------------------------------------------------------------------
  190. // Summary:
  191. //     Constructs a CXTPBufferDC object used to create a memory
  192. //     device context used to draw to an off-screen bitmap.
  193. // Parameters:
  194. //     paintDC - Handle to the destination device context the memory
  195. //-----------------------------------------------------------------------
  196. CXTPBufferDC(CPaintDC& paintDC);
  197. //-----------------------------------------------------------------------
  198. // Summary:
  199. //     Destroys a CXTPBufferDC object, handles cleanup and de-
  200. //     allocation.
  201. //-----------------------------------------------------------------------
  202. virtual ~CXTPBufferDC();
  203. //-----------------------------------------------------------------------
  204. // Summary:
  205. //     This member function is called to set the valid flag to false
  206. //     so that the off screen device context will not be drawn.
  207. //-----------------------------------------------------------------------
  208. void Discard();
  209. //-----------------------------------------------------------------------
  210. // Summary:
  211. //     Call this method to retrieve a CDC pointer to the destination
  212. //     device context.
  213. //-----------------------------------------------------------------------
  214. CDC* GetDestDC();
  215. protected:
  216. HDC     m_hDestDC;    // Handle to the destination device context.
  217. CBitmap m_bitmap;     // Bitmap in memory device context
  218. CRect   m_rect;       // Size of the area to paint.
  219. HGDIOBJ m_hOldBitmap; // Handle to the previously selected bitmap.
  220. };
  221. //===========================================================================
  222. // Summary:
  223. //     CXTPBufferDCEx is a helper class used to create a memory device
  224. //     context used to draw to an off-screen bitmap.  When destroyed, the
  225. //     class selects the previous bitmap back into the device context to
  226. //     handle GDI resource cleanup.
  227. //===========================================================================
  228. class _XTP_EXT_CLASS CXTPBufferDCEx : public CDC
  229. {
  230. public:
  231. //-----------------------------------------------------------------------
  232. // Summary:
  233. //     Constructs a CXTPBufferDCEx object used to create a memory
  234. //     device context used to draw to an off-screen bitmap.
  235. // Parameters:
  236. //     hDestDC - Handle to the destination device context the memory
  237. //               device is BitBlt to.
  238. //     rcPaint - Size of the area to paint.
  239. //-----------------------------------------------------------------------
  240. CXTPBufferDCEx(HDC hDestDC, const CRect rcPaint);
  241. //-----------------------------------------------------------------------
  242. // Summary:
  243. //     Destroys a CXTPBufferDC object, handles cleanup and de-
  244. //     allocation.
  245. //-----------------------------------------------------------------------
  246. virtual ~CXTPBufferDCEx();
  247. protected:
  248. HDC     m_hDestDC;    // Handle to the destination device context.
  249. HBITMAP m_bitmap;     // Bitmap in memory device context
  250. CRect   m_rect;       // Size of the area to paint.
  251. HGDIOBJ m_hOldBitmap; // Handle to the previously selected bitmap.
  252. };
  253. //===========================================================================
  254. // Summary:
  255. //     CXTPBitmapDC is a helper class used to select a bitmap into the
  256. //     device context specified by hDC.  When destroyed, the class
  257. //     selects the previous bitmap back into the device context to
  258. //     handle GDI resource cleanup.
  259. //===========================================================================
  260. class _XTP_EXT_CLASS CXTPBitmapDC
  261. {
  262. public:
  263. //-----------------------------------------------------------------------
  264. // Summary:
  265. //     Constructs a CXTPBitmapDC object and selects the specified bitmap
  266. //     into the device context specified by pDC.
  267. // Parameters:
  268. //     pDC     - Pointer to a valid device context.
  269. //     pBitmap - Pointer to a CBitmap object to select into the device
  270. //               context.
  271. //     hBitmap - Bitmap handle
  272. //-----------------------------------------------------------------------
  273. CXTPBitmapDC(CDC* pDC, CBitmap* pBitmap);
  274. CXTPBitmapDC(CDC* pDC, HBITMAP hBitmap);  // <combine CXTPBitmapDC::CXTPBitmapDC@CDC*@CBitmap*>
  275. //-----------------------------------------------------------------------
  276. // Summary:
  277. //     Destroys a CXTPBitmapDC object, handles cleanup and de-
  278. //     allocation.
  279. //-----------------------------------------------------------------------
  280. virtual ~CXTPBitmapDC();
  281. //-----------------------------------------------------------------------
  282. // Summary:
  283. //     Call this member function to change the bitmap selected by the
  284. //     device context.
  285. // Parameters:
  286. //     pBitmap - Pointer to a CBitmap object to select into the device
  287. //               context.
  288. //-----------------------------------------------------------------------
  289. void SetBitmap(CBitmap* pBitmap);
  290. protected:
  291. HDC     m_hDC;        // Device context handle.
  292. HGDIOBJ m_hOldBitmap; // Handle to the previously selected bitmap.
  293. };
  294. //===========================================================================
  295. // Summary:
  296. //     CXTPFontDC is a helper class used to select a font into the
  297. //     device context specified by pDC.  When destroyed, the class
  298. //     selects the previous font back into the device context to
  299. //     handle GDI resource cleanup.
  300. //===========================================================================
  301. class _XTP_EXT_CLASS CXTPFontDC
  302. {
  303. public:
  304. //-----------------------------------------------------------------------
  305. // Summary:
  306. //     Constructs a CXTPFontDC object and selects the specified font
  307. //     into the device context specified by pDC.
  308. // Parameters:
  309. //     pDC   - Pointer to a valid device context.
  310. //     pFont - Pointer to a CFont object to select into the device
  311. //             context.
  312. //     clrTextColor - Text color to set in the DC.
  313. //-----------------------------------------------------------------------
  314. CXTPFontDC(CDC* pDC, CFont* pFont = NULL);
  315. CXTPFontDC(CDC* pDC, CFont* pFont, COLORREF clrTextColor); // <combine CXTPFontDC::CXTPFontDC@CDC*@CFont*>
  316. //-----------------------------------------------------------------------
  317. // Summary:
  318. //     Destroys a CXTPFontDC object, handles cleanup and de-
  319. //     allocation.
  320. //-----------------------------------------------------------------------
  321. virtual ~CXTPFontDC();
  322. //-----------------------------------------------------------------------
  323. // Summary:
  324. //     Call this member function to change the font selected by the
  325. //     device context.
  326. // Parameters:
  327. //     pFont - Pointer to a CFont object to select into the device
  328. //             context.
  329. //-----------------------------------------------------------------------
  330. void SetFont(CFont* pFont);
  331. //-----------------------------------------------------------------------
  332. // Summary:
  333. //     Call this member function to change the text color set in the
  334. //     device context.
  335. // Parameters:
  336. //     clrTextColor - Text color to set in the DC.
  337. //-----------------------------------------------------------------------
  338. void SetColor(COLORREF clrTextColor);
  339. //-----------------------------------------------------------------------
  340. // Summary:
  341. //     Call this member function to change the font and color selected
  342. //     by the device context.
  343. // Parameters:
  344. //     pFont - Pointer to a CFont object to select into the device
  345. //             context.
  346. //     clrTextColor - Text color to set in the DC.
  347. //-----------------------------------------------------------------------
  348. void SetFontColor(CFont* pFont, COLORREF clrTextColor);
  349. //-----------------------------------------------------------------------
  350. // Summary:
  351. //     Call this member function to select the initial font back into the
  352. //     device context.
  353. // Remarks:
  354. //     This method is also called from the destructor.
  355. //-----------------------------------------------------------------------
  356. void ReleaseFont();
  357. //-----------------------------------------------------------------------
  358. // Summary:
  359. //     Call this member function to set the initial text color back into the
  360. //     device context.
  361. // Remarks:
  362. //     This method is also called from the destructor.
  363. //-----------------------------------------------------------------------
  364. void ReleaseColor();
  365. protected:
  366. CDC*     m_pDC;             // Stored pointer to a device context.
  367. CFont*   m_pOldFont;        // Stored pointer to an initial font from the device context.
  368. COLORREF m_clrOldTextColor; // Stored an initial text color from the device context.
  369. };
  370. //===========================================================================
  371. // Summary:
  372. //     CXTPPenDC is a helper class used to create a pen using
  373. //     the color specified by crColor.  The pen is then selected
  374. //     into the device context specified by hDC.  When destroyed, the
  375. //     class selects the previous pen back into the device context to
  376. //     handle GDI resource cleanup.
  377. //===========================================================================
  378. class _XTP_EXT_CLASS CXTPPenDC
  379. {
  380. public:
  381. //-----------------------------------------------------------------------
  382. // Summary:
  383. //     Constructs a CXTPPenDC object using an existing CPen object.  The
  384. //     pen is then selected into the device context specified by hDC.
  385. // Parameters:
  386. //     pDC  - Pointer to a valid device context.
  387. //     pPen - Pointer to a CPen object to select into the device
  388. //             context.
  389. //     hDC     - Handle to a valid device context.
  390. //     crColor - RGB value used to create pen.
  391. // Remarks:
  392. //     The crColor version constructs a CXTPPenDC object and creates a pen using
  393. //     the color specified by crColor.  The pen is then selected
  394. //     into the device context specified by hDC.
  395. //-----------------------------------------------------------------------
  396. CXTPPenDC(CDC* pDC, CPen* pPen);
  397. CXTPPenDC(HDC hDC, COLORREF crColor); // <combine CXTPPenDC::CXTPPenDC@CDC*@CPen*>
  398. //-----------------------------------------------------------------------
  399. // Summary:
  400. //     Destroys a CXTPPenDC object, handles cleanup and de-
  401. //     allocation.
  402. //-----------------------------------------------------------------------
  403. virtual ~CXTPPenDC();
  404. //-----------------------------------------------------------------------
  405. // Summary:
  406. //     Call this member function to retrieve or change the color used by the
  407. //     device context pen.
  408. // Parameters:
  409. //     crColor - RGB value to change the pen color to.
  410. // Remarks:
  411. //     The No argument version is used to retrieve the color used by the
  412. //     device context pen.
  413. // Returns:
  414. //     The no argument version returns an RGB value that represents the selected pen color.
  415. //-----------------------------------------------------------------------
  416. COLORREF Color();
  417. void Color(COLORREF crColor); // <combine CXTPPenDC::Color>
  418. protected:
  419. CPen m_pen;     // Pen selected into device context.
  420. HDC  m_hDC;     // Device context handle.
  421. HPEN m_hOldPen; // Handle to the previously selected pen.
  422. };
  423. //===========================================================================
  424. // Summary:
  425. //     CXTPBrushDC is a helper class used to create a  brush using
  426. //     the color specified by crColor.  The brush is then selected
  427. //     into the device context specified by hDC.  When destroyed, the
  428. //     class selects the previous brush back into the device context to
  429. //     handle GDI resource cleanup.
  430. //===========================================================================
  431. class _XTP_EXT_CLASS CXTPBrushDC
  432. {
  433. public:
  434. //-----------------------------------------------------------------------
  435. // Summary:
  436. //     Constructs a CXTPBrushDC object and creates a brush using
  437. //     the color specified by crColor.  The brush is then selected
  438. //     into the device context specified by hDC.
  439. // Parameters:
  440. //     hDC     - Handle to a valid device context.
  441. //     crColor - RGB value used to create brush.
  442. //-----------------------------------------------------------------------
  443. CXTPBrushDC(HDC hDC, COLORREF crColor);
  444. //-----------------------------------------------------------------------
  445. // Summary:
  446. //     Destroys a CXTPBrushDC object, handles cleanup and de-
  447. //     allocation.
  448. //-----------------------------------------------------------------------
  449. virtual ~CXTPBrushDC();
  450. //-----------------------------------------------------------------------
  451. // Summary:
  452. //     Call this member function to change the color used by the
  453. //     device context brush.
  454. // Parameters:
  455. //     crColor - RGB value to change the brush color to.
  456. //-----------------------------------------------------------------------
  457. void Color(COLORREF crColor);
  458. protected:
  459. CBrush m_brush;     // Brush selected into device context.
  460. HDC    m_hDC;       // Device context handle.
  461. HBRUSH m_hOldBrush; // Handle to the previously selected brush.
  462. };
  463. //===========================================================================
  464. // Summary:
  465. //     CXTPCompatibleDC is a helper class used to create a memory device
  466. //     context (DC) compatible with the device specified by pDC.  When
  467. //     destroyed, the class selects the previous bitmap back into the
  468. //     device context to handle GDI resource cleanup.
  469. //===========================================================================
  470. class _XTP_EXT_CLASS CXTPCompatibleDC : public CDC
  471. {
  472. public:
  473. //-----------------------------------------------------------------------
  474. // Summary:
  475. //     Constructs a CXTPCompatibleDC object and creates a memory
  476. //     device context (DC) compatible with the device specified by
  477. //     pDC.  The bitmap specified by pBitmap is then selected into
  478. //     the device context.
  479. // Parameters:
  480. //     pDC     - Points to a valid device context.
  481. //     pBitmap - Points to the previously selected bitmap.
  482. //     hBitmap - Points to the previously selected bitmap.
  483. //-----------------------------------------------------------------------
  484. CXTPCompatibleDC(CDC* pDC, CBitmap* pBitmap);
  485. CXTPCompatibleDC(CDC* pDC, HBITMAP hBitmap); // <combine CXTPCompatibleDC::CXTPCompatibleDC@CDC*@CBitmap*>
  486. //-----------------------------------------------------------------------
  487. // Summary:
  488. //     Destroys a CXTPCompatibleDC object, handles cleanup and de-
  489. //     allocation.
  490. //-----------------------------------------------------------------------
  491. virtual ~CXTPCompatibleDC();
  492. protected:
  493. HBITMAP m_hOldBitmap; // Pointer to the previously selected bitmap.
  494. };
  495. //===========================================================================
  496. // Summary:
  497. //     CXTPSplitterTracker is a stand alone class. It is used
  498. //     to track a splitter rectangle.
  499. //===========================================================================
  500. class _XTP_EXT_CLASS CXTPSplitterTracker
  501. {
  502. public:
  503. //-----------------------------------------------------------------------
  504. // Summary:
  505. //     Constructs a CXTPSplitterTracker object.
  506. // Parameters:
  507. //     bSolid - TRUE to use solid tracker; FALSE for HalftoneBrush.
  508. //-----------------------------------------------------------------------
  509. CXTPSplitterTracker(BOOL bSolid = FALSE);
  510. public:
  511. //-----------------------------------------------------------------------
  512. // Summary:
  513. //     This method is called to track size of the splitter.
  514. // Parameters:
  515. //     pTrackWnd - Pointer to a CWnd object.
  516. //     rcAvail - Available rectangle of tracking.
  517. //     rectTracker - Current rectangle of tracking.
  518. //     point - Starting point.
  519. //     bHoriz - TRUE to track horizontally.
  520. // Returns:
  521. //     TRUE if successful; otherwise returns FALSE
  522. //-----------------------------------------------------------------------
  523. BOOL Track(CWnd* pTrackWnd, CRect rcAvail, CRect& rectTracker, CPoint point, BOOL bHoriz);
  524. //-----------------------------------------------------------------------
  525. // Summary:
  526. //     Controls the accumulation of bounding-rectangle information for the specified device context.
  527. // Parameters:
  528. //     rcBoundRect - A CRect object that specifies the boundaries of the bounding rectangle.
  529. //-----------------------------------------------------------------------
  530. void SetBoundRect(CRect rcBoundRect);
  531. private:
  532. //-----------------------------------------------------------------------
  533. // Summary:
  534. //     This function is called by the framework during the resizing of splitter windows.
  535. //     This function inverts the contents of the Splitter Tracker rectangle.
  536. //     Inversion is a logical NOT operation and flips the bits of each pixel.
  537. // Parameters:
  538. //     rc - A CRect object that specifies the XY position of the Splitter Tracker.
  539. //-----------------------------------------------------------------------
  540. void OnInvertTracker(CRect rc);
  541. private:
  542. CDC* m_pDC;
  543. BOOL m_bSolid;
  544. CRect m_rcBoundRect;
  545. };
  546. //===========================================================================
  547. // Summary:
  548. //     The class CXTPMouseMonitor is a helper class that is used to
  549. //     monitor mouse messages for in-place controls.  This class is used
  550. //     in XTPPropertyGridInPlaceList and XTPReportInplaceControls.
  551. //===========================================================================
  552. class _XTP_EXT_CLASS CXTPMouseMonitor
  553. {
  554. public:
  555. //-----------------------------------------------------------------------
  556. // Summary:
  557. //     Call this function to set up a hook to monitor mouse messages.
  558. // Parameters:
  559. //     pWndMonitor - A pointer to a CWnd object.  Used to determine
  560. //                   which monitor currently contains the mouse cursor.
  561. //-----------------------------------------------------------------------
  562. static void AFX_CDECL SetupHook(CWnd* pWndMonitor);
  563. //-----------------------------------------------------------------------
  564. // Summary:
  565. //     Call this function to determine if mouse messages was hooked.
  566. //-----------------------------------------------------------------------
  567. static BOOL AFX_CDECL IsMouseHooked();
  568. protected:
  569. //-----------------------------------------------------------------------
  570. // Summary:
  571. //     The MouseProc hook procedure is an application-defined or
  572. //     library-defined callback function used with the SetWindowsHookEx
  573. //     function. The system calls this function whenever an application
  574. //     calls the GetMessage or PeekMessage function and there is a mouse
  575. //     message to be processed.
  576. // Parameters:
  577. //     nCode  - Specifies a code the hook procedure uses to determine
  578. //          how to process the message. This parameter can be one of the
  579. //          following values: HC_ACTION and HC_NOREMOVE.
  580. //          HC_ACTION   - The wParam and lParam parameters contain information about a mouse message.
  581. //          HC_NOREMOVE - The wParam and lParam parameters contain information about a mouse message,
  582. //                        and the mouse message has not been removed from the message queue. (An
  583. //                        application called the PeekMessage function, specifying the PM_NOREMOVE flag.)
  584. //     wParam - Specifies the identifier of the mouse message.
  585. //     lParam - Pointer to a MOUSEHOOKSTRUCT structure.
  586. // Returns:
  587. //     If nCode is less than zero, the hook procedure must return the value returned by CallNextHookEx.
  588. //     If nCode is greater than or equal to zero, and the hook procedure did not process the message,
  589. //     it is highly recommended that you call CallNextHookEx and return the value it returns; otherwise,
  590. //     other applications that have installed WH_MOUSE hooks will not receive hook notifications and may
  591. //     behave incorrectly as a result. If the hook procedure processed the message, it may return a nonzero
  592. //     value to prevent the system from passing the message to the target window procedure.
  593. //-----------------------------------------------------------------------
  594. static LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam);
  595. private:
  596. static HHOOK m_hHookMouse;      // A handle to a hook.
  597. static CWnd* m_pWndMonitor;     // A pointer to the in-place control.
  598. };
  599. //===========================================================================
  600. // Summary:
  601. //     CXTPDrawHelpers is a helper class used to perform specialized
  602. //     drawing tasks.  You can use this class to perform such tasks as
  603. //     gradient fills and blending colors.
  604. //===========================================================================
  605. class _XTP_EXT_CLASS CXTPDrawHelpers
  606. {
  607. public:
  608. typedef BOOL (__stdcall* PFNGRADIENTFILL)(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG); // Function pointer used to access the Windows API GradientFill function.
  609. typedef BOOL (__stdcall* PFNALPHABLEND) (HDC, int, int, int, int, HDC, int, int, int, int, BLENDFUNCTION); // AlphaBlend function declaration
  610. typedef BOOL (WINAPI* PFNTRANSPARENTBLT)(HDC, int, int, int, int, HDC, int, int, int, int, UINT);
  611. public:
  612. //-----------------------------------------------------------------------
  613. // Summary:
  614. //     Constructs a CXTPDrawHelpers object.
  615. //-----------------------------------------------------------------------
  616. CXTPDrawHelpers();
  617. //-----------------------------------------------------------------------
  618. // Summary:
  619. //     Destroys a CXCSplitPath object, handles cleanup and de-
  620. //     allocation.
  621. //-----------------------------------------------------------------------
  622. virtual ~CXTPDrawHelpers();
  623. public:
  624. //-----------------------------------------------------------------------
  625. // Summary:
  626. //     Call this member function to perform a gradient fill using
  627. //     the specified COLORREF values crFrom and crTo.
  628. // Parameters:
  629. //     pDC         - Points to the device context
  630. //     lpRect      - Size of area to fill
  631. //     crFrom      - RGB value to start from
  632. //     crTo        - RGB value to fill to
  633. //     grc         - CXTPPaintManagerColorGradient struct containing start from and
  634. //                   fill to RGB color values.
  635. //     bHorz       - TRUE if fill is horizontal.
  636. //     lpRectClip  - Pointer to a RECT structure that contains a clipping rectangle.
  637. //                   This parameter is optional and may be set to NULL.
  638. //     hdc         - Handle to a device context.
  639. //     pVertex     - Pointer to an array of TRIVERTEX structures that
  640. //                   each define a triangle vertex.
  641. //     dwNumVertex - The number of vertices.
  642. //     pMesh       - Array of GRADIENT_TRIANGLE structures in triangle
  643. //                   mode, or an array of GRADIENT_RECT structures in
  644. //                   rectangle mode.
  645. //     dwNumMesh   - The number of elements (triangles or rectangles)
  646. //                   in pMesh.
  647. //     dwMode      - Specifies gradient fill mode. For a list of possible
  648. //                   values, see GradientFill in the Platform SDK.
  649. // Remarks:
  650. //     Call this member function to fill rectangle and triangle structures
  651. //     with color that smoothly fades from one side to the other.
  652. // Returns:
  653. //     The HDC version TRUE if successful; otherwise FALSE.
  654. //-----------------------------------------------------------------------
  655. void GradientFill(CDC* pDC, LPCRECT lpRect, COLORREF crFrom, COLORREF crTo, BOOL bHorz);
  656. void GradientFill(CDC* pDC, LPCRECT lpRect, COLORREF crFrom, COLORREF crTo, BOOL bHorz, LPCRECT lpRectClip); // <combine CXTPDrawHelpers::GradientFill@CDC*@LPCRECT@COLORREF@COLORREF@BOOL>
  657. void GradientFill(CDC* pDC, LPCRECT lpRect, const CXTPPaintManagerColorGradient& grc, BOOL bHorz, LPCRECT lpRectClip = NULL); // <combine CXTPDrawHelpers::GradientFill@CDC*@LPCRECT@COLORREF@COLORREF@BOOL>
  658. BOOL GradientFill(HDC hdc, PTRIVERTEX pVertex, ULONG dwNumVertex, PVOID pMesh, ULONG dwNumMesh, ULONG dwMode); // <combine CXTPDrawHelpers::GradientFill@CDC*@LPCRECT@COLORREF@COLORREF@BOOL>
  659. //-----------------------------------------------------------------------
  660. // Summary:
  661. //     Call this member to exclude the pixels for each corner of the
  662. //     area specified by rc.
  663. // Parameters:
  664. //     pDC - Points to the device context
  665. //     rc  - Area to exclude corners from
  666. //-----------------------------------------------------------------------
  667. void ExcludeCorners(CDC* pDC, CRect rc);
  668. //-----------------------------------------------------------------------
  669. // Summary:
  670. //     This member function will search a string, strip off the mnemonic
  671. //     '&', and reformat the string.
  672. // Parameters:
  673. //     strClear - Text needed to strip.
  674. //     lpszClear - Text needed to strip.
  675. //-----------------------------------------------------------------------
  676. static void AFX_CDECL StripMnemonics(CString& strClear);
  677. static void AFX_CDECL StripMnemonics(LPTSTR lpszClear); // <combine CXTPDrawHelpers::StripMnemonics@CString&>
  678. //-----------------------------------------------------------------------
  679. // Summary:
  680. //     Call this member function to blur the color value for the
  681. //     points specified by pts
  682. // Parameters:
  683. //     pDC    - Points to the device context
  684. //     pts    - Array of points to blur
  685. //     nCount - Number of points in array.
  686. //-----------------------------------------------------------------------
  687. void BlurPoints(CDC* pDC, LPPOINT pts, int nCount);
  688. //-----------------------------------------------------------------------
  689. // Summary:
  690. //     Call this member function to blend the colors specified by
  691. //     crA and crB.
  692. // Parameters:
  693. //     crA      - RGB value to blend
  694. //     crB      - RGB value to blend
  695. //     fAmountA - The amount that crA saturates crB.
  696. // Returns:
  697. //     An RGB value that represents the blended color.
  698. //-----------------------------------------------------------------------
  699. static COLORREF AFX_CDECL BlendColors(COLORREF crA, COLORREF crB, double fAmountA);
  700. //-----------------------------------------------------------------------
  701. // Summary:
  702. //     Call this member function to get dark color from specified by lColor
  703. // Parameters:
  704. //      lScale - Scale value
  705. //      lColor - RGB value to get
  706. // See Also: LightenColor
  707. //-----------------------------------------------------------------------
  708. static COLORREF AFX_CDECL DarkenColor(long lScale, COLORREF lColor);
  709. //-----------------------------------------------------------------------
  710. // Summary:
  711. //     Call this member function to get light color from specified by lColor
  712. // Parameters:
  713. //      lScale - Scale value
  714. //      lColor - RGB value to get
  715. // See Also: DarkenColor
  716. //-----------------------------------------------------------------------
  717. static COLORREF AFX_CDECL LightenColor(long lScale, COLORREF lColor);
  718. //-----------------------------------------------------------------------
  719. // Summary:
  720. //     Call this member function to convert a color from RGB to HSL color model.
  721. // Parameters:
  722. //      rgb - RGB color to convert
  723. // Returns:
  724. //     An HSL representation of the specified color.
  725. // See Also: HSLtoRGB
  726. //-----------------------------------------------------------------------
  727. static COLORREF AFX_CDECL RGBtoHSL(COLORREF rgb);
  728. static void RGBtoHSL(COLORREF clr, double& h, double& s, double& l);
  729. //-----------------------------------------------------------------------
  730. // Summary:
  731. //     Call this member function to convert a color from HSL to RGB color model.
  732. // Parameters:
  733. //      hsl - HSL color to convert
  734. // Returns:
  735. //     An RGB representation of the specified color.
  736. // See Also: HueToRGB, RGBtoHSL
  737. //-----------------------------------------------------------------------
  738. static COLORREF AFX_CDECL HSLtoRGB(COLORREF hsl);
  739. static COLORREF AFX_CDECL HSLtoRGB(double h, double s, double l);
  740. //-----------------------------------------------------------------------
  741. // Summary:
  742. //     Call this member function to determine if the specified font
  743. //     exists.
  744. // Parameters:
  745. //     lpszFaceName - A NULL terminated string that represents the
  746. //                   font face name.
  747. // Returns:
  748. //     TRUE if the font was found, otherwise FALSE.
  749. //-----------------------------------------------------------------------
  750. static BOOL AFX_CDECL FontExists(LPCTSTR lpszFaceName);
  751. //-----------------------------------------------------------------------
  752. // Summary:
  753. //     Retrieves DEFAULT_GUI_FONT font name.
  754. // Returns:
  755. //     Face name of DEFAULT_GUI_FONT font.
  756. //-----------------------------------------------------------------------
  757. static CString AFX_CDECL GetDefaultFontName();
  758. static CPoint AFX_CDECL Dlu2Pix(int dluX, int dluY);
  759. //-----------------------------------------------------------------------
  760. // Summary:
  761. //     Retrieves vertical font name
  762. // Parameters:
  763. //     bUseOfficeFont - TRUE to use "Tahoma" font if exists.
  764. // Returns:
  765. //     Face name of vertical font.
  766. //-----------------------------------------------------------------------
  767. static CString AFX_CDECL GetVerticalFontName(BOOL bUseOfficeFont);
  768. //-----------------------------------------------------------------------
  769. // Summary:
  770. //     Call this member function to draw a triangle onto the
  771. //     specified device context.
  772. // Parameters:
  773. //     pDC - Points to the device context
  774. //     pt0 - First point of the triangle
  775. //     pt1 - Second point of the triangle
  776. //     pt2 - Third point of the triangle
  777. //     clr - An RGB value that represents the fill color.
  778. //-----------------------------------------------------------------------
  779. static void AFX_CDECL Triangle(CDC* pDC, CPoint pt0, CPoint pt1, CPoint pt2, COLORREF clr);
  780. static void AFX_CDECL Triangle(CDC* pDC, CPoint pt0, CPoint pt1, CPoint pt2); // <combine CXTPDrawHelpers::Triangle@CDC*@CPoint@CPoint@CPoint@COLORREF>
  781. //-----------------------------------------------------------------------
  782. // Summary:
  783. //     Call this member function to draw a vertical or horizontal line using
  784. //     the specified device context.
  785. // Parameters:
  786. //     pDC     - Points to the device context
  787. //     xPos    - Specifies the logical x-coordinate of the start position.
  788. //     yPos    - Specifies the logical y-coordinate of the start position.
  789. //     nLength - Specifies the length of the line to draw, for vertical lines set this value to 0.
  790. //     nHeight - Specifies the height of the line to draw, for horizontal lines set this value to 0.
  791. //     crLine  - Specifies the RGB color value used to draw the line.
  792. // Returns:
  793. //     TRUE if the specified device context is valid, otherwise FALSE.
  794. //-----------------------------------------------------------------------
  795. static BOOL AFX_CDECL DrawLine(CDC* pDC, int xPos, int yPos, int nLength, int nHeight, COLORREF crLine);
  796. //-----------------------------------------------------------------------
  797. // Summary:
  798. //     Call this member function to determine if the system display
  799. //     is set to low resolution.
  800. // Parameters:
  801. //     hDC - Handle to a device context, if NULL the desktop window
  802. //           device context is used.
  803. // Returns:
  804. //     TRUE if the system display is set to low resolution,
  805. //     otherwise FALSE.
  806. //-----------------------------------------------------------------------
  807. static BOOL AFX_CDECL IsLowResolution(HDC hDC = 0);
  808. //-----------------------------------------------------------------------
  809. // Summary:
  810. //     Determines if GradientFill from msimg32.dll available.
  811. // Returns:
  812. //     TRUE if GradientFill can be used
  813. //-----------------------------------------------------------------------
  814. BOOL IsFastFillAvailable() const;
  815. //-----------------------------------------------------------------------
  816. // Summary:
  817. //     Determines if top level parent is active for window handle
  818. // Parameters:
  819. //     hWnd        - Window handle to test
  820. // Returns:
  821. //     TRUE if top level parent is active.
  822. //-----------------------------------------------------------------------
  823. static BOOL AFX_CDECL IsTopParentActive(HWND hWnd);
  824. //-----------------------------------------------------------------------
  825. // Summary:
  826. //     Call this member function to switch Left and Right keys if window
  827. //     in Right To Left layout
  828. // Parameters:
  829. //     pWnd        - Window to test
  830. //     nChar       - Virtual key, passed to OnKeyDown member.
  831. //-----------------------------------------------------------------------
  832. static void AFX_CDECL KeyToLayout(CWnd* pWnd, UINT& nChar);
  833. //-----------------------------------------------------------------------
  834. // Summary:
  835. //    Converts the screen coordinates of a given point on the display to window coordinates.
  836. // Parameters:
  837. //     pWnd - window whose area is used for the conversion
  838. //     lpPoint - Points to a CPoint object or POINT structure that contains the screen coordinates to be converted.
  839. //-----------------------------------------------------------------------
  840. static void AFX_CDECL ScreenToWindow(CWnd* pWnd, LPPOINT lpPoint);
  841. //-----------------------------------------------------------------------
  842. // Summary:
  843. //     Determines if layout of a device context right to left.
  844. // Parameters:
  845. //     pDC - Device context to test
  846. //     hDC - Device context to test
  847. //-----------------------------------------------------------------------
  848. static BOOL AFX_CDECL IsContextRTL(CDC* pDC);
  849. static BOOL AFX_CDECL IsContextRTL(HDC hDC); // <combine CXTPDrawHelpers::IsContextRTL@CDC*>
  850. //-----------------------------------------------------------------------
  851. // Summary:
  852. //     Cal this method to set right to left layout for device context
  853. // Parameters:
  854. //     pDC - Device context to set layout
  855. //     hDC - Device context to set layout
  856. //     bLayoutRTL - TRUE to set right to left layout
  857. //-----------------------------------------------------------------------
  858. static void AFX_CDECL SetContextRTL(CDC* pDC, BOOL bLayoutRTL);
  859. static void AFX_CDECL SetContextRTL(HDC hDC, BOOL bLayoutRTL); // <combine CXTPDrawHelpers::SetContextRTL@CDC*@BOOL>
  860. //-----------------------------------------------------------------------
  861. // Summary:
  862. //     Register class helper.
  863. // Parameters:
  864. //     hInstance - Handle to the instance that contains the window procedure for the class.
  865. //     lpszClassName - Pointer to a null-terminated string or is an atom
  866. //     style - Specifies the class style(s).
  867. //     hIcon - Handle to the class icon
  868. //-----------------------------------------------------------------------
  869. static BOOL AFX_CDECL RegisterWndClass(HINSTANCE hInstance, LPCTSTR lpszClassName, UINT style, HICON hIcon = 0);
  870. static void AFX_CDECL GetWindowCaption(HWND hWnd, CString& strWindowText);
  871. //{{AFX_CODEJOCK_PRIVATE
  872. _XTP_DEPRECATE("This function or variable is no longer available. Please use 'XTPSystemVersion()->GetComCtlVersion' instead")
  873. static DWORD GetComCtlVersion();
  874. _XTP_DEPRECATE("This function or variable is no longer available. Please use 'XTPMultiMonitor()->GetWorkArea' instead")
  875. static CRect GetWorkArea();
  876. _XTP_DEPRECATE("This function or variable is no longer available. Please use 'XTPMultiMonitor()->GetWorkArea' instead")
  877. static CRect GetWorkArea(const POINT& point);
  878. _XTP_DEPRECATE("This function or variable is no longer available. Please use 'XTPMultiMonitor()->GetWorkArea' instead")
  879. static CRect GetWorkArea(LPCRECT rect);
  880. _XTP_DEPRECATE("This function or variable is no longer available. Please use 'XTPMultiMonitor()->GetWorkArea' instead")
  881. static CRect GetWorkArea(const CWnd* pWnd);
  882. _XTP_DEPRECATE("This function or variable is no longer available. Please use 'XTPMultiMonitor()->GetScreenArea' instead")
  883. static CRect GetScreenArea(const CWnd* pWnd);
  884. //}}AFX_CODEJOCK_PRIVATE
  885. private:
  886. //-----------------------------------------------------------------------
  887. // Summary:
  888. //     Auxiliary function for color convertion from HSL to RGB color model.
  889. // Parameters:
  890. //     m1 - Input value.
  891. //     m2 - Input value.
  892. //     h - Input value.
  893. // Returns:
  894. //     A converted value
  895. // See Also: RGBtoHSL
  896. //-----------------------------------------------------------------------
  897. static int AFX_CDECL HueToRGB(int m1, int m2, int h);
  898. static double AFX_CDECL HueToRGB(double temp1, double temp2, double temp3);
  899. public:
  900. PFNALPHABLEND m_pfnAlphaBlend;
  901. PFNTRANSPARENTBLT m_pfnTransparentBlt;
  902. PFNGRADIENTFILL m_pfnFastGradientFill;
  903. private:
  904. HMODULE m_hMsImgDll;  // Handle to MsImg32.dll.
  905. // private members used for draw routines.
  906. void GradientFillFast(CDC* pDC, LPCRECT lpRect, COLORREF crFrom, COLORREF crTo, BOOL bHorz);
  907. void GradientFillSlow(CDC* pDC, LPCRECT lpRect, COLORREF crFrom, COLORREF crTo, BOOL bHorz);
  908. // singleton
  909. friend _XTP_EXT_CLASS CXTPDrawHelpers* AFX_CDECL XTPDrawHelpers();   // Used to access the CXTPDrawHelpers object.
  910. };
  911. //===========================================================================
  912. // Summary:
  913. //     CXTPNoFlickerWnd is a TBase derived general purpose template
  914. //     helper class. CXTPNoFlickerWnd class is used for drawing flicker
  915. //     free controls. To use, instantiate the template using any CWnd
  916. //     derived class. For example, to create a tab control that is
  917. //     flicker free you would use the following declaration:
  918. // Example:
  919. //      The following example demonstrates how to use CXTPNoFlickerWnd to create a flicker free object.
  920. // <code>
  921. // CXTPNoFlickerWnd <CTabCtrl> m_tabCtrl;
  922. // </code>
  923. //===========================================================================
  924. template <class TBase>
  925. class CXTPNoFlickerWnd : public TBase
  926. {
  927. public:
  928. //-----------------------------------------------------------------------
  929. // Summary:
  930. //     Constructs a CXTPNoFlickerWnd object.
  931. //-----------------------------------------------------------------------
  932. CXTPNoFlickerWnd()
  933. {
  934. m_crBack = ::GetSysColor(COLOR_3DFACE);
  935. }
  936. public:
  937. //-----------------------------------------------------------------------
  938. // Summary:
  939. //     This member function is called to set the background fill
  940. //     color for the flicker free control.
  941. // Parameters:
  942. //     crBack - An RGB value.
  943. //-----------------------------------------------------------------------
  944. void SetBackColor(COLORREF crBack)
  945. {
  946. m_crBack = crBack;
  947. }
  948. //-----------------------------------------------------------------------
  949. // Summary:
  950. //     This member function is called to retrieve the background
  951. //     fill color for the flicker free control.
  952. // Returns:
  953. //     An RGB value.
  954. //-----------------------------------------------------------------------
  955. COLORREF GetBackColor()
  956. {
  957. return m_crBack;
  958. }
  959. //-----------------------------------------------------------------------
  960. // Summary:
  961. //     This method provides a CE procedure (WindowProc) for a CWnd
  962. //     object.  It dispatches messages through the window message
  963. //     map. The return value depends on the message.
  964. // Parameters:
  965. //     message - Specifies the Windows message to be processed.
  966. //     wParam  - Provides additional information used in processing
  967. //               the message. The parameter value depends on the
  968. //               message.
  969. //     lParam  - Provides additional information used in processing
  970. //               the message. The parameter value depends on the
  971. //               message.
  972. // Returns:
  973. //     An LRESULT object.
  974. //-----------------------------------------------------------------------
  975. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
  976. {
  977. switch (message)
  978. {
  979. case WM_PAINT:
  980. {
  981. CPaintDC dc(this);
  982. // Get the client rect, and paint to a memory device context.
  983. // This will help reduce screen flicker.  Pass the memory
  984. // device context to the default window procedure to do
  985. // default painting.
  986. CRect rc;
  987. GetClientRect(&rc);
  988. CXTPBufferDC memDC(dc.GetSafeHdc(), rc);
  989. memDC.FillSolidRect(rc, m_crBack);
  990. return TBase::DefWindowProc(WM_PAINT,
  991. (WPARAM)memDC.m_hDC, 0);
  992. }
  993. case WM_ERASEBKGND:
  994. {
  995. return TRUE;
  996. }
  997. }
  998. return TBase::WindowProc(message, wParam, lParam);
  999. }
  1000. protected:
  1001. COLORREF m_crBack; // An RGB value.
  1002. };
  1003. //===========================================================================
  1004. // Summary:
  1005. //     CXTPOfficeBorder is a template class used for windows that require
  1006. //     a thin border. This class can be used as the base class for any
  1007. //     CWnd derived class to display an Office style non-client border.
  1008. // Parameters:
  1009. //     TBase     - Object class name.
  1010. //     bCalcSize - 'true' to remove non-client edge and adjust borders to
  1011. //                  1 pixel, 'false' to only draw 1 pixel border.
  1012. // Example:
  1013. //     Sample code demonstrates how to use the CXTPOfficeBorder template
  1014. //     class with your base class.
  1015. // <code>
  1016. // class CTreeCtrlEx : public CXTPOfficeBorder<CXTTreeCtrl>
  1017. // {
  1018. //     ...
  1019. // };
  1020. // </code>
  1021. //     Sample code demonstrates how to use the CXTPOfficeBorder template
  1022. //     class with a member variable.
  1023. // <code>
  1024. // class CMyView : public CView
  1025. // {
  1026. //     ...
  1027. // protected:
  1028. //     CXTPOfficeBorder<CEdit,false> m_edit;
  1029. // };
  1030. // </code>
  1031. //========================================================================
  1032. template <class TBase, bool bCalcSize = true>
  1033. class CXTPOfficeBorder : public TBase
  1034. {
  1035. protected:
  1036. //-----------------------------------------------------------------------
  1037. // Summary:
  1038. //     Call this function to return the color used for drawing non-client
  1039. //     Office style borders for the active current theme.
  1040. // Parameters:
  1041. //     bTopLeft - 'true' to return the top-left border color, 'false' to
  1042. //                return the bottom-right border color.
  1043. // Returns:
  1044. //     An RGB color value that represents the non-client border color.
  1045. //-----------------------------------------------------------------------
  1046. virtual COLORREF GetBorderColor(bool bTopLeft) const
  1047. {
  1048. //{{AFX_CODEJOCK_PRIVATE
  1049. #if defined(_XTP_INCLUDE_COMMANDBARS)
  1050. switch (XTPPaintManager()->BaseTheme())
  1051. {
  1052. case xtpThemeOfficeXP:
  1053. case xtpThemeOffice2000:  return GetXtremeColor(bTopLeft? COLOR_3DSHADOW: COLOR_3DHIGHLIGHT);
  1054. case xtpThemeOffice2003:  return GetXtremeColor(XPCOLOR_FRAME);
  1055. case xtpThemeNativeWinXP: return GetXtremeColor(XPCOLOR_STATICFRAME);
  1056. }
  1057. #elif defined(_XTP_INCLUDE_CONTROLS)
  1058. switch (XTThemeManager()->GetTheme())
  1059. {
  1060. case xtThemeOfficeXP:
  1061. case xtThemeDefault:     return GetXtremeColor(bTopLeft? COLOR_3DSHADOW: COLOR_3DHIGHLIGHT);
  1062. case xtThemeOffice2003:  return GetXtremeColor(XPCOLOR_FRAME);
  1063. default:                 return GetXtremeColor(XPCOLOR_STATICFRAME);
  1064. }
  1065. #endif
  1066. //}}AFX_CODEJOCK_PRIVATE
  1067. return GetXtremeColor(XPCOLOR_3DSHADOW);
  1068. }
  1069. //{{AFX_CODEJOCK_PRIVATE
  1070. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
  1071. {
  1072. switch (message)
  1073. {
  1074. case WM_NCPAINT:
  1075. {
  1076. TBase::WindowProc(message, wParam, lParam);
  1077. CWindowDC dc(this);
  1078. // convert to client coordinates
  1079. CXTPWindowRect rWindow(this);
  1080. ScreenToClient(rWindow);
  1081. int nBorderWidth = -rWindow.top;
  1082. rWindow.OffsetRect(-rWindow.left, -rWindow.top);
  1083. // draw 1px. border.
  1084. dc.Draw3dRect(&rWindow, GetBorderColor(true), GetBorderColor(false));
  1085. if (nBorderWidth > 1)
  1086. {
  1087. rWindow.DeflateRect(1,1);
  1088. dc.Draw3dRect(&rWindow,
  1089. XTPColorManager()->GetColor(COLOR_WINDOW),
  1090. XTPColorManager()->GetColor(COLOR_WINDOW));
  1091. }
  1092. return 0; // Handled.
  1093. }
  1094. case WM_CREATE:
  1095. {
  1096. if (TBase::WindowProc(message, wParam, lParam) == -1)
  1097. return -1;
  1098. if (bCalcSize)
  1099. {
  1100. // remove 3D borders.
  1101. long lStyle = ::GetWindowLong(m_hWnd, GWL_STYLE) &~WS_BORDER;
  1102. ::SetWindowLong(m_hWnd, GWL_STYLE, lStyle);
  1103. long lExStyle = ::GetWindowLong(m_hWnd, GWL_EXSTYLE) &~WS_EX_CLIENTEDGE;
  1104. ::SetWindowLong(m_hWnd, GWL_EXSTYLE, lExStyle);
  1105. // force non-client area to be recalculated.
  1106. ::SetWindowPos(m_hWnd, NULL, NULL, NULL, NULL, NULL,
  1107. SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE|SWP_FRAMECHANGED);
  1108. }
  1109. return 0; // Handled.
  1110. }
  1111. break;
  1112. case WM_NCCALCSIZE:
  1113. {
  1114. LRESULT lResult = TBase::WindowProc(message, wParam, lParam);
  1115. if (bCalcSize)
  1116. {
  1117. NCCALCSIZE_PARAMS FAR* lpncsp = (NCCALCSIZE_PARAMS FAR*)lParam;
  1118. // adjust non-client area for border space
  1119. lpncsp->rgrc[0].left   += 1;
  1120. lpncsp->rgrc[0].top    += 1;
  1121. lpncsp->rgrc[0].right  -= 1;
  1122. lpncsp->rgrc[0].bottom -= 1;
  1123. }
  1124. return lResult;
  1125. }
  1126. }
  1127. return TBase::WindowProc(message, wParam, lParam);
  1128. }
  1129. //}}AFX_CODEJOCK_PRIVATE
  1130. };
  1131. //---------------------------------------------------------------------------
  1132. // Summary:
  1133. //     Call this function to access CXTPDrawHelpers members.
  1134. //     Since this class is designed as a single instance object you can
  1135. //     only access its members through this method. You <b>cannot</b>
  1136. //     directly instantiate an object of type CXTPDrawHelpers.
  1137. // Example:
  1138. //     <code>BOOL bLowRes = XTPDrawHelpers()->IsLowResolution();</code>
  1139. //---------------------------------------------------------------------------
  1140. _XTP_EXT_CLASS CXTPDrawHelpers* AFX_CDECL XTPDrawHelpers();
  1141. //---------------------------------------------------------------------------
  1142. // Summary:
  1143. //    Prepare a printer device context for printing and calculates
  1144. //    DEVMODE and DEVNAMES values.
  1145. // Parameters:
  1146. //    ref_hDevMode  - Reference to a handle of a movable global memory object
  1147. //                    that contains a DEVMODE structure.
  1148. //    ref_hDevNames - Reference to a handle of a movable global memory object
  1149. //                    that contains a DEVNAMES structure.
  1150. // Returns:
  1151. //    Nonzero if successful; otherwise 0.
  1152. // See Also:
  1153. //    CWinApp::GetPrinterDeviceDefaults, DEVMODE, DEVNAMES
  1154. //---------------------------------------------------------------------------
  1155. _XTP_EXT_CLASS BOOL AFX_CDECL XTPGetPrinterDeviceDefaults(HGLOBAL& ref_hDevMode, HGLOBAL& ref_hDevNames);
  1156. //===========================================================================
  1157. // Summary:
  1158. //      Helper class which provide currently selected printer information.
  1159. //===========================================================================
  1160. class _XTP_EXT_CLASS CXTPPrinterInfo : public CXTPCmdTarget
  1161. {
  1162. DECLARE_DYNAMIC(CXTPPrinterInfo)
  1163. public:
  1164. //-------------------------------------------------------------------------
  1165. // Summary: Default object constructor.
  1166. // See Also: ~CXTPPrinterInfo
  1167. //-------------------------------------------------------------------------
  1168. CXTPPrinterInfo();
  1169. //-------------------------------------------------------------------------
  1170. // Summary: Default object destructor.
  1171. // See Also: CXTPPrinterInfo
  1172. //-------------------------------------------------------------------------
  1173. virtual ~CXTPPrinterInfo();
  1174. //-------------------------------------------------------------------------
  1175. // Summary:
  1176. //      This enum defines some printer properties IDs.
  1177. // See Also: GetName
  1178. //-------------------------------------------------------------------------
  1179. enum XTPEnumDeviceName
  1180. {
  1181. xtpDevName_Driver = 0,  // Define Driver name property.
  1182. xtpDevName_Device = 1,  // Define Device name property.
  1183. xtpDevName_Port   = 2   // Define Port name property.
  1184. };
  1185. //-----------------------------------------------------------------------
  1186. // Summary:
  1187. //      Call this member function to retrieve currently selected printer
  1188. //      Driver name, Device name or Port name.
  1189. // Parameters:
  1190. //      eNameID - [in] A value from XTPEnumDeviceName enum which specify
  1191. //                property.
  1192. // Returns:
  1193. //      A string with requested name.
  1194. // See Also: XTPEnumDeviceName
  1195. //-----------------------------------------------------------------------
  1196. CString GetName(XTPEnumDeviceName eNameID);
  1197. protected:
  1198. //-----------------------------------------------------------------------
  1199. // Summary:
  1200. //      This member function returns name offset by name ID.
  1201. // Parameters:
  1202. //      pDevNames - [in] A pointer to DEVNAMES structure.
  1203. //      eNameID   - [in] Name ID.
  1204. // Returns:
  1205. //      name Offset in chars.
  1206. // See Also: XTPEnumDeviceName, DEVNAMES
  1207. //-----------------------------------------------------------------------
  1208. WORD _GetNameOffset(LPDEVNAMES pDevNames, XTPEnumDeviceName eNameID);
  1209. };
  1210. //===========================================================================
  1211. // Summary:
  1212. //      This class used to define printed page header or footer.
  1213. //      Also some calculation and drawing functionality are provided.
  1214. //      Used as member of printing options.
  1215. // See Also:
  1216. //      CXTPPrintOptions
  1217. //===========================================================================
  1218. class _XTP_EXT_CLASS CXTPPrintPageHeaderFooter : public CXTPCmdTarget
  1219. {
  1220. //{{AFX_CODEJOCK_PRIVATE
  1221. friend class CXTPPrintOptions;
  1222. DECLARE_DYNAMIC(CXTPPrintPageHeaderFooter)
  1223. //}}AFX_CODEJOCK_PRIVATE
  1224. public:
  1225. //-----------------------------------------------------------------------
  1226. // Summary:
  1227. //      Object constructor.
  1228. // Parameters:
  1229. //      pOwner  - A pointer to owner object.
  1230. //      bHeader - If TRUE object represents a Header, otherwise footer.
  1231. // See Also:
  1232. //      CXTPPrintOptions
  1233. //-----------------------------------------------------------------------
  1234. CXTPPrintPageHeaderFooter(CXTPPrintOptions* pOwner, BOOL bHeader);
  1235. //-------------------------------------------------------------------------
  1236. // Summary: Default object destructor.
  1237. // See Also: CXTPPrintPageHeaderFooter
  1238. //-------------------------------------------------------------------------
  1239. virtual ~CXTPPrintPageHeaderFooter();
  1240. //-----------------------------------------------------------------------
  1241. // Summary:
  1242. //      Call this member function to format footer or header using
  1243. //      format string specified in m_strFormatString member.
  1244. //      The formatted text is copied in following members:
  1245. //          m_strLeft, m_strCenter, m_strRight.
  1246. //      If m_strFormatString is empty - FormatTexts do nothing.
  1247. // Parameters:
  1248. //      pInfo        - [in] Printing context.
  1249. //      pcszWndTitle - [in] Pointer to window title (for &w format string specifier).
  1250. // Remarks:
  1251. //      FormatTexts should be called before Draw call.
  1252. //      Format specifiers the same as in Internet Explorer:
  1253. //  [ul]
  1254. //  [li]<b>&d</b>  Date in short format (as specified by Regional Settings in Control Panel)
  1255. //  [li]<b>&D</b>  Date in long format (as specified by Regional Settings in Control Panel)
  1256. //
  1257. //  [li]<b>&t</b>  Time in the format specified by Regional Settings in Control Panel
  1258. //  [li]<b>&T</b>  Time in 24-hour format
  1259. //
  1260. //  [li]<b>&p</b>  Current page number
  1261. //  [li]<b>&P</b>  Total number of pages
  1262. //
  1263. //  [li]<b>&b</b>  The text immediately following these characters as centered.
  1264. //  [li]<b>&b&b</b>    The text immediately following the first "&b" as centered, and the text following the second "&b" as right-justified.
  1265. //
  1266. //  [li]<b>&w</b>  Window title
  1267. //
  1268. //  [li]<b>&&</b>  A single ampersand (&)
  1269. //  [li]<b>n</b>  new line marker
  1270. //  [/ul]
  1271. // See Also: m_strFormatString, m_strLeft, m_strCenter, m_strRight
  1272. //-----------------------------------------------------------------------
  1273. virtual void FormatTexts(CPrintInfo* pInfo, LPCTSTR pcszWndTitle);
  1274. //-----------------------------------------------------------------------
  1275. // Summary:
  1276. //      Call this member function to draw header or footer on the device
  1277. //      context.
  1278. // Parameters:
  1279. //      pDC             - [in] A pointer to device context.
  1280. //      rcRect          - [in, out] A reference to bounding rectangle.
  1281. //                        After function call this member contains rect
  1282. //                        necessary to draw header or footer. Header is
  1283. //                        aligned to top of passed bounding rectangle,
  1284. //                        footer to bottom.
  1285. //      bCalculateOnly  - If this parameter TRUE - the only rectangle
  1286. //                        calculated, without drawing.
  1287. // See Also: FormatTexts, m_strLeft, m_strCenter, m_strRight
  1288. //-----------------------------------------------------------------------
  1289. virtual void Draw(CDC* pDC, CRect& rcRect, BOOL bCalculateOnly = FALSE);
  1290. //-----------------------------------------------------------------------
  1291. // Summary:
  1292. //      Call this member function to copy members from specified source object.
  1293. // Parameters:
  1294. //      pSrc - A pointer to source object to copy data.
  1295. // See Also: Clear
  1296. //-----------------------------------------------------------------------
  1297. virtual void Set(const CXTPPrintPageHeaderFooter* pSrc);
  1298. //-------------------------------------------------------------------------
  1299. // Summary:
  1300. //      Call this member function to clear all members values.
  1301. // See Also: Set
  1302. //-------------------------------------------------------------------------
  1303. virtual void Clear();
  1304. //-------------------------------------------------------------------------
  1305. // Summary:
  1306. //      Returns TRUE if all strings are empty
  1307. //-------------------------------------------------------------------------
  1308. virtual BOOL IsEmpty();
  1309. LOGFONT m_lfFont;           // Font details
  1310. COLORREF m_clrColor;        // Text color
  1311. CString m_strFormatString;  // Text as Format string
  1312. CString m_strLeft;    // A string to show with left align
  1313. CString m_strCenter;  // A string to show with center align
  1314. CString m_strRight;   // A string to show with right align
  1315. //{{AFX_CODEJOCK_PRIVATE
  1316. static CString GetParentFrameTitle(CWnd* pWnd);
  1317. static void DoInsertHFFormatSpecifierViaMenu(CWnd* pParent, CEdit* pEdit, CButton* pButton);
  1318. //}}AFX_CODEJOCK_PRIVATE
  1319. protected:
  1320. BOOL m_bHeader;             // If TRUE object represents a Header, otherwise footer.
  1321. CXTPPrintOptions* m_pOwner; // Store pointer to owner object.
  1322. //{{AFX_CODEJOCK_PRIVATE
  1323. virtual int Calc3ColSizes(CDC* pDC, int nW, const CString& str1, const CString& str2,
  1324.   const CString& str3, CSize& rsz1, CSize& rsz2, CSize& rsz3);
  1325. virtual int _Calc3ColSizesIfSingleCol(CDC* pDC, int nW,
  1326.   const CString& str1, const CString& str2, const CString& str3,
  1327.   CSize& rsz1, CSize& rsz2, CSize& rsz3);
  1328. virtual void _SplitFormatLCR(CString strFormat);
  1329. virtual void _FormatDateTime(CString& strFormat, LCID lcidLocale);
  1330. //}}AFX_CODEJOCK_PRIVATE
  1331. private:
  1332. int fnYi(int Xi, int Wi);
  1333. };
  1334. //-------------------------------------------------------------------------
  1335. // Summary:
  1336. //      This class used as a base class to store printing options.
  1337. //      It contains a base properties and operations for printing tasks.
  1338. // See Also: CXTPPrintPageHeaderFooter
  1339. //-------------------------------------------------------------------------
  1340. class _XTP_EXT_CLASS CXTPPrintOptions : public CXTPCmdTarget
  1341. {
  1342. DECLARE_DYNAMIC(CXTPPrintOptions)
  1343. public:
  1344. //-------------------------------------------------------------------------
  1345. // Summary: Default Object constructor.
  1346. //-------------------------------------------------------------------------
  1347. CXTPPrintOptions();
  1348. //-------------------------------------------------------------------------
  1349. // Summary: Default Object destructor.
  1350. //-------------------------------------------------------------------------
  1351. virtual ~CXTPPrintOptions();
  1352. CRect        m_rcMargins;   // Margins (mm*100 or inches*1000)
  1353. BOOL    m_bBlackWhitePrinting; // Store printing mode: Color or Black&White.
  1354. int     m_nBlackWhiteContrast; // Black&White printing contrast: 0 ... 255. (default value is 0)
  1355. //-------------------------------------------------------------------------
  1356. // Summary:
  1357. //      Returns a page Header properties.
  1358. // See Also: GetPageFooter
  1359. //-------------------------------------------------------------------------
  1360. CXTPPrintPageHeaderFooter* GetPageHeader();
  1361. //-------------------------------------------------------------------------
  1362. //      Returns a page Footer properties.
  1363. // See Also: GetPageHeader
  1364. //-------------------------------------------------------------------------
  1365. CXTPPrintPageHeaderFooter* GetPageFooter();
  1366. //-----------------------------------------------------------------------
  1367. // Summary:
  1368. //      Call this member function to copy members from specified source object.
  1369. // Parameters:
  1370. //      pSrc - A pointer to source object to copy data.
  1371. //-----------------------------------------------------------------------
  1372. void Set(const CXTPPrintOptions* pSrc);
  1373. //-----------------------------------------------------------------------
  1374. // Summary:
  1375. //      Call this member function to determine margins measure:
  1376. //      inches or millimeters (mm*100 or inches*1000).
  1377. // Returns:
  1378. //      Returns TRUE if margins measure in inches, FALSE otherwise.
  1379. // See Also:
  1380. //      m_rcMargins, GetMarginsHimetric, GetMarginsLP
  1381. //-----------------------------------------------------------------------
  1382. virtual BOOL IsMarginsMeasureInches();
  1383. //-----------------------------------------------------------------------
  1384. // Summary:
  1385. //      Call this member function to get margins in Himetric units.
  1386. // Returns:
  1387. //      Returns margins in Himetric units.
  1388. // See Also:
  1389. //      m_rcMargins, GetMarginsLP
  1390. //-----------------------------------------------------------------------
  1391. virtual CRect GetMarginsHimetric();
  1392. //-----------------------------------------------------------------------
  1393. // Summary:
  1394. //      Call this member function to get margins in Logical points.
  1395. // Parameters:
  1396. //      pDC - [in] A pointer to device context.
  1397. // Returns:
  1398. //      Returns margins in Logical units.
  1399. // See Also:
  1400. //      m_rcMargins, GetMarginsHimetric
  1401. //-----------------------------------------------------------------------
  1402. virtual CRect GetMarginsLP(CDC* pDC);
  1403. //-----------------------------------------------------------------------
  1404. // Summary:
  1405. //      Override this member function in derived class to specify active
  1406. //      locale ID.
  1407. // Returns:
  1408. //      Locale ID. Base implementation returns LOCALE_USER_DEFAULT;
  1409. //-----------------------------------------------------------------------
  1410. virtual LCID GetActiveLCID();
  1411. protected:
  1412. CXTPPrintPageHeaderFooter* m_pPageHeader; // A page Header properties.
  1413. CXTPPrintPageHeaderFooter* m_pPageFooter; // A page Footer properties.
  1414. };
  1415. //{{AFX_CODEJOCK_PRIVATE
  1416. /////////////////////////////////////////////////////////////////////////////
  1417. _XTP_EXT_CLASS BOOL CALLBACK _XTPAbortProc(HDC, int);
  1418. // Printing Dialog
  1419. class _XTP_EXT_CLASS CXTPPrintingDialog : public CDialog
  1420. {
  1421. public:
  1422. enum { IDD = AFX_IDD_PRINTDLG };
  1423. CXTPPrintingDialog(CWnd* pParent);
  1424. virtual ~CXTPPrintingDialog() { }
  1425. virtual BOOL OnInitDialog();
  1426. virtual void OnCancel();
  1427. };
  1428. //}}AFX_CODEJOCK_PRIVATE
  1429. /////////////////////////////////////////////////////////////////////////////
  1430. AFX_INLINE BOOL CXTPDrawHelpers::IsFastFillAvailable() const {
  1431. return m_pfnFastGradientFill != NULL;
  1432. }
  1433. AFX_INLINE void CXTPDrawHelpers::Triangle(CDC* pDC, CPoint pt0, CPoint pt1, CPoint pt2) {
  1434. CPoint pts[] = {pt0, pt1, pt2};
  1435. pDC->Polygon(pts, 3);
  1436. }
  1437. AFX_INLINE void CXTPSplitterTracker::SetBoundRect(CRect rcBoundRect) {
  1438. m_rcBoundRect = rcBoundRect;
  1439. }
  1440. /////////////////////////////////////////////////////////////////////////////
  1441. #endif // !defined(__XTPDRAWHELPERS_H__)