📄 paintdlg.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 + -