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

对话框与窗口

开发平台:

Visual C++

  1. // PreviewPane.cpp : implementation file
  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. #include "stdafx.h"
  21. #include "GUI_Outlook.h"
  22. #include "PreviewPane.h"
  23. #ifdef _DEBUG
  24. #define new DEBUG_NEW
  25. #undef THIS_FILE
  26. static char THIS_FILE[] = __FILE__;
  27. #endif
  28. #define CAPT_MAX_HEIGHT 35
  29. #define CAPT_MIN_HEIGHT 5
  30. #define TEXT_BOLD_LEFT  4
  31. #define TEXT_NORM_LEFT  75
  32. #define TEXT_LINE_ONE   4
  33. #define TEXT_LINE_TWO   18
  34. /////////////////////////////////////////////////////////////////////////////
  35. // CPreviewPane
  36. IMPLEMENT_DYNCREATE(CPreviewPane, CView)
  37. CPreviewPane::CPreviewPane()
  38. {
  39. m_strTitle1 = _T("Message:");
  40. m_strDescp1 = _T("Some words about this message");
  41. m_strTitle2 = _T("Content:");
  42. m_strDescp2 = _T("This message contains nothing special.");
  43. m_strViewMessage = _T("This area can be used for preview info...");
  44. m_bMax = TRUE;
  45. }
  46. CPreviewPane::~CPreviewPane()
  47. {
  48. }
  49. BEGIN_MESSAGE_MAP(CPreviewPane, CView)
  50. //{{AFX_MSG_MAP(CPreviewPane)
  51. ON_WM_LBUTTONDBLCLK()
  52. ON_WM_ERASEBKGND()
  53. ON_WM_PAINT()
  54. ON_WM_CREATE()
  55. ON_WM_SIZE()
  56. //}}AFX_MSG_MAP
  57. END_MESSAGE_MAP()
  58. /////////////////////////////////////////////////////////////////////////////
  59. // CPreviewPane drawing
  60. void CPreviewPane::OnDraw(CDC* pDC)
  61. {
  62. // TODO: add draw code here
  63. GetWindowRect(&m_rcCaption);
  64. ScreenToClient(&m_rcCaption);
  65. pDC->FillSolidRect(m_rcCaption, GetXtremeColor(COLOR_WINDOW));
  66. m_rcView.CopyRect(m_rcCaption);
  67. m_rcCaption.bottom = m_bMax ? CAPT_MAX_HEIGHT : CAPT_MIN_HEIGHT;
  68. m_rcView.top = m_rcCaption.bottom;
  69. // Default header text color
  70. COLORREF clrText = GetXtremeColor(COLOR_BTNTEXT);
  71. XTPPaintTheme theme = XTPPaintManager()->GetCurrentTheme();
  72. if (theme == xtpThemeOffice2003)
  73. {
  74. if ( m_richEditCtrl.m_hWnd == ::GetFocus( ) )
  75. {
  76. XTPDrawHelpers()->GradientFill(pDC, m_rcCaption, XTPColorManager()->grcCaption.clrDark,XTPColorManager()->grcCaption.clrLight, FALSE);
  77. clrText = GetXtremeColor(COLOR_WINDOW);
  78. }
  79. else
  80. {
  81. XTPDrawHelpers()->GradientFill(pDC, m_rcCaption, XTPColorManager()->grcToolBar.clrDark, XTPColorManager()->grcToolBar.clrLight, FALSE);
  82. }
  83. pDC->FillSolidRect(m_rcCaption.left, m_rcCaption.bottom - 1, m_rcCaption.right, 1, GetXtremeColor(XPCOLOR_FRAME));
  84. }
  85. else
  86. {
  87. // Test to see if the window has the focus and draw the header accordingly
  88. if ( m_richEditCtrl.m_hWnd == ::GetFocus( ) )
  89. {
  90. pDC->FillSolidRect(m_rcCaption, GetXtremeColor(COLOR_HIGHLIGHT));
  91. clrText = GetXtremeColor(COLOR_WINDOW);
  92. }
  93. else
  94. {
  95. pDC->FillSolidRect(m_rcCaption, XTPPaintManager()->GetXtremeColor(XPCOLOR_3DFACE));
  96. }
  97. CRect rc(m_rcCaption);
  98. rc.DeflateRect(1, 1, theme == xtpThemeNativeWinXP? 0: 1, 0);
  99. pDC->Draw3dRect(rc, GetXtremeColor(COLOR_3DHILIGHT), GetBorderColor(true));
  100. }
  101. pDC->SetBkMode(TRANSPARENT);
  102. if (m_bMax)
  103. {
  104. // Set text color
  105. COLORREF clrOldText = pDC->SetTextColor(clrText);
  106. pDC->SelectObject(&XTAuxData().fontBold);
  107. pDC->TextOut(TEXT_BOLD_LEFT, TEXT_LINE_ONE, m_strTitle1);
  108. pDC->TextOut(TEXT_BOLD_LEFT, TEXT_LINE_TWO, m_strTitle2);
  109. pDC->SelectObject(&XTAuxData().font);
  110. pDC->TextOut(TEXT_NORM_LEFT, TEXT_LINE_ONE, m_strDescp1);
  111. pDC->TextOut(TEXT_NORM_LEFT, TEXT_LINE_TWO, m_strDescp2);
  112. // Return original color
  113. pDC->SetTextColor(clrOldText);
  114. }
  115. }
  116. /////////////////////////////////////////////////////////////////////////////
  117. // CPreviewPane diagnostics
  118. #ifdef _DEBUG
  119. void CPreviewPane::AssertValid() const
  120. {
  121. CView::AssertValid();
  122. }
  123. void CPreviewPane::Dump(CDumpContext& dc) const
  124. {
  125. CView::Dump(dc);
  126. }
  127. #endif //_DEBUG
  128. /////////////////////////////////////////////////////////////////////////////
  129. // CPreviewPane message handlers
  130. void CPreviewPane::OnLButtonDblClk(UINT nFlags, CPoint point)
  131. {
  132. // Toggle caption.
  133. if (m_rcCaption.PtInRect(point))
  134. {
  135. m_bMax = !m_bMax;
  136. Invalidate();
  137. ResizeEditCtrl();
  138. }
  139. CView::OnLButtonDblClk(nFlags, point);
  140. }
  141. BOOL CPreviewPane::OnEraseBkgnd(CDC* pDC)
  142. {
  143. UNUSED_ALWAYS(pDC);
  144. return TRUE;
  145. }
  146. void CPreviewPane::OnPaint()
  147. {
  148. CPaintDC dc(this);
  149. // Get the client rect.
  150. CRect rectClient;
  151. GetClientRect(&rectClient);
  152. CXTMemDC memDC(&dc, rectClient, GetXtremeColor(COLOR_WINDOW));
  153. OnDraw(&memDC);
  154. }
  155. int CPreviewPane::OnCreate(LPCREATESTRUCT lpCreateStruct)
  156. {
  157. if (CView::OnCreate(lpCreateStruct) == -1)
  158. return -1;
  159. // Create the rich edit control that will be used in the view.
  160. if (!m_richEditCtrl.Create(WS_CHILD | WS_VISIBLE | ES_LEFT | ES_MULTILINE | ES_WANTRETURN,
  161. CRect(0,0,0,0), this, 0 ))
  162. return -1;
  163. // Set the font for the edit control.
  164. m_richEditCtrl.SetFont( &XTAuxData().font );
  165. // Set the text for the edit control.
  166. m_richEditCtrl.SetWindowText( m_strViewMessage );
  167. return 0;
  168. }
  169. void CPreviewPane::OnSize(UINT nType, int cx, int cy)
  170. {
  171. CView::OnSize(nType, cx, cy);
  172. // TODO: Add your message handler code here
  173. ResizeEditCtrl();
  174. }
  175. void CPreviewPane::ResizeEditCtrl()
  176. {
  177. if (::IsWindow( m_richEditCtrl.m_hWnd ))
  178. {
  179. CRect rc;
  180. GetClientRect( &rc );
  181. int x = 0;
  182. int y = ( m_bMax ? CAPT_MAX_HEIGHT : CAPT_MIN_HEIGHT );
  183. m_richEditCtrl.MoveWindow(x, y, rc.Width(), rc.Height()-y);
  184. }
  185. }
  186. /////////////////////////////////////////////////////////////////////////////
  187. // CPreviewEdit
  188. BEGIN_MESSAGE_MAP(CPreviewEdit, CRichEditCtrl)
  189. //{{AFX_MSG_MAP(CPreviewEdit)
  190. ON_WM_SETFOCUS()
  191. ON_WM_KILLFOCUS()
  192. //}}AFX_MSG_MAP
  193. END_MESSAGE_MAP()
  194. void CPreviewEdit::OnSetFocus(CWnd* pOldWnd)
  195. {
  196. CRichEditCtrl::OnSetFocus(pOldWnd);
  197. GetParent()->InvalidateRect(NULL);
  198. }
  199. void CPreviewEdit::OnKillFocus(CWnd* pNewWnd)
  200. {
  201. CRichEditCtrl::OnKillFocus(pNewWnd);
  202. GetParent()->InvalidateRect(NULL);
  203. }