// Demo1View.cpp : implementation of the CDemo1View class
//
#include "stdafx.h"
#include "Demo1.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 0xffffff
#define UD_BLACK 0
#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_ARROW, 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_PLINE, 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_UPDATE_COMMAND_UI(IDT_DELETE, OnUpdateDelete)
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_COMMAND(ID_EXAMINE_COLOR, OnExamineColor)
ON_COMMAND(ID_EXAMINE_TOOL, OnExamineTool)
ON_COMMAND(grid, Ongrid)
ON_UPDATE_COMMAND_UI(ID_COLOR_RED, OnUpdateColorRed)
ON_WM_RBUTTONDOWN()
ON_COMMAND(ID_MENUITEM32819, OnMyCut)
ON_COMMAND(ID_MENUITEM32817, OnMyCopy)
ON_COMMAND(ID_MENUITEM32818, OnMyPaste)
//}}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(4);
m_bFirstSave = true;
showgrid=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);
// CClient dc(this);
// 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();
//如果以前有虚线则清除
if (virtualline)
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;
//m_bClip = true;
Selected_Copy();
Back_CutCopy();
ReleaseDC(pDC);
}
break;
}
else//如果落在选中的矩形外边
{
//SaveInStack();
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_bDrawing = true;
m_usrCurrentObject = new CDrawCurve(m_nCurrentColor, m_iPenWidth);
m_usrCurrentObject->NewPoint(point.x, point.y);
break;
case IDT_RECTANGLE:
VC++实现简单的画图板程序
4星 · 超过85%的资源 需积分: 10 44 浏览量
2009-06-10
16:42:03
上传
评论
收藏 76KB RAR 举报
zero569684450
- 粉丝: 13
- 资源: 11
最新资源
- TFS(淘宝分布式存储引擎代码
- 海尔H42E10 6i981BTA DH1PY600000 MBOOT usb.bin 程序.zip
- 网盘的功能实现之数据库搭建笔记
- 软件工程与软件测试阶段作业三.doc
- 软件工程中的人工智能辅助设计研究.pptx
- 海尔智能电视刷机数据 H42E07 机编DH1QR000H07 务必确认机编一致 强制刷机 整机USB升级主程序
- 4444444444444444444
- 基于PHP实现响应式创业园区管委会网站.zip
- 安卓手机用作电脑网络摄像头的工具文件
- 海尔智能电视刷机数据 H32E10 机编DH1QX000805 务必确认机编一致 强制刷机 整机USB升级主程序
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