【VC开源代码栏目提醒】:网学会员--在 VC开源代码编辑为广大网友搜集整理了:EasyDrawView.cpp绩等信息,祝愿广大网友取得需要的信息,参考学习。
// EasyDrawView.cpp : CEasyDrawView 类的实现
//
#include "stdafx.h"
#include "EasyDraw.h"
#include "EasyDrawDoc.h"
#include "EasyDrawView.h"
#include "MainFrm.h"
#include "DrawToolDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CEasyDrawView
IMPLEMENT_DYNCREATE(CEasyDrawView, CView)
BEGIN_MESSAGE_MAP(CEasyDrawView, CView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_COMMAND(ID_TOOL_LINE, &CEasyDrawView::OnToolLine)
ON_COMMAND(ID_TOOL_RECT, &CEasyDrawView::OnToolRect)
ON_COMMAND(ID_TOOL_CIRCLE, &CEasyDrawView::OnToolCircle)
ON_UPDATE_COMMAND_UI(ID_TOOL_LINE, &CEasyDrawView::OnUpdateToolLine)
ON_UPDATE_COMMAND_UI(ID_TOOL_RECT, &CEasyDrawView::OnUpdateToolRect)
ON_UPDATE_COMMAND_UI(ID_TOOL_CIRCLE, &CEasyDrawView::OnUpdateToolCircle)
ON_WM_ERASEBKGND()
ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()
/******************************************************************************
* 作用: 构造函数
******************************************************************************/
CEasyDrawView::CEasyDrawView()
{
m_bStartDraw = false;
m_nGraphType = EG_LINE;
}
/******************************************************************************
* 作用: 析构函数
******************************************************************************/
CEasyDrawView::~CEasyDrawView()
{
EasyGraphics* graph = NULL;
for (INT_PTR i = 0; i < m_GraphAry.GetCount(); i++)
{
graph = (EasyGraphics*)m_GraphAry[i];
SAFE_DELETE (graph);
}
}
/******************************************************************************
* 作用: 重绘视图
* 参数:
pDC 上下文设备CDC指针
******************************************************************************/
void CEasyDrawView::OnDraw(CDC* pDC)
{
CEasyDrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
CRect rect;
GetClientRect(rect);
CDC memDC;
CBitmap MemBitmap;
// 设备描述表初始化
memDC.CreateCompatibleDC(NULL);
// 建立与屏幕显示兼容的内存显示设备
MemBitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());
// 选取空白位图
memDC.SelectObject(MemBitmap);
memDC.FillSolidRect(0, 0, rect.Width(), rect.Height(), RGB(255,255,255));
EasyGraphics* graph = NULL;
// 逐个绘制图形容器中的图形
for (INT_PTR i = 0; i < m_GraphAry.GetCount(); i++)
{
graph = (EasyGraphics*)m_GraphAry[i];
DrawGraphics(&memDC, graph);
}
pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY);
}
// CEasyDrawView 打印
BOOL CEasyDrawView::OnPreparePrinting(CPrintInfo* pInfo)
{
// 默认准备
return DoPreparePrinting(pInfo);
}
void CEasyDrawView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加额外的打印前进行的初始化过程
}
void CEasyDrawView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加打印后进行的清除过程
}
// CEasyDrawView 诊断
#ifdef _DEBUG
void CEasyDrawView::AssertValid() const
{
CView::AssertValid();
}
void CEasyDrawView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CEasyDrawDoc* CEasyDrawView::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CEasyDrawDoc)));
return (CEasyDrawDoc*)m_pDocument;
}
#endif //_DEBUG
/******************************************************************************
* 作用: 绘制一个图形
* 参数:
* pDC 上下文设备CDC指针
* graph 图形对象指针
* 备注: 具体绘制方法根据图形类型确定
******************************************************************************/
void CEasyDrawView::DrawGraphics(CDC* pDC, EasyGraphics* graph)
{
LOGBRUSH logBrush;
logBrush.lbStyle = BS_SOLID;
logBrush.lbColor = graph->m_clrColor;
CPen pen(graph->m_nLineType |PS_GEOMETRIC|PS_ENDCAP_ROUND,
graph->m_nLineWidth, &logBrush);
// 选中新的笔对象
CPen* oldPen = pDC->SelectObject(&pen);
// 使用透明画刷
CBrush* oldBrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
switch (graph->m_nType)
{
case EG_RECT:
// 绘制矩形
pDC->Rectangle(graph->m_PtTopLeft.x,
graph->m_PtTopLeft.y,
graph->m_PtBottomRight.x,
graph->m_PtBottomRight.y);
break;
case EG_CIRCLE:
// 绘制椭圆
pDC->Ellipse(graph->m_PtTopLeft.x,
graph->m_PtTopLeft.y,
graph->m_PtBottomRight.x,
graph->m_PtBottomRight.y);
break;
default:
// 绘制直线
pDC->MoveTo(graph->m_PtTopLeft);
pDC->LineTo(graph->m_PtBottomRight);
}
pDC->SelectObject(oldPen);
pDC->SelectObject(oldBrush);
}
/******************************************************************************
* 作用: 用户选中“工具”下的“直线工具”时的响应函数
******************************************************************************/
void CEasyDrawView::OnToolLine()
{
m_nGraphType = EG_LINE;
}
/******************************************************************************
* 作用: 用户选中“工具”下的“矩形工具”时的响应函数
******************************************************************************/
void CEasyDrawView::OnToolRect()
{
m_nGraphType = EG_RECT;
}
/******************************************************************************
* 作用: 用户选中“工具”下的“椭圆工具”时的响应函数
******************************************************************************/
void CEasyDrawView::OnToolCircle()
{
m_nGraphType = EG_CIRCLE;
}
/******************************************************************************
* 作用: “直线工具”的动态更新函数
******************************************************************************/
void CEasyDrawView::OnUpdateToolLine(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(m_nGraphType == EG_LINE);
}
/******************************************************************************
* 作用: “矩形工具”的动态更新函数
******************************************************************************/
void CEasyDrawView::OnUpdateToolRect(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(m_nGraphType == EG_RECT);
}
/******************************************************************************
* 作用: “椭圆工具”的动态更新函数
**********************************************************
上一篇:
frmFolders.frm
下一篇:
一个人晕着也能去看病打针