⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawview.cpp

📁 Wince 下的画图软件的源代码,是一款不错的EVC图形编辑软件,可以直接作为PMP的配套软件.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	}
	
	
	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 + -