GraphicView.cpp
上传用户:mcdz888
上传日期:2022-08-05
资源大小:118k
文件大小:6k
源码类别:

绘图程序

开发平台:

Visual C++

  1. // GraphicView.cpp : implementation of the CGraphicView class
  2. //
  3. #include "stdafx.h"
  4. #include "Graphic.h"
  5. #include "GraphicDoc.h"
  6. #include "GraphicView.h"
  7. #include "SettingDlg.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CGraphicView
  15. IMPLEMENT_DYNCREATE(CGraphicView, CView)
  16. BEGIN_MESSAGE_MAP(CGraphicView, CView)
  17. //{{AFX_MSG_MAP(CGraphicView)
  18. ON_COMMAND(IDM_DOT, OnDot)
  19. ON_COMMAND(IDM_LINE, OnLine)
  20. ON_COMMAND(IDM_RECTANGLE, OnRectangle)
  21. ON_COMMAND(IDM_ELLIPSE, OnEllipse)
  22. ON_WM_LBUTTONDOWN()
  23. ON_WM_LBUTTONUP()
  24. ON_COMMAND(IDM_SETTING, OnSetting)
  25. ON_COMMAND(IDM_COLOR, OnColor)
  26. ON_COMMAND(IDM_FONT, OnFont)
  27. ON_WM_ERASEBKGND()
  28. //}}AFX_MSG_MAP
  29. // Standard printing commands
  30. ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
  31. ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
  32. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
  33. END_MESSAGE_MAP()
  34. /////////////////////////////////////////////////////////////////////////////
  35. // CGraphicView construction/destruction
  36. CGraphicView::CGraphicView()
  37. {
  38. // TODO: add construction code here
  39. m_nDrawType=0;
  40. m_ptOrigin=0;
  41. m_nLineWidth=0;
  42. m_nLineStyle=0;
  43. m_clr=RGB(255,0,0);
  44. m_strFontName="";
  45. }
  46. CGraphicView::~CGraphicView()
  47. {
  48. }
  49. BOOL CGraphicView::PreCreateWindow(CREATESTRUCT& cs)
  50. {
  51. // TODO: Modify the Window class or styles here by modifying
  52. //  the CREATESTRUCT cs
  53. return CView::PreCreateWindow(cs);
  54. }
  55. /////////////////////////////////////////////////////////////////////////////
  56. // CGraphicView drawing
  57. void CGraphicView::OnDraw(CDC* pDC)
  58. {
  59. CGraphicDoc* pDoc = GetDocument();
  60. ASSERT_VALID(pDoc);
  61. // TODO: add draw code for native data here
  62. /* CBitmap bitmap;
  63. bitmap.LoadBitmap(IDB_BITMAP1);
  64. BITMAP bmp;
  65. bitmap.GetBitmap(&bmp);
  66. CDC dcCompatible;
  67. dcCompatible.CreateCompatibleDC(pDC);
  68. dcCompatible.SelectObject(&bitmap);
  69. CRect rect;
  70. GetClientRect(&rect);
  71. // pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);
  72. pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,
  73. 0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);*/
  74. CFont *pOldFont=pDC->SelectObject(&m_font);
  75. pDC->TextOut(0,0,m_strFontName);
  76. pDC->SelectObject(pOldFont);
  77. }
  78. /////////////////////////////////////////////////////////////////////////////
  79. // CGraphicView printing
  80. BOOL CGraphicView::OnPreparePrinting(CPrintInfo* pInfo)
  81. {
  82. // default preparation
  83. return DoPreparePrinting(pInfo);
  84. }
  85. void CGraphicView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  86. {
  87. // TODO: add extra initialization before printing
  88. }
  89. void CGraphicView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  90. {
  91. // TODO: add cleanup after printing
  92. }
  93. /////////////////////////////////////////////////////////////////////////////
  94. // CGraphicView diagnostics
  95. #ifdef _DEBUG
  96. void CGraphicView::AssertValid() const
  97. {
  98. CView::AssertValid();
  99. }
  100. void CGraphicView::Dump(CDumpContext& dc) const
  101. {
  102. CView::Dump(dc);
  103. }
  104. CGraphicDoc* CGraphicView::GetDocument() // non-debug version is inline
  105. {
  106. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGraphicDoc)));
  107. return (CGraphicDoc*)m_pDocument;
  108. }
  109. #endif //_DEBUG
  110. /////////////////////////////////////////////////////////////////////////////
  111. // CGraphicView message handlers
  112. void CGraphicView::OnDot() 
  113. {
  114. // TODO: Add your command handler code here
  115. m_nDrawType=1;
  116. }
  117. void CGraphicView::OnLine() 
  118. {
  119. // TODO: Add your command handler code here
  120. m_nDrawType=2;
  121. }
  122. void CGraphicView::OnRectangle() 
  123. {
  124. // TODO: Add your command handler code here
  125. m_nDrawType=3;
  126. }
  127. void CGraphicView::OnEllipse() 
  128. {
  129. // TODO: Add your command handler code here
  130. m_nDrawType=4;
  131. }
  132. void CGraphicView::OnLButtonDown(UINT nFlags, CPoint point) 
  133. {
  134. // TODO: Add your message handler code here and/or call default
  135. m_ptOrigin=point;
  136. CView::OnLButtonDown(nFlags, point);
  137. }
  138. void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point) 
  139. {
  140. // TODO: Add your message handler code here and/or call default
  141. CClientDC dc(this);
  142. CPen pen(m_nLineStyle,m_nLineWidth,m_clr);
  143. dc.SelectObject(&pen);
  144. CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
  145. dc.SelectObject(pBrush);
  146. switch(m_nDrawType)
  147. {
  148. case 1:
  149. dc.SetPixel(point,m_clr);
  150. break;
  151. case 2:
  152. dc.MoveTo(m_ptOrigin);
  153. dc.LineTo(point);
  154. break;
  155. case 3:
  156. dc.Rectangle(CRect(m_ptOrigin,point));
  157. break;
  158. case 4:
  159. dc.Ellipse(CRect(m_ptOrigin,point));
  160. break;
  161. }
  162. CView::OnLButtonUp(nFlags, point);
  163. }
  164. void CGraphicView::OnSetting() 
  165. {
  166. // TODO: Add your command handler code here
  167. CSettingDlg dlg;
  168. dlg.m_nLineWidth=m_nLineWidth;
  169. dlg.m_nLineStyle=m_nLineStyle;
  170. dlg.m_clr=m_clr;
  171. if(IDOK==dlg.DoModal())
  172. {
  173. m_nLineWidth=dlg.m_nLineWidth;
  174. m_nLineStyle=dlg.m_nLineStyle;
  175. }
  176. }
  177. void CGraphicView::OnColor() 
  178. {
  179. // TODO: Add your command handler code here
  180. CColorDialog dlg;
  181. dlg.m_cc.Flags|=CC_RGBINIT | CC_FULLOPEN;
  182. dlg.m_cc.rgbResult=m_clr;
  183. if(IDOK==dlg.DoModal())
  184. {
  185. m_clr=dlg.m_cc.rgbResult;
  186. }
  187. }
  188. void CGraphicView::OnFont() 
  189. {
  190. // TODO: Add your command handler code here
  191. CFontDialog dlg;
  192. if(IDOK==dlg.DoModal())
  193. {
  194. if(m_font.m_hObject)
  195. m_font.DeleteObject();
  196. m_font.CreateFontIndirect(dlg.m_cf.lpLogFont);
  197. m_strFontName=dlg.m_cf.lpLogFont->lfFaceName;
  198. Invalidate();
  199. }
  200. }
  201. BOOL CGraphicView::OnEraseBkgnd(CDC* pDC) 
  202. {
  203. // TODO: Add your message handler code here and/or call default
  204. CBitmap bitmap;
  205. bitmap.LoadBitmap(IDB_BITMAP1);
  206. BITMAP bmp;
  207. bitmap.GetBitmap(&bmp);
  208. CDC dcCompatible;
  209. dcCompatible.CreateCompatibleDC(pDC);
  210. dcCompatible.SelectObject(&bitmap);
  211. CRect rect;
  212. GetClientRect(&rect);
  213. // pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);
  214. pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,
  215. 0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
  216. return TRUE;
  217. // return CView::OnEraseBkgnd(pDC);
  218. }