📄 drawview.cpp
字号:
}
CView::OnLButtonUp(nFlags, point);
}
void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
CDrawDoc *pDoc=this->GetDocument();
CClientDC dc(this);
if(m_tool_type==Tool_PEN)
{
m_pCurrentUnit=new CDPen;
pDoc->m_PenArray.Add((CDPen*)m_pCurrentUnit);
m_pCurrentUnit->m_FirstPoint=m_FirstPt;
m_pCurrentUnit->m_PenColor=m_CurPen;
m_pCurrentUnit->m_BackgroundColor=m_CurBrush;
m_pCurrentUnit->m_SecondPoint=point;
m_pCurrentUnit->DrawActive(&dc,point,CMD_LBUP);
m_FirstPt=point;
}
else if(m_tool_type==Tool_LINE)
{
m_pCurrentUnit=new CDLine;
pDoc->m_LineArray.Add((CDLine*)m_pCurrentUnit);
m_pCurrentUnit->m_FirstPoint=m_FirstPt;
m_pCurrentUnit->m_SecondPoint=m_RopSecondPoint;
m_pCurrentUnit->m_BackgroundColor=m_CurBrush;
m_pCurrentUnit->m_PenColor=m_CurPen;
m_pCurrentUnit->DrawActive(&dc,point,CMD_LBMOVE);
}
else if(m_tool_type==Tool_RECTANGLE)
{
m_pCurrentUnit=new CDRectangle;
pDoc->m_RectangleArray.Add((CDRectangle *)m_pCurrentUnit);
m_pCurrentUnit->m_FirstPoint=m_FirstPt;
m_pCurrentUnit->m_PenColor=m_CurPen;
m_pCurrentUnit->m_BackgroundColor=m_CurBrush;
m_pCurrentUnit->m_SecondPoint=point;
m_pCurrentUnit->m_transparence=m_transparence;
m_pCurrentUnit->DrawActive(&dc,point,CMD_LBMOVE);
}
else if(m_tool_type==Tool_ELLIPSE) //实心圆
{
m_pCurrentUnit=new CDEllipse;
pDoc->m_EllipseArray.Add((CDEllipse*)m_pCurrentUnit);
m_pCurrentUnit->m_FirstPoint=m_FirstPt;
m_pCurrentUnit->m_PenColor=m_CurPen;
m_pCurrentUnit->m_BackgroundColor=m_CurBrush;
m_pCurrentUnit->m_SecondPoint=point;
m_pCurrentUnit->m_transparence=m_transparence;
m_pCurrentUnit->DrawActive(&dc,point,CMD_LBMOVE);
}
else if(m_tool_type==Tool_CHAR)
{
}
else if(m_tool_type==Tool_SEL)
{
if(SelectB.m_hWnd!=NULL)
{
CDC *pDC=GetWindowDC();
RECT rc;
SelectB.GetWindowRect(&rc);
this->ScreenToClient(&rc);
if(m_CurPtSel==Tool_SEL_LEFT)
{
SelectB.MoveWindow(point.x,rc.top,rc.right-point.x,rc.bottom-rc.top);
SelectB.RedrawWindow();
CDC *pDCMem = CDC::FromHandle(hMemDC);
pDC->BitBlt(0,0,iScreenWidth,iScreenHeight,pDCMem,0,0,SRCCOPY);
}
else if(m_CurPtSel==Tool_SEL_RIGHT)
{
SelectB.MoveWindow(rc.left,rc.top,point.x-rc.left,rc.bottom-rc.top);
SelectB.RedrawWindow();
CDC *pDCMem = CDC::FromHandle(hMemDC);
pDC->BitBlt(0,0,iScreenWidth,iScreenHeight,pDCMem,0,0,SRCCOPY);
}
else if( m_CurPtSel==Tool_SEL_TOP)
{
CDC *pDCMem = CDC::FromHandle(hMemDC);
pDC->BitBlt(0,0,iScreenWidth,iScreenHeight,pDCMem,0,0,SRCCOPY);
SelectB.MoveWindow(rc.left,point.y,rc.right-rc.left,rc.bottom-point.y);
SelectB.RedrawWindow();
}
else if( m_CurPtSel==Tool_SEL_BOTTOM)
{
CDC *pDCMem = CDC::FromHandle(hMemDC);
pDC->BitBlt(0,0,iScreenWidth,iScreenHeight,pDCMem,0,0,SRCCOPY);
SelectB.MoveWindow(rc.left,rc.top,rc.right-rc.left,point.y-rc.top);
SelectB.RedrawWindow();
}
else if( m_CurPtSel==Tool_SEL_CENTER)
{
CDC *pDCMem = CDC::FromHandle(hMemDC);
pDC->BitBlt(0,0,iScreenWidth,iScreenHeight,pDCMem,0,0,SRCCOPY);
int Move_x,Move_y;
Move_x=point.x-m_FirstPt.x;
Move_y=point.y-m_FirstPt.y;
SelectB.MoveWindow(m_SecondPt.x+Move_x,m_SecondPt.y+Move_y,rc.right-rc.left,rc.bottom-rc.top);
SelectB.RedrawWindow();
}
SelectB.UpdateWindow();
}
else
{
}
}
CView::OnMouseMove(nFlags, point);
}
//==========================画点=======================================
void CDrawView::DrawActive(CDC *pDC,CPoint point)
{
CPen m_pen;
m_pen.CreatePen(PS_SOLID,2,m_CurPen);
CPen* pen=(CPen*)pDC->SelectObject(&m_pen);
COLORREF OldColor=pDC->SetBkColor(m_BackgroundColor);
int OldBkMode=pDC->SetBkMode(OPAQUE); // m_BkMode
pDC->MoveTo(m_FirstPt);
pDC->LineTo(m_SecondPt);
pDC->SelectObject(pen);
pDC->SetBkMode(m_BkMode);
pDC->SetBkColor(OldColor);
}
//==========================画实心矩形==================================
void CDrawView::DrawCharActive(CDC *pDC,CPoint point)
{
CPen m_pen;
m_pen.CreatePen(PS_DASH,2,RGB(0,0,0));
CPen* pen=(CPen*)pDC->SelectObject(&m_pen);
CBrush m_brush;
m_brush.CreateSolidBrush(m_CurBrush);
pDC->SelectObject(&m_brush);
COLORREF OldColor=pDC->SetBkColor(m_BackgroundColor);
int OldBkMode=pDC->SetBkMode(OPAQUE);
CRect rect;
rect.SetRect(m_FirstPt,m_SecondPt);
rect.InflateRect(3,3);
pDC->Rectangle(rect);
pDC->SelectObject(pen);
pDC->SetBkMode(m_BkMode);
pDC->SetBkColor(OldColor);
}
//====================================画有边框实矩形=========================
void CDrawView::DrawRectangleActive(CDC *pDC,CPoint point)
{
CPen m_pen;
m_pen.CreatePen(PS_SOLID,2,m_CurPen);
CPen* pen=(CPen*)pDC->SelectObject(&m_pen);
CBrush m_brush;
m_brush.CreateSolidBrush(m_CurBrush);
pDC->SelectObject(&m_brush);
COLORREF OldColor=pDC->SetBkColor(m_BackgroundColor);
int OldBkMode=pDC->SetBkMode(OPAQUE); // m_BkMode
CRect rect;
rect.SetRect(m_FirstPt,m_SecondPt);
rect.InflateRect(3,3);
pDC->Rectangle(rect);
pDC->SelectObject(pen);
pDC->SetBkMode(m_BkMode);
pDC->SetBkColor(OldColor);
}
//==================画有边框空矩形=========================
void CDrawView::DrawKRectangleActive(CDC *pDC,CPoint point)
{
CPen m_pen;
m_pen.CreatePen(PS_SOLID,2,m_CurPen);
CPen* pen=(CPen*)pDC->SelectObject(&m_pen);
pDC->SelectStockObject(NULL_BRUSH);
COLORREF OldColor=pDC->SetBkColor(m_BackgroundColor);
int OldBkMode=pDC->SetBkMode(OPAQUE); // m_BkMode
CRect rect;
rect.SetRect(m_FirstPt,m_SecondPt);
rect.InflateRect(3,3);
pDC->Rectangle(rect);
pDC->SelectObject(pen);
pDC->SetBkMode(m_BkMode);
pDC->SetBkColor(OldColor);
}
//======================= 画圆=====================================
void CDrawView::DrawEllipseActive(CDC *pDC,CPoint point)
{
CPen m_pen;
m_pen.CreatePen(PS_SOLID,2,m_CurPen);
CPen* pen=(CPen*)pDC->SelectObject(&m_pen);
CBrush m_brush;
m_brush.CreateSolidBrush(m_CurBrush);
pDC->SelectObject(&m_brush);
COLORREF OldColor=pDC->SetBkColor(m_BackgroundColor);
int OldBkMode=pDC->SetBkMode(OPAQUE); // m_BkMode
pDC->Ellipse(m_FirstPt.x,m_FirstPt.y,m_SecondPt.x,m_SecondPt.y);
pDC->SelectObject(pen);
pDC->SetBkMode(m_BkMode);
pDC->SetBkColor(OldColor);
}
//======================= 画空心圆=====================================
void CDrawView::DrawKEllipseActive(CDC *pDC,CPoint point)
{
CPen m_pen;
m_pen.CreatePen(PS_SOLID,2,m_CurPen);
CPen* pen=(CPen*)pDC->SelectObject(&m_pen);
pDC->SelectStockObject(NULL_BRUSH);
COLORREF OldColor=pDC->SetBkColor(m_BackgroundColor);
int OldBkMode=pDC->SetBkMode(OPAQUE); // m_BkMode
pDC->Ellipse(m_FirstPt.x,m_FirstPt.y,m_SecondPt.x,m_SecondPt.y);
pDC->SelectObject(pen);
pDC->SetBkMode(m_BkMode);
pDC->SetBkColor(OldColor);
}
void CDrawView::OnToolCdialog()
{
SipShowIM(SIPF_OFF);
CColorDialog CColS;
CColS.m_cc.Flags |= CC_FULLOPEN | CC_RGBINIT;
CColS.m_cc.rgbResult = RGB(255, 0, 0);
if (CColS.DoModal() == IDOK)
{
m_CurPen = CColS.GetColor();
}
}
//===========选择前景与背景色=============================
void CDrawView::OnToolFbc()
{
SipShowIM(SIPF_OFF);
CMainFrame* pMainFrame=(CMainFrame*)AfxGetMainWnd();
if(m_toolcolorFB==Tool_S_PEN)
{m_toolcolorFB=Tool_S_BRUSH;
pMainFrame->m_ToolBarCOL.SetButtonInfo(0,ID_TOOL_FBC,TBBS_BUTTON,0);}
else {m_toolcolorFB=Tool_S_PEN;
pMainFrame->m_ToolBarCOL.SetButtonInfo(0,ID_TOOL_FBC,TBBS_BUTTON,2);}
}
//===========设置背景色==================================
void CDrawView::OnToolBc()
{
SipShowIM(SIPF_OFF);
m_toolcolorFB=Tool_S_BRUSH;
}
//===========设置前景色==================================
void CDrawView::OnToolFc()
{
m_toolcolorFB=Tool_S_PEN;
}
void CDrawView::OnToolPen()
{
SipShowIM(SIPF_OFF);
OnToolChange();
m_tool_type=Tool_PEN; //画笔
RedrawWindow();
}
void CDrawView::OnToolLine()
{
SipShowIM(SIPF_OFF);
OnToolChange();
m_tool_type=Tool_LINE; //线
RedrawWindow();
}
void CDrawView::OnToolRectangle()
{
SipShowIM(SIPF_OFF);
OnToolChange();
m_tool_type=Tool_RECTANGLE; //实心矩形
RedrawWindow();
}
void CDrawView::OnToolBSel()
{
SipShowIM(SIPF_OFF);
OnToolChange();
m_tool_type=Tool_SEL; //选取
RedrawWindow();
}
void CDrawView::OnToolEllipse()
{
SipShowIM(SIPF_OFF);
OnToolChange();
m_tool_type=Tool_ELLIPSE; //实心圆
RedrawWindow();
}
void CDrawView::OnToolChange()
{
if(m_tool_type==Tool_SEL)
{
if(SelectB.m_hWnd!=NULL)
{
SelectB.DestroyWindow();
SipShowIM(SIPF_OFF);
}
}
else if(m_tool_type==Tool_BIGSMALL)
{
if(m_BigSmall.m_hWnd!=NULL)
{
m_BigSmall.DestroyWindow();
SipShowIM(SIPF_OFF);
}
}
}
void CDrawView::OnToolChara()
{
OnToolChange() ;
SipShowIM(SIPF_ON);
m_tool_type=Tool_CHAR; //字符
RedrawWindow();
}
void CDrawView::OnToolBBig()
{
OnToolChange() ;
SipShowIM(SIPF_OFF);
m_tool_type=Tool_BIGSMALL; //放大镜
RedrawWindow();
}
void CDrawView::GetScreen()
{
HBITMAP hBitmap,hOldBitmap;
int xScrn,yScrn;
int nWidth,nHeight;
SipShowIM(SIPF_OFF);
xScrn=25;
yScrn=28;
nWidth=iScreenWidth-xScrn;
nHeight=iScreenHeight-yScrn;
hScrDC=CreateDC(L"DISPLAY",NULL,NULL,NULL);
hMemDC=CreateCompatibleDC(hScrDC);
hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
hOldBitmap = (HBITMAP)SelectObject(hMemDC,hBitmap);
BitBlt(hMemDC,0,0,nWidth,nHeight,hScrDC,xScrn,yScrn,SRCCOPY);
::DeleteObject(hBitmap);
::DeleteObject(hOldBitmap);
}
void CDrawView::OnToolPall()
{
m_transparence=false;
}
void CDrawView::OnToolPallk()
{
m_transparence=true;
}
void CDrawView::OnUpdateToolPen(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_tool_type==Tool_PEN?1:0);
}
void CDrawView::OnUpdateToolChara(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_tool_type==Tool_CHAR?1:0);
}
void CDrawView::OnUpdateToolEllipse(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_tool_type==Tool_ELLIPSE?1:0);
}
void CDrawView::OnUpdateToolLine(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_tool_type==Tool_LINE?1:0);
}
void CDrawView::OnUpdateToolRectangle(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_tool_type==Tool_RECTANGLE?1:0);
}
void CDrawView::OnUpdateToolPall(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(!m_transparence?1:0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -