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

📄 drawview.cpp

📁 用EVC4.0开发的一个画图板程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	m_CurrentPen.DeleteObject();
	m_CurrentPen.CreatePen(PS_SOLID, globalSIZE, corCol);
	dc.SelectObject(&m_CurrentPen);
		if (GetCapture() != this)
			return;
	switch(m_var)
	{
		 case 1: dc.MoveTo(loc);
			     break;
		 case 2: //dc.Rectangle(CRect(m_OldPoint,loc));
			     dc.SelectObject(&HollowBrush);
			     dc.Rectangle(rect1,rect2, loc.x, loc.y);
			     dc.SelectObject(&m_PreviousBrush);			     
		         break;
		 case 3: //dc.Rectangle(rect1, rect2, loc.x, loc.y);
			     dc.FillRect(CRect(rect1,rect2, loc.x, loc.y),&m_CurrentBrush);
			     break;
		 case 4: dc.SelectObject(&HollowBrush);
			     dc.RoundRect(rect1, rect2, loc.x, loc.y, 15, 13);
			     dc.SelectObject(&m_PreviousBrush); // select default brush
			     break;
		 case 5: dc.SelectObject(&m_CurrentBrush);
			     dc.RoundRect(rect1, rect2, loc.x, loc.y, 15, 13);
                 dc.SelectObject(&m_PreviousBrush);
			     break;
		 case 6: dc.SelectObject(&HollowBrush);
			     dc.Ellipse(rect1, rect2, loc.x, loc.y);
				 dc.SelectObject(&m_PreviousBrush);
		         break;
		 case 7: dc.SelectObject(&m_CurrentBrush);
			     dc.Ellipse(rect1, rect2, loc.x, loc.y);
				 dc.SelectObject(&m_PreviousBrush);
			     //dc.Ellipse(CRect(m_OldPoint,loc));
			     break;
		 case 8: b1=false; break;
		 case 9: dc.SelectObject(&eraserPEN);
			     dc.MoveTo(m_OldPoint.x, m_OldPoint.y);
			 //    dc.LineTo(loc.x, loc.y);
		 default: break;
	}
	    paint=0;
//		canundo=true;
		ReleaseCapture();
		RecordHistory();
        undo++;		

	CView::OnLButtonUp(nFlags, loc);
}

void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
    CClientDC  dc(this);
	m_CurrentPen.DeleteObject();
	m_CurrentPen.CreatePen(PS_SOLID, globalSIZE, corCol);
//	CPen pen(PS_SOLID,globalSIZE,corCol);
	dc.SelectObject(&m_CurrentPen);
 //   CPen *p=dc.SelectObject(&pen);
	CString str;
	str.Format(_T("x=%4d , y=%4d"), str,point.x,point.y);
	str="      Mouse located at: "+str;            //在str2后追加str,返回str2
	CString coordinatestext;
	coordinatestext.Format(_T("x=%4d y=%4d"),point.x,point.y);
	CMainFrame *pFrame=(CMainFrame *)AfxGetMainWnd();
//	int index=pFrame->m_wndStatusBar.CommandToIndex(ID_INDICATOR_COORDINATES);
//	pFrame->m_wndStatusBar.SetPaneText(index,coordinatestext);
	pFrame->m_wndStatusBar.SetWindowText(str);

	if(paint==1){
	  switch(m_var)
	  {
	    case 1: dc.SelectObject(&m_CurrentPen);
			    dc.SelectObject(&m_CurrentBrush);
			    dc.SetROP2(R2_NOTXORPEN);
			    dc.MoveTo(rect1, rect2);
			    dc.LineTo(point.x, point.y);
			    dc.MoveTo(rect1, rect2);
			    dc.LineTo(m_OldPoint.x, m_OldPoint.y);
			    break;
	    case 2: dc.SelectObject(&HollowBrush);
			    dc.SelectObject(&m_CurrentPen);
			    dc.SetROP2(R2_NOTXORPEN);
			    dc.Rectangle(rect1, rect2, point.x, point.y);
	  		    dc.Rectangle(rect1, rect2, m_OldPoint.x, m_OldPoint.y);
				dc.SelectObject(&m_PreviousBrush);
				break;
		case 3: dc.SelectObject(&m_CurrentPen);
			    dc.SelectObject(&m_CurrentBrush);
			    dc.SetROP2(R2_NOTXORPEN);
		        dc.Rectangle(rect1, rect2, point.x, point.y);
			    dc.Rectangle(rect1, rect2, m_OldPoint.x, m_OldPoint.y);
				break;
		case 4: dc.SelectObject(&HollowBrush);
			    dc.SelectObject(&m_CurrentPen);
			    dc.SetROP2(R2_NOTXORPEN);
			    dc.RoundRect(rect1, rect2, point.x, point.y, 15, 13);
			    dc.RoundRect(rect1, rect2, m_OldPoint.x, m_OldPoint.y, 15, 13);
			    dc.SelectObject(&m_PreviousBrush);
				break;
		case 5: dc.SelectObject(&m_CurrentPen);
			    dc.SelectObject(&m_CurrentBrush);
			    dc.SetROP2(R2_NOTXORPEN);
			    dc.RoundRect(rect1, rect2, point.x, point.y, 15, 13);
			    dc.RoundRect(rect1, rect2, m_OldPoint.x, m_OldPoint.y, 15, 13);
				break;
		case 6: dc.SelectObject(&HollowBrush);
		        dc.SelectObject(&m_CurrentPen);
			    dc.SetROP2(R2_NOTXORPEN);
			    dc.Ellipse(rect1, rect2, point.x, point.y);
			    dc.Ellipse(rect1, rect2, m_OldPoint.x, m_OldPoint.y);
			    dc.SelectObject(&m_PreviousBrush); // select default brush
				break;
		case 7: dc.SelectObject(&m_CurrentPen);
			    dc.SelectObject(&m_CurrentBrush);
			    dc.SetROP2(R2_NOTXORPEN);
			    dc.Ellipse(rect1, rect2, point.x, point.y);
			    dc.Ellipse(rect1, rect2, m_OldPoint.x, m_OldPoint.y);
				break;
		case 9: dc.SetROP2(R2_WHITE);
			    dc.SelectObject(&eraserPEN);
			    //dc.SelectObject(&eraserPEN);
			    dc.MoveTo(m_OldPoint.x, m_OldPoint.y);
			    dc.LineTo(point.x, point.y);
			   // dc.MoveTo(m_OldPoint.x, m_OldPoint.y);
				break;
	    default: break;
	  }
	}
	if(b1==TRUE)
	{
		dc.MoveTo(m_OldPoint);
		dc.LineTo(point);
	}
	m_OldPoint=point;
	CView::OnMouseMove(nFlags, point);
}

