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

📄 paintdlg.cpp

📁 一个实现窗口的小程序
💻 CPP
字号:
// PaintDlg.cpp : implementation file
//

#include "stdafx.h"
#include "eight.h"
#include "PaintDlg.h"
#include "eightDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPaintDlg dialog
const COLORREF CPaintDlg::m_crColors[8]={
       RGB(0,0,0),
	   RGB(0,0,255),
	   RGB(0,255,0),
	   RGB(0,255,255),
	   RGB(255,0,0),
	   RGB(255,0,255),
	   RGB(255,255,0),
	   RGB(255,255,255),

};

CPaintDlg::CPaintDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CPaintDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CPaintDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CPaintDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPaintDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPaintDlg, CDialog)
	//{{AFX_MSG_MAP(CPaintDlg)
	ON_WM_PAINT()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPaintDlg message handlers

void CPaintDlg::DrawLine(CPaintDC* pdc,int iColor)
{
CPen pnSolidPen(PS_SOLID,1,m_crColors[iColor]);
CPen pnDotPen(PS_DOT,1,m_crColors[iColor]);
CPen pnDashPen(PS_DASH,1,m_crColors[iColor]);
CPen pnDashDotPen(PS_DASHDOT,1,m_crColors[iColor]);
CPen pnDashDotDotPen(PS_DASHDOTDOT,1,m_crColors[iColor]);
CPen pnNullPen(PS_NULL,1,m_crColors[iColor]);
CPen pnInsidePen(PS_INSIDEFRAME,1,m_crColors[iColor]);

CRect rRect;
GetClientRect(rRect);
rRect.NormalizeRect();
CPoint ptStart;
CPoint ptEnd;
int iDist=rRect.Height()/8;
CPen *pOldPen=NULL;
ptStart.y=rRect.top;

ptStart.x=rRect.left;
ptEnd.y=ptStart.y;
ptEnd.x=rRect.right;
int i;
for(i=0;i<7;i++)
{
  switch(i)
  {
  case 0:
	  pOldPen=pdc->SelectObject(&pnSolidPen);
	  break;
  case 1:
	  pOldPen=pdc->SelectObject(&pnDotPen);
	  break;
  case 2:
	  pOldPen=pdc->SelectObject(&pnDashPen);
	  break;
  case 3:
	  pOldPen=pdc->SelectObject(&pnDashDotPen);
	  break;
  case 4:
	  pOldPen=pdc->SelectObject(&pnDashDotDotPen);
	  break;
  case 5:
	  pOldPen=pdc->SelectObject(&pnNullPen);
	  break;
  case 6:
	  pOldPen=pdc->SelectObject(&pnInsidePen);
	  break;
  }
  ptStart.y=ptStart.y+iDist;
  ptEnd.y=ptStart.y;
  pdc->MoveTo(ptStart);
  pdc->LineTo(ptEnd);
}
pdc->SelectObject(pOldPen);
}

void CPaintDlg::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
CEightDlg *pWnd=(CEightDlg*)GetParent();
if(pWnd)
{
	if(pWnd->m_iTool==2)
	{
    	if(pWnd->m_strBitmap.GetLength()>0)
		ShowBitmap(&dc);
	}
	else
	{
		if(pWnd->m_iShape==0)
			DrawLine(&dc,pWnd->m_iColor);
		else
			DrawRegion(&dc,pWnd->m_iColor,pWnd->m_iTool,pWnd->m_iShape);
           
	}
}	
	// Do not call CDialog::OnPaint() for painting messages
}

