📄 ex41view.cpp
字号:
// ex41View.cpp : implementation of the CEx41View class
//
#include "stdafx.h"
#include "ex41.h"
#include "ex41Doc.h"
#include "ex41View.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CEx41View
#define BLACK_COLOR RGB(0,0,0) //黑色
#define BLUE_COLOR RGB(0,0,255) //蓝色
#define GREEN_COLOR RGB(0,255,0) //绿色
#define RED_COLOR RGB(255,0,0) //红色
#define YELLOW_COLOR RGB(255,255,0) //黄色
IMPLEMENT_DYNCREATE(CEx41View, CView)
BEGIN_MESSAGE_MAP(CEx41View, CView)
//{{AFX_MSG_MAP(CEx41View)
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_COMMAND(ID_COL_BLACK, OnColBlack)
ON_UPDATE_COMMAND_UI(ID_COL_BLACK, OnUpdateColBlack)
ON_COMMAND(ID_COL_BLUE, OnColBlue)
ON_UPDATE_COMMAND_UI(ID_COL_BLUE, OnUpdateColBlue)
ON_COMMAND(ID_COL_GREEN, OnColGreen)
ON_UPDATE_COMMAND_UI(ID_COL_GREEN, OnUpdateColGreen)
ON_COMMAND(ID_COL_RED, OnColRed)
ON_UPDATE_COMMAND_UI(ID_COL_RED, OnUpdateColRed)
ON_COMMAND(ID_COL_YELLOW, OnColYellow)
ON_UPDATE_COMMAND_UI(ID_COL_YELLOW, OnUpdateColYellow)
ON_COMMAND(ID_COL_CUSTOM, OnColCustom)
ON_UPDATE_COMMAND_UI(ID_COL_CUSTOM, OnUpdateColCustom)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEx41View construction/destruction
CEx41View::CEx41View()
{
// TODO: add construction code here
//鼠标没有拖动
m_isDragging = false;
m_curCol = BLACK_COLOR;
m_curID = ID_COL_BLACK;
}
CEx41View::~CEx41View()
{
}
BOOL CEx41View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CEx41View drawing
void CEx41View::OnDraw(CDC* pDC)
{
CEx41Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CEx41View diagnostics
#ifdef _DEBUG
void CEx41View::AssertValid() const
{
CView::AssertValid();
}
void CEx41View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CEx41Doc* CEx41View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CEx41Doc)));
return (CEx41Doc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CEx41View message handlers
void CEx41View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_ptStart = point;
m_ptEnd = point;
//捕获鼠标
SetCapture();
//设置鼠标正在拖动
m_isDragging = true;
CView::OnLButtonDown(nFlags, point);
}
void CEx41View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//设置鼠标在客户区移动时候的光标为十字形
::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_CROSS));
//当鼠标处于拖动状态的时候
if(m_isDragging){
//获取当前客户区设备环境类
CClientDC cDC(this);
//创建一个划虚线的画笔对象
CPen pen;
pen.CreatePen(PS_DOT,1,RGB(0,0,0));
//将画笔选进设备表述表
cDC.SelectObject(&pen);
//设置背景模式,间隙不填充颜色
cDC.SetBkMode(TRANSPARENT);
//设置当前色的反色
cDC.SetROP2(R2_NOT);
//绘制直线擦掉以前的直线
cDC.MoveTo(m_ptStart);
cDC.LineTo(m_ptEnd);
//绘制直线
cDC.MoveTo(m_ptStart);
cDC.LineTo(point);
m_ptEnd = point;
}
CView::OnMouseMove(nFlags, point);
}
void CEx41View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//设置拖动状态为false,表示画一条直线结束
if(m_isDragging){
//设置一次拖动结束
m_isDragging = false;
//结束鼠标捕获
::ReleaseCapture();
CClientDC cDC(this);
CPen pen, *pOldPen;
//根据当前的颜色创建画笔对象
pen.CreatePen(PS_SOLID,1,m_curCol);
//将画笔选进设备表述表,并保存旧的画笔对象
pOldPen=cDC.SelectObject(&pen);
//绘制直线
cDC.MoveTo(m_ptStart);
cDC.LineTo(point);
//将旧的画笔对象选进设备描述表
cDC.SelectObject(pOldPen);
m_ptEnd = point;
}
CView::OnLButtonUp(nFlags, point);
}
void CEx41View::OnColBlack()
{
// TODO: Add your command handler code here
m_curCol = BLACK_COLOR;
m_curID = ID_COL_BLACK;
}
void CEx41View::OnUpdateColBlack(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_curID == ID_COL_BLACK?1:0);
}
void CEx41View::OnColBlue()
{
// TODO: Add your command handler code here
m_curCol = BLUE_COLOR;
m_curID = ID_COL_BLUE;
}
void CEx41View::OnUpdateColBlue(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_curID == ID_COL_BLUE?1:0);
}
void CEx41View::OnColGreen()
{
// TODO: Add your command handler code here
m_curCol = GREEN_COLOR;
m_curID = ID_COL_GREEN;
}
void CEx41View::OnUpdateColGreen(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_curID == ID_COL_GREEN?1:0);
}
void CEx41View::OnColRed()
{
// TODO: Add your command handler code here
m_curCol = RED_COLOR;
m_curID = ID_COL_RED;
}
void CEx41View::OnUpdateColRed(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_curID == ID_COL_RED?1:0);
}
void CEx41View::OnColYellow()
{
// TODO: Add your command handler code here
m_curCol = YELLOW_COLOR;
m_curID = ID_COL_YELLOW;
}
void CEx41View::OnUpdateColYellow(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_curID == ID_COL_YELLOW?1:0);
}
void CEx41View::OnColCustom()
{
// TODO: Add your command handler code here
CColorDialog dlg;
//打开颜色对话框,获取选定的颜色
if(dlg.DoModal()==IDOK)
m_curCol=dlg.GetColor();
m_curID = ID_COL_CUSTOM;
}
void CEx41View::OnUpdateColCustom(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_curID == ID_COL_CUSTOM?1:0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -