// Demo1View.cpp : implementation of the CDemo1View class
//
#include "stdafx.h"
#include "resource.h"
#include "Demo1Doc.h"
#include "Demo1View.h"
#include "Draw.h"
#include "bitmap.h"
#include <windowsx.h>
#include "structure.h"
#include "TextDlg.h"
#define WIDTH_THIN 1
#define WIDTH_NORMAL 3
#define WIDTH_WIDE 5
#define UD_WHITE 0
#define UD_BLACK 0xffffff
#define UD_YELLOW 0x00ffff
#define UD_PINK 0xff80ff
#define UD_CYAN 0xffff00
#define UD_GRAY 0x4080
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDemo1View
IMPLEMENT_DYNCREATE(CDemo1View, CView)
BEGIN_MESSAGE_MAP(CDemo1View, CView)
//{{AFX_MSG_MAP(CDemo1View)
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_UPDATE_COMMAND_UI(IDT_SELECT, OnUpdateArrow)
ON_UPDATE_COMMAND_UI(IDT_LINE, OnUpdateLine)
ON_UPDATE_COMMAND_UI(IDT_RECTANGLE, OnUpdateRectangle)
ON_UPDATE_COMMAND_UI(IDT_ELLIPSE, OnUpdateEllipse)
ON_UPDATE_COMMAND_UI(IDT_CIRCLE, OnUpdateCircle)
ON_UPDATE_COMMAND_UI(IDT_POLY, OnUpdatePline)
ON_UPDATE_COMMAND_UI(IDT_FONT, OnUpdateFont)
ON_COMMAND(IDT_LINE, OnLine)
ON_COMMAND(IDT_RECTANGLE, OnRectangle)
ON_COMMAND(IDT_ELLIPSE, OnEllipse)
ON_COMMAND(IDT_CIRCLE, OnCircle)
ON_COMMAND(IDT_FONT, OnFont)
ON_COMMAND(ID_FILE_NEW, OnFileNew)
ON_COMMAND(IDT_SELECT, OnSelect)
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
ON_COMMAND(ID_EDIT_CUT, OnEditCut)
ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_COLOR_BLACK, OnColorBlack)
ON_COMMAND(ID_COLOR_CYAN, OnColorCyan)
ON_COMMAND(ID_COLOR_GRAY, OnColorGray)
ON_COMMAND(ID_COLOR_GREEN, OnColorGreen)
ON_COMMAND(ID_COLOR_PINK, OnColorPink)
ON_COMMAND(ID_COLOR_RED, OnColorRed)
ON_COMMAND(ID_COLOR_WHITE, OnColorWhite)
ON_COMMAND(ID_COLOR_YELLOW, OnColorYellow)
ON_COMMAND(ID_COLOR_BLUE, OnColorBlue)
ON_UPDATE_COMMAND_UI(ID_EDIT_CUT, OnUpdateEditCut)
ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateEditPaste)
ON_UPDATE_COMMAND_UI(ID_EDIT_COPY, OnUpdateEditCopy)
ON_UPDATE_COMMAND_UI(IDT_SELECT, OnUpdateSelect)
ON_COMMAND(ID_EDIT_REDO, OnEditRedo)
ON_UPDATE_COMMAND_UI(ID_EDIT_REDO, OnUpdateEditRedo)
ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)
ON_WM_PAINT()
ON_COMMAND(IDT_CURVE, OnCurve)
ON_COMMAND(IDT_POLY, OnPoly)
ON_WM_LBUTTONDBLCLK()
ON_COMMAND(ID_WIDTH_NORMAL, OnWidthNormal)
ON_COMMAND(ID_WIDTH_THIN, OnWidthThin)
ON_COMMAND(ID_WIDTH_WIDE, OnWidthWide)
ON_COMMAND(ID_FILL_FALSE, OnFillFalse)
ON_COMMAND(ID_FILL_TRUE, OnFillTrue)
ON_UPDATE_COMMAND_UI(ID_FILL_TRUE, OnUpdateFillTrue)
ON_UPDATE_COMMAND_UI(ID_FILL_FALSE, OnUpdateFillFalse)
ON_UPDATE_COMMAND_UI(ID_WIDTH_NORMAL, OnUpdateWidthNormal)
ON_UPDATE_COMMAND_UI(ID_WIDTH_THIN, OnUpdateWidthThin)
ON_UPDATE_COMMAND_UI(ID_WIDTH_WIDE, OnUpdateWidthWide)
ON_UPDATE_COMMAND_UI(IDT_CURVE, OnUpdateCurve)
ON_UPDATE_COMMAND_UI(ID_COLOR_BLACK, OnUpdateColorBlack)
ON_UPDATE_COMMAND_UI(ID_COLOR_BLUE, OnUpdateColorBlue)
ON_UPDATE_COMMAND_UI(ID_COLOR_CYAN, OnUpdateColorCyan)
ON_UPDATE_COMMAND_UI(ID_COLOR_GRAY, OnUpdateColorGray)
ON_UPDATE_COMMAND_UI(ID_COLOR_GREEN, OnUpdateColorGreen)
ON_UPDATE_COMMAND_UI(ID_COLOR_PINK, OnUpdateColorPink)
ON_UPDATE_COMMAND_UI(ID_COLOR_RED, OnUpdateColorRed)
ON_UPDATE_COMMAND_UI(ID_COLOR_WHITE, OnUpdateColorWhite)
ON_UPDATE_COMMAND_UI(ID_COLOR_YELLOW, OnUpdateColorYellow)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDemo1View construction/destruction
CDemo1View::CDemo1View()
{
// TODO: add construction code here
m_bDrawing=false;
m_nMouseMode = IDT_LINE;
m_usrCurrentObject = NULL;
m_nCurrentColor = UD_RED;
m_iPenWidth = WIDTH_THIN;
m_bFill = false;
m_pSelect = NULL; //没有选中区域
m_bClip = false; //剪贴扳为空
virtualline=false;
m_pStack =new Stack(3); //栈的大小
m_bFirstSave = true; //可以保存空白屏幕
m_bShowGrid = false;
}
CDemo1View::~CDemo1View()
{
if(m_pSelect)
{
delete m_pSelect;
m_pSelect = NULL;
}
if(m_pStack)
{
delete m_pStack;
m_pStack = NULL;
}
if(m_usrCurrentObject)
{
delete m_usrCurrentObject;
m_usrCurrentObject = NULL;
}
}
BOOL CDemo1View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
//加载自定义光标资源
m_hcurCross = (HCURSOR)::LoadImage(cs.hInstance,
MAKEINTRESOURCE(IDC_USERDRAW), IMAGE_CURSOR,
32, 32, LR_DEFAULTCOLOR);
//加载光标的类方法(与上述方法功能类似)
CWinApp* pApp = ::AfxGetApp();//获得当前CWinApp对象指针
m_hcurMoving = pApp->LoadCursor(IDC_USERMOVING);
m_hcurArrow = pApp->LoadCursor(IDC_USERARROW);
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CDemo1View drawing
void CDemo1View::OnDraw(CDC* pDC)
{
CDemo1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CDemo1View printing
BOOL CDemo1View::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CDemo1View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CDemo1View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CDemo1View diagnostics
#ifdef _DEBUG
void CDemo1View::AssertValid() const
{
CView::AssertValid();
}
void CDemo1View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CDemo1Doc* CDemo1View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDemo1Doc)));
return (CDemo1Doc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDemo1View message handlers
void CDemo1View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDC* pDC = GetDC();//获得DC
OnPrepareDC(pDC);//设置DC的滚动属性,与ScollView的滚动有关
pDC->DPtoLP(&point);//转换当前点为逻辑位置坐标
CDemo1Doc* pDoc = GetDocument();
CRect client;
GetClientRect(&client);//获得客户区范围
ClientToScreen(&client);//转化为屏幕坐标
::ClipCursor(&client);//锁定鼠标移动范围
switch(m_nMouseMode)
{
case IDT_SELECT:
if(!m_pSelect)//如果没选中
{
m_bDrawing = true;
m_pSelect = new CDrawSelect(m_nCurrentColor);
m_pSelect->NewPoint(point.x, point.y);
break;
}
else//如果选中
{
CDC * pDC = GetDC();
m_pSelect->Clear(pDC);
m_bDrawing = false;
if (m_pSelect->isin(point))//如果鼠标进入
{
m_pSelect->maponmouse=true;
m_pSelect->p_maponmouse.x=point.x;
m_pSelect->p_maponmouse.y=point.y;
if (!(m_pSelect->copied))//如果没有存储两个图
{
m_pSelect->maponmouse=true;
m_pSelect->copied=true;
Selected_Copy();
Back_CutCopy();
ReleaseDC(pDC);
}
break;
}
else//如果落在选中的矩形外边
{
virtualline=false;
delete m_pSelect;
m_pSelect = NULL;
break;
}
}
case IDT_LINE:
m_bDrawing = true;
m_usrCurrentObject = new CDrawLine(m_nCurrentColor, m_iPenWidth);
m_usrCurrentObject->NewPoint(point.x, point.y);
break;
case IDT_CURVE:
m_bD
一个十分不错的采用doc/view结构封装的Activex绘图程序
2星 需积分: 2 18 浏览量
2009-12-02
21:58:17
上传
评论
收藏 46KB ZIP 举报
zhadong
- 粉丝: 16
- 资源: 7
最新资源
- 基于Pytorch训练CIRAR10上分类算法.zip
- Pytorch-pytorch深度学习教程之Tensorboard.zip
- 基于C++和Python开发yolov8-face作为人脸检测器dlib作为人脸识别器的人脸考勤系统源码+项目说明.zip
- Pytorch-pytorch深度学习教程之变分自动编码器.zip
- Pytorch-pytorch深度学习教程之神经风格迁移.zip
- Pytorch-pytorch深度学习教程之深度残差网络.zip
- Pytorch-pytorch深度学习教程之循环神经网络.zip
- Pytorch-pytorch深度学习教程之逻辑回归.zip
- Pytorch-pytorch深度学习教程之双向循环网络.zip
- Pytorch-pytorch深度学习教程之卷积神经网络.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