void CDrawView::OnReset() 
{
	// TODO: Add your command handler code here
	CClientDC DC(this);
	DC.SelectObject(&m_bkbrush);
	m_pHistoryStack->Add(NULL);
	InvalidateRect(NULL);
}


void CDrawView::OnBlackbrush() 
{
	// TODO: Add your command handler code here
	m_PreviousBrush.DeleteObject();
	m_PreviousBrush.CreateStockObject(BLACK_BRUSH);
	
	m_CurrentBrush.DeleteObject();
	m_CurrentBrush.CreateStockObject(BLACK_BRUSH);
}

void CDrawView::OnBluebrush() 
{
	// TODO: Add your command handler code here
	m_PreviousBrush.DeleteObject();
	m_PreviousBrush.CreateSolidBrush(RGB(0,0,255));

	m_CurrentBrush.DeleteObject();
	m_CurrentBrush.CreateSolidBrush(RGB(0,0,255));
}

void CDrawView::OnCustomBrush() 
{
	// TODO: Add your command handler code here
	CHOOSECOLOR dlgColor;
	dlgColor.Flags = CC_RGBINIT | CC_FULLOPEN | CC_ANYCOLOR |CC_ENABLEHOOK;
	dlgColor.lStructSize=sizeof   (CHOOSECOLOR); 
    dlgColor.hwndOwner=NULL;                       //父窗口句柄 
    dlgColor.rgbResult=0; 

	MessageBox(_T("brush"));
//	if (dlgColor != IDOK)
//			return;
//	m_CurrentBrush.DeleteObject();
//	m_CurrentBrush.CreateSolidBrush(dlgColor.GetColor());
	this->InvalidateRect(NULL);
}

void CDrawView::OnGreenbrush() 
{
	// TODO: Add your command handler code here
	
	m_PreviousBrush.DeleteObject();
	m_PreviousBrush.CreateSolidBrush(RGB(0,255,0));

	m_CurrentBrush.DeleteObject();
	m_CurrentBrush.CreateSolidBrush(RGB(0,255,0));
}

void CDrawView::OnRedbrush() 
{
	// TODO: Add your command handler code here
	m_PreviousBrush.DeleteObject();
	m_PreviousBrush.CreateSolidBrush(RGB(255,0,0));

	m_CurrentBrush.DeleteObject();
	m_CurrentBrush.CreateSolidBrush(RGB(255,0,0));
}

void CDrawView::OnWhitebrush() 
{
	// TODO: Add your command handler code here
	m_PreviousBrush.DeleteObject();
	m_PreviousBrush.CreateStockObject(WHITE_BRUSH);
	
	m_CurrentBrush.DeleteObject();
	m_CurrentBrush.CreateStockObject(WHITE_BRUSH);
}

void CDrawView::OnYellowbrush() 
{
	// TODO: Add your command handler code here
	m_PreviousBrush.DeleteObject();
	m_PreviousBrush.CreateSolidBrush(RGB(255,255,0));
	
	m_CurrentBrush.DeleteObject();
	m_CurrentBrush.CreateSolidBrush(RGB(255,255,0));
	
}


/*
 ***************************************************
    pen 
 ***************************************************
*/

void CDrawView::setSize()
{

	m_RedPen.DeleteObject();
	m_GreenPen.DeleteObject();
	m_BluePen.DeleteObject();
	m_YellowPen.DeleteObject();
	m_CustPen.DeleteObject();
	m_CurrentPen.DeleteObject();

	m_RedPen.CreatePen(PS_SOLID, globalSIZE, RGB(255,0,0));
	m_GreenPen.CreatePen(PS_SOLID, globalSIZE, RGB(0,255,0));
	m_BluePen.CreatePen(PS_SOLID, globalSIZE, RGB(0,0,255));
	m_YellowPen.CreatePen(PS_SOLID, globalSIZE, RGB(255, 255, 0));
	m_CurrentPen.CreatePen(PS_SOLID, globalSIZE, corCol);
	m_CustPen.CreatePen(PS_SOLID, globalSIZE, bgCol);

	m_OldPen.DeleteObject();
	m_OldPen.CreatePen(PS_SOLID, globalSIZE, RGB(0, 0, 0));

}

void CDrawView::OnBlackpen() 
{
	// TODO: Add your command handler code here
	corCol = RGB(0, 0, 0);	
	globalPEN = 5;
	setSize();
}

void CDrawView::OnBluepen() 
{
	// TODO: Add your command handler code here
	corCol = RGB(0, 0, 255);
	globalPEN = 3;
	setSize();
}

void CDrawView::OnGreenpen() 
{
	// TODO: Add your command handler code here
	corCol = RGB(0, 255, 0);
	globalPEN = 2;
	setSize();
}

void CDrawView::OnRedpen() 
{
	// TODO: Add your command handler code here
	corCol = RGB(255, 0, 0);
	globalPEN = 1;
	setSize();
}

void CDrawView::OnYellowpen() 
{
	// TODO: Add your command handler code here
	corCol = RGB(255, 255, 0);
	globalPEN = 4;
	setSize();
}

void CDrawView::OnCustomPen() 
{
	// TODO: Add your command handler code here
	
}

/*
 ***************************************************
    size 
 ***************************************************
*/


void CDrawView::OnOne() 
{
	// TODO: Add your command handler code here
	globalSIZE = 1;
	setSize();
}

void CDrawView::OnTwo() 
{
	// TODO: Add your command handler code here
	globalSIZE = 2;
	setSize();
}

void CDrawView::OnThree() 
{
	// TODO: Add your command handler code here
	globalSIZE = 3;
	setSize();
}

void CDrawView::OnCustomSize() 
{
	// TODO: Add your command handler code here
   CCustomSizeDlg diagOb3(_T("CCustomSizeDlg"), this,globalSIZE);
   diagOb3.DoModal();
//	m_memDC.SelectObject(&m_OldPen);
	setSize();
}
//**************************************************************************

//**************************************************************************
// *****************stack **************************************************
//**************************************************************************
void CDrawView::InitHistory(HBITMAP hBmp)
{
    m_pHistoryStack->Clear();
	m_pHistoryStack->Add(hBmp);
}

void CDrawView::RecordHistory()
{
    HBITMAP hBmp = CanvasToBmp();
//	MessageBox(_T("fdfdfd"));
	if (hBmp!=NULL)
	{
		m_pHistoryStack->Add(hBmp);
	}
}

HBITMAP CDrawView::CanvasToBmp()
{
  CDC     *pdc;  
  pdc=GetDC();  
  HBITMAP           bm;  
  CBitmap           bitmap;  
  CRect               rect;  
  GetClientRect(&rect);  
  CDC memdc;  
  memdc.CreateCompatibleDC(pdc);  
  bitmap.CreateCompatibleBitmap(pdc,   rect.Width(),rect.Height());  
  memdc.SelectObject(&bitmap);  
  //将dc中的拷贝到memdc中,又bitmap关联到了memdc   ,所以这个时候bitmap中就是背景图了  
  memdc.BitBlt(0,   0,   rect.Width(),rect.Height(),   pdc,   0,   0,   SRCCOPY);  
  //获得截图  
  bm=(HBITMAP)bitmap.GetSafeHandle();  
  //重要   取消关联   避免被释放  
  bitmap.Detach();  
  memdc.DeleteDC();  
  ReleaseDC(pdc);  
  return bm;
}

//**************************************************************************
// *****************Redo and Undo*******************************************
//**************************************************************************
void CDrawView::OnEditRedo() 
{
	// TODO: Add your command handler code here
	if(redo<0&&m_pHistoryStack->CanRedo())
	{
//	   MessageBox(_T("Redo"));
	   redo++;
	   undo++;
	   InvalidateRect(NULL);
	}
}

void CDrawView::OnEditUndo() 
{
	// TODO: Add your command handler code here
	if(undo>0&&m_pHistoryStack->CanUndo())
	{
//		MessageBox(_T("undo"));
		redo--;
		undo--;
		InvalidateRect(NULL);
	} 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -