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

对话框与窗口

开发平台:

Visual C++

  1. // HelloVw.cpp : implementation of the CHelloView 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. // This is a part of the Microsoft Foundation Classes C++ library.
  21. // Copyright (C) 1992-1998 Microsoft Corporation
  22. // All rights reserved.
  23. //
  24. // This source code is only intended as a supplement to the
  25. // Microsoft Foundation Classes Reference and related
  26. // electronic documentation provided with the library.
  27. // See these sources for detailed information regarding the
  28. // Microsoft Foundation Classes product.
  29. #include "stdafx.h"
  30. #include "resource.h"
  31. #include "HelloDoc.h"
  32. #include "HelloVw.h"
  33. #ifdef _DEBUG
  34. #define new DEBUG_NEW
  35. #undef THIS_FILE
  36. static char THIS_FILE[] = __FILE__;
  37. #endif
  38. /////////////////////////////////////////////////////////////////////////////
  39. // CHelloView
  40. IMPLEMENT_DYNCREATE(CHelloView, CView)
  41. BEGIN_MESSAGE_MAP(CHelloView, CView)
  42. //{{AFX_MSG_MAP(CHelloView)
  43. ON_UPDATE_COMMAND_UI(ID_BLUE, OnUpdateBlue)
  44. ON_UPDATE_COMMAND_UI(ID_GREEN, OnUpdateGreen)
  45. ON_UPDATE_COMMAND_UI(ID_RED, OnUpdateRed)
  46. ON_UPDATE_COMMAND_UI(ID_WHITE, OnUpdateWhite)
  47. ON_UPDATE_COMMAND_UI(ID_BLACK, OnUpdateBlack)
  48. ON_COMMAND(ID_CUSTOM, OnCustom)
  49. ON_UPDATE_COMMAND_UI(ID_CUSTOM, OnUpdateCustom)
  50. ON_COMMAND(ID_BLACK, OnColor)
  51. ON_COMMAND(ID_BLUE, OnColor)
  52. ON_COMMAND(ID_GREEN, OnColor)
  53. ON_COMMAND(ID_RED, OnColor)
  54. ON_COMMAND(ID_WHITE, OnColor)
  55. //}}AFX_MSG_MAP
  56. END_MESSAGE_MAP()
  57. /////////////////////////////////////////////////////////////////////////////
  58. // CHelloView construction/destruction
  59. CHelloView::CHelloView()
  60. {
  61. }
  62. CHelloView::~CHelloView()
  63. {
  64. }
  65. BOOL CHelloView::PreCreateWindow(CREATESTRUCT& cs)
  66. {
  67. return CView::PreCreateWindow(cs);
  68. }
  69. /////////////////////////////////////////////////////////////////////////////
  70. // CHelloView drawing
  71. void CHelloView::OnDraw(CDC* pDC)
  72. {
  73. CHelloDoc* pDoc = GetDocument();
  74. ASSERT_VALID(pDoc);
  75. CRect rect;
  76. COLORREF clr = pDoc->m_clrText;
  77. CString tmpStr = pDoc->m_str;
  78. pDC->SetTextColor(clr);
  79. pDC->SetBkColor(::GetSysColor(COLOR_WINDOW));
  80. GetClientRect(rect);
  81. pDC->DrawText(tmpStr, -1, rect,
  82. DT_SINGLELINE | DT_CENTER | DT_VCENTER);
  83. }
  84. /////////////////////////////////////////////////////////////////////////////
  85. // CHelloView diagnostics
  86. #ifdef _DEBUG
  87. void CHelloView::AssertValid() const
  88. {
  89. CView::AssertValid();
  90. }
  91. void CHelloView::Dump(CDumpContext& dc) const
  92. {
  93. CView::Dump(dc);
  94. }
  95. CHelloDoc* CHelloView::GetDocument() // non-debug version is inline
  96. {
  97. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CHelloDoc)));
  98. return (CHelloDoc*)m_pDocument;
  99. }
  100. #endif //_DEBUG
  101. /////////////////////////////////////////////////////////////////////////////
  102. // CHelloView message handlers
  103. // Update handlers for each color
  104. void CHelloView::OnUpdateBlue(CCmdUI* pCmdUI)
  105. {
  106. CHelloDoc* pDoc = GetDocument();
  107. ASSERT_VALID(pDoc);
  108. pCmdUI->SetCheck(pDoc->m_bBlue);
  109. }
  110. void CHelloView::OnUpdateGreen(CCmdUI* pCmdUI)
  111. {
  112. CHelloDoc* pDoc = GetDocument();
  113. ASSERT_VALID(pDoc);
  114. pCmdUI->SetCheck(pDoc->m_bGreen);
  115. }
  116. void CHelloView::OnUpdateRed(CCmdUI* pCmdUI)
  117. {
  118. CHelloDoc* pDoc = GetDocument();
  119. ASSERT_VALID(pDoc);
  120. pCmdUI->SetCheck(pDoc->m_bRed);
  121. }
  122. void CHelloView::OnUpdateWhite(CCmdUI* pCmdUI)
  123. {
  124. CHelloDoc* pDoc = GetDocument();
  125. ASSERT_VALID(pDoc);
  126. pCmdUI->SetCheck(pDoc->m_bWhite);
  127. }
  128. void CHelloView::OnUpdateBlack(CCmdUI* pCmdUI)
  129. {
  130. CHelloDoc* pDoc = GetDocument();
  131. ASSERT_VALID(pDoc);
  132. pCmdUI->SetCheck(pDoc->m_bBlack);
  133. }
  134. void CHelloView::MixColors()
  135. {
  136. CHelloDoc* pDoc = GetDocument();
  137. ASSERT_VALID(pDoc);
  138. COLORREF tmpClr;
  139. int r, g, b;
  140. BOOL bSetColor;
  141. // Determine which colors are currently chosen.
  142. bSetColor = pDoc->m_bRed || pDoc->m_bGreen || pDoc->m_bBlue
  143. || pDoc->m_bWhite || pDoc->m_bBlack;
  144. // If the current color is custom, ignore mix request.
  145. if(!bSetColor && pDoc->m_bCustom)
  146. return;
  147. // Set color value to black and then add the necessary colors.
  148. r = g = b = 0;
  149. if(pDoc->m_bRed)
  150. r = 255;
  151. if(pDoc->m_bGreen)
  152. g = 255;
  153. if(pDoc->m_bBlue)
  154. b = 255;
  155. tmpClr = RGB(r, g, b);
  156. // NOTE: Because a simple algorithm is used to mix colors
  157. // if the current selection contains black or white, the
  158. // result will be black or white; respectively. This is due
  159. // to the additive method for mixing the colors.
  160. if(pDoc->m_bBlack)
  161. tmpClr = RGB(0, 0, 0);
  162. if(pDoc->m_bWhite)
  163. tmpClr = RGB(255, 255, 255);
  164. // Once the color has been determined, update document
  165. // data, and force repaint of all views.
  166. if(!bSetColor)
  167. pDoc->m_bBlack = TRUE;
  168. pDoc->m_clrText = tmpClr;
  169. pDoc->m_bCustom = FALSE;
  170. pDoc->UpdateAllViews(NULL);
  171. }
  172. void CHelloView::OnCustom()
  173. {
  174. CHelloDoc* pDoc = GetDocument();
  175. ASSERT_VALID(pDoc);
  176. CColorDialog dlgColor(pDoc->m_clrText);
  177. if (dlgColor.DoModal() == IDOK)
  178. {
  179. pDoc->m_clrText = dlgColor.GetColor();
  180. pDoc->ClearAllColors();
  181. pDoc->m_bCustom = TRUE;
  182. pDoc->UpdateAllViews(NULL);
  183. }
  184. }
  185. void CHelloView::OnUpdateCustom(CCmdUI* pCmdUI)
  186. {
  187. CHelloDoc* pDoc = GetDocument();
  188. ASSERT_VALID(pDoc);
  189. pCmdUI->SetCheck(pDoc->m_bCustom);
  190. }
  191. void CHelloView::OnColor()
  192. {
  193. CHelloDoc* pDoc = GetDocument();
  194. ASSERT_VALID(pDoc);
  195. UINT m_nIDColor;
  196. m_nIDColor = LOWORD(GetCurrentMessage()->wParam);
  197. // Determines the color being modified
  198. // and then updates the color state
  199. switch(m_nIDColor)
  200. {
  201. case ID_BLACK:
  202. pDoc->ClearAllColors();
  203. pDoc->m_bBlack = !(pDoc->m_bBlack);
  204. break;
  205. case ID_WHITE:
  206. pDoc->ClearAllColors();
  207. pDoc->m_bWhite = !(pDoc->m_bWhite);
  208. break;
  209. case ID_RED:
  210. pDoc->m_bRed = !(pDoc->m_bRed);
  211. pDoc->m_bBlack = FALSE;
  212. pDoc->m_bWhite = FALSE;
  213. break;
  214. case ID_GREEN:
  215. pDoc->m_bGreen = !(pDoc->m_bGreen);
  216. pDoc->m_bBlack = FALSE;
  217. pDoc->m_bWhite = FALSE;
  218. break;
  219. case ID_BLUE:
  220. pDoc->m_bBlue = !(pDoc->m_bBlue);
  221. pDoc->m_bBlack = FALSE;
  222. pDoc->m_bWhite = FALSE;
  223. break;
  224. default:
  225. AfxMessageBox(IDS_UNKCOLOR);
  226. return;
  227. }
  228. MixColors();
  229. }