void CPaintDlg::DrawRegion(CPaintDC *pdc, int iColor, int iTool, int iShape)
{
CPen pnSolidPen(PS_SOLID,1,m_crColors[iColor]);
CPen pnDotPen(PS_DOT,1,m_crColors[iColor]);
CPen pnDashPen(PS_DASH,1,m_crColors[iColor]);
CPen pnDashDotPen(PS_DASHDOT,1,m_crColors[iColor]);
CPen pnDashDotDotPen(PS_DASHDOTDOT,1,m_crColors[iColor]);
CPen pnNullPen(PS_NULL,1,m_crColors[iColor]);
CPen pnInsidePen(PS_INSIDEFRAME,1,m_crColors[iColor]);

CBrush brSolidBrush(m_crColors[iColor]);
CBrush brBDiagBrush(HS_CROSS,m_crColors[iColor]);
CBrush brCrossBrush(HS_BDIAGONAL,m_crColors[iColor]);
CBrush brDiagCrossBrush(HS_DIAGCROSS,m_crColors[iColor]);
CBrush brFDiagBrush(HS_FDIAGONAL,m_crColors[iColor]);
CBrush brHorizBrush(HS_HORIZONTAL,m_crColors[iColor]);
CBrush brVertBrush(HS_VERTICAL,m_crColors[iColor]);
CBrush brNullBrush(RGB(208,208,208));
CRect rRect;
GetClientRect(rRect);
rRect.NormalizeRect();
int iVert=rRect.Height()/2;
int iHeight=iVert-10;
int iHorz=rRect.Width()/4;
int iWidth=iHorz-10;
CRect rDrawRect;
CPen *pOldPen=NULL;
CBrush *pOldBrush=NULL;

int i;
for(i=0;i<7;i++)
{
  if(i==0)
  {
     rDrawRect.top=rRect.top+5;
	 rDrawRect.left=rRect.left+5;
	 rDrawRect.bottom=rDrawRect.top+iHeight;
	 rDrawRect.right=rDrawRect.left+iWidth;
  }
else if(i==4)
  {
     rDrawRect.top=rDrawRect.top+iVert;
	 rDrawRect.left=rRect.left+5;
	 rDrawRect.bottom=rDrawRect.top+iHeight;
	 rDrawRect.right=rDrawRect.left+iWidth;
  }
else
{
  rDrawRect.right=rDrawRect.left+iWidth;
}

switch(i)
  {
  case 0:
	  pOldPen=pdc->SelectObject(&pnSolidPen);
	  pOldBrush=pdc->SelectObject(&brSolidBrush);
	  break;
  case 1:
	  pOldPen=pdc->SelectObject(&pnDotPen);
	  pOldBrush=pdc->SelectObject(&brBDiagBrush);
	  break;
  case 2:
	  pOldPen=pdc->SelectObject(&pnDashPen);
	  pOldBrush=pdc->SelectObject(&brCrossBrush);
	  break;
  case 3:
	  pOldPen=pdc->SelectObject(&pnDashDotPen);
	  pOldBrush=pdc->SelectObject(&brDiagCrossBrush);
	  break;
  case 4:
	  pOldPen=pdc->SelectObject(&pnDashDotDotPen);
	  pOldBrush=pdc->SelectObject(&brFDiagBrush);
	  break;
  case 5:
	  pOldPen=pdc->SelectObject(&pnNullPen);
	  pOldBrush=pdc->SelectObject(&brHorizBrush);
	  break;
  case 6:
	  pOldPen=pdc->SelectObject(&pnInsidePen);
	  pOldBrush=pdc->SelectObject(&brVertBrush);
	  break;
  }
if(iTool==0)
pdc->SelectObject(&brNullBrush);
else
pdc->SelectObject(&pnNullPen);
if(iShape==1)
pdc->Ellipse(rDrawRect);
else
pdc->Rectangle(rDrawRect);
}
pdc->SelectObject(pOldBrush);
pdc->SelectObject(pOldPen);
}

void CPaintDlg::ShowBitmap(CPaintDC *pdc)
{
//改变为主对话框内指针
	CEightDlg *pWnd=(CEightDlg*)GetParent();
	BITMAP bm;
	CDC dcMem;
	CRect rRect;
pWnd->m_bmpBitmap.GetBitmap(&bm);
dcMem.CreateCompatibleDC(pdc);
dcMem.SelectObject(pWnd->m_bmpBitmap);
GetClientRect(rRect);
rRect.NormalizeRect();
pdc->StretchBlt(10,10,(rRect.Width()-20),(rRect.Height()-20),&dcMem,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}

⌨️ 快捷键说明

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