📄 dcdemoview.cpp
字号:
// DCDemoView.cpp : CDCDemoView 类的实现
//
#include "stdafx.h"
#include "DCDemo.h"
#include "DCDemoDoc.h"
#include "DCDemoView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CDCDemoView
IMPLEMENT_DYNCREATE(CDCDemoView, CView)
BEGIN_MESSAGE_MAP(CDCDemoView, CView)
ON_COMMAND(ID_DC_CMETAFILE, OnDcCmetafile)
ON_COMMAND(ID_DC_CDCTEXT, OnDcCdctext)
ON_COMMAND(ID_DC_CDCFILL, OnDcCdcfill)
ON_COMMAND(ID_DC_CDCLINE, OnDcCdcline)
ON_COMMAND(ID_DC_BITMAP, OnDcBitmap)
ON_COMMAND(ID_DC_BRUSHB, OnDcBrush)
ON_COMMAND(ID_DC_FONT, OnDcFont)
ON_COMMAND(ID_DC_PEN, OnDcPen)
ON_COMMAND(ID_DC_RGN, OnDcRgn)
ON_COMMAND(ID_DC_RECTTRACKER, OnDcRecttracker)
ON_WM_LBUTTONDOWN()
ON_WM_SETCURSOR()
END_MESSAGE_MAP()
// CDCDemoView 构造/销毁
CDCDemoView::CDCDemoView()
{
// TODO: 在此处添加构造代码
m_hMetaFile=NULL;
DrawType=0;
m_DrawRect.left = 10;
m_DrawRect.top = 10;
m_DrawRect.right = 101;
m_DrawRect.bottom = 101;
m_tracker.m_rect=m_DrawRect;
m_tracker.m_nStyle = CRectTracker::resizeOutside;
m_tracker.m_nHandleSize=6;
}
CDCDemoView::~CDCDemoView()
{
if( m_hMetaFile != NULL )
{
DeleteMetaFile( m_hMetaFile );
}
}
BOOL CDCDemoView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
// 样式
return CView::PreCreateWindow(cs);
}
// CDCDemoView 绘制
void CDCDemoView::OnDraw(CDC* pDC)
{
CDCDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: 在此处为本机数据添加绘制代码
if(DrawType==1)
{
pDC->MoveTo(10,10);
pDC->LineTo(400,300);
pDC->Ellipse(60,60,200,180);
pDC->Rectangle(250,100,390,200);
pDC->RoundRect(440,140,580,240,50,50);
}
if(DrawType==2)
{
pDC->SelectStockObject(BLACK_BRUSH);
pDC->Ellipse(60,60,200,180);
pDC->SelectStockObject(GRAY_BRUSH);
pDC->Rectangle(250,100,390,200);
pDC->SelectStockObject(LTGRAY_BRUSH);
pDC->RoundRect(440,140,580,240,50,50);
pDC->SelectStockObject(WHITE_BRUSH);
}
if(DrawType==3)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255,0,0));
pDC->TextOut(100,100,"Hello, World!");
pDC->SelectStockObject(SYSTEM_FIXED_FONT);
pDC->TextOut(100,130,"Hello, World!");
pDC->SelectStockObject(ANSI_VAR_FONT);
pDC->TextOut(100,160,"Hello, World!");
}
if(DrawType==4)
{
pDC->Ellipse(100,30,300,160);
if( m_hMetaFile != NULL ) pDC->PlayMetaFile( m_hMetaFile );
}
if(DrawType==5)
{
CBitmap Bitmap,*pOldBitmap;
BITMAP bm;
CDC MemDC;
Bitmap.LoadBitmap (IDB_BITMAP1); // 装载已有位图
Bitmap.GetObject(sizeof(BITMAP),&bm); // 获取该位图的高度、宽度和颜色等数值
MemDC.CreateCompatibleDC(pDC); // 创建一个兼容的内存设备上下文
pOldBitmap=(CBitmap*)MemDC.SelectObject(&Bitmap); // 将该位图选入设备上下文
pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MemDC,0,0,SRCCOPY); // 显示该位图
MemDC.SelectObject(pOldBitmap);
}
if(DrawType==6)
{
LOGBRUSH lb;
lb.lbStyle=BS_HATCHED;
lb.lbColor=(COLORREF)0x00ff0000;
lb.lbHatch=HS_CROSS;
CBrush NewBrush1;
NewBrush1.CreateBrushIndirect(&lb);
CBrush *pOldBrush=pDC->SelectObject(&NewBrush1);
pDC->Rectangle(50,50,150,200);
pDC->SelectObject(pOldBrush);
// 以下采用CreateSolidBrush函数创建一个纯绿色的画刷
CBrush NewBrush2;
NewBrush2.CreateSolidBrush((COLORREF)0x0000ff00);
pOldBrush=pDC->SelectObject(&NewBrush2);
pDC->RoundRect(200,50,300,200,50,50);
pDC->SelectObject(pOldBrush);
// 以下采用CreateHatchBrush函数创建一个红色斜纹的影线画刷
CBrush NewBrush3;
NewBrush3.CreateHatchBrush(HS_BDIAGONAL,(COLORREF)0x000000ff);
pOldBrush=pDC->SelectObject(&NewBrush3);
pDC->Ellipse(350,50,450,200);
pDC->SelectObject(pOldBrush);
// 以下采用CreatePatternBrush函数创建一个位图图案画刷
CBitmap bitmap;
bitmap.LoadBitmap (IDB_PATTERN1); // 装载一幅已有位图
CBrush NewBrush4;
NewBrush4.CreatePatternBrush(&bitmap);
pOldBrush=pDC->SelectObject(&NewBrush4);
pDC->Ellipse(500,50,600,200);
pDC->SelectObject(pOldBrush);
}
if(DrawType==7)
{
//设置LOGFONT结构,以便选择字体;
static LOGFONT lf;
lf.lfHeight=40;
lf.lfWidth=20;
lf.lfItalic=false;
lf.lfUnderline=false;
lf.lfStrikeOut=false;
lf.lfOrientation=0;
lf.lfWeight=800;
lf.lfEscapement=0;
lf.lfCharSet=GB2312_CHARSET;
lf.lfPitchAndFamily=DEFAULT_PITCH|FF_SWISS;
//使用CreateFont创建字体;
CFont NewFont1;
NewFont1.CreateFont(50,0,100,0,800,FALSE,FALSE,0,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
DEFAULT_PITCH|FF_SWISS,"宋体");
CFont *pOldFont=pDC->SelectObject(&NewFont1);
pDC->SetTextColor((COLORREF) 0x000FF0000) ;
pDC->TextOut(50,60,"MFC类库使用详解") ;
pDC->SelectObject(pOldFont) ;
//使用CreateFontIndirect创建字体;
lf.lfUnderline=true;
CFont NewFont2;
NewFont2.CreateFontIndirect(&lf);
pOldFont=pDC->SelectObject(&NewFont2);
pDC->TextOut(50,110,"MFC类库使用详解");
pDC->SelectObject(pOldFont);
//使用CreatePointFontIndirect创建字体;
//该属性值的十分之一为度量单位;
lf.lfHeight=120;
lf.lfStrikeOut=true;
lf.lfUnderline=false;
CFont NewFont3;
NewFont3.CreatePointFontIndirect(&lf,pDC) ;
pOldFont=pDC->SelectObject(&NewFont3) ;
pDC->TextOut(50,160,"MFC类库使用详解") ;
pDC->SelectObject(pOldFont);
//使用CreatePointFont创建字体;
CFont NewFont4;
NewFont4.CreatePointFont(200,"黑体",pDC);
pOldFont=pDC->SelectObject(&NewFont4);
pDC->TextOut(50,200,"MFC类库使用详解");
pDC->SelectObject(pOldFont) ;
}
if(DrawType==8)
{
CPen NewPen1,*pOldPen;
NewPen1.CreatePen(PS_DASH,1,RGB(0,0,0));
pOldPen=pDC->SelectObject(&NewPen1);
pDC->MoveTo(100,100);
pDC->LineTo(400,200);
pDC->SelectObject(pOldPen);
CPen NewPen2;
LOGPEN lp;
lp.lopnColor=(COLORREF)0x0000ff00;
lp.lopnStyle=PS_SOLID;
lp.lopnWidth.x=4;
NewPen2.CreatePenIndirect(&lp);
pOldPen=pDC->SelectObject(&NewPen2);
pDC->Arc(60,60,320,200,100,80,300,180);
pDC->SelectObject(pOldPen);
}
if(DrawType==9)
{
CRect rectA,rectB;
rectA=new CRect(50, 50, 150, 150);
rectB=new CRect(100, 100, 250, 200 );
pDC->Rectangle(&rectA);
pDC->Ellipse(&rectB);
CRgn rgnA, rgnB, rgnC;
rgnA.CreateRectRgn( 50, 50, 150, 150 );
rgnB.CreateRectRgn( 100, 100, 250, 200 );
rgnC.CreateRectRgn( 0, 0, 50, 50 );
int nCombineResult = rgnC.CombineRgn( &rgnA, &rgnB, RGN_AND);
CBrush br3;
br3.CreateSolidBrush( RGB(0, 0, 255)); // rgnC Blue
pDC->SelectObject(br3);
pDC->InvertRgn(&rgnC);
}
if(DrawType==10)
{
pDC->Ellipse(m_DrawRect);
m_tracker.Draw(pDC);
}
}
// CDCDemoView 诊断
#ifdef _DEBUG
void CDCDemoView::AssertValid() const
{
CView::AssertValid();
}
void CDCDemoView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CDCDemoDoc* CDCDemoView::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDCDemoDoc)));
return (CDCDemoDoc*)m_pDocument;
}
#endif //_DEBUG
// CDCDemoView 消息处理程序
void CDCDemoView::OnDcCmetafile()
{
// TODO: 在此添加命令处理程序代码
BOOL tSuccess;
CMetaFileDC mdc;
tSuccess = mdc.Create("metafile1");
if( !tSuccess )
{
return;
}
mdc.Rectangle(150,60,250,140);
m_hMetaFile = mdc.Close();
if( m_hMetaFile == NULL )
{
return;
}
DrawType=4;
Invalidate();
}
void CDCDemoView::OnDcCdcline()
{
// TODO: 在此添加命令处理程序代码
DrawType=1;
Invalidate();
}
void CDCDemoView::OnDcCdcfill()
{
// TODO: 在此添加命令处理程序代码
DrawType=2;
Invalidate();
}
void CDCDemoView::OnDcCdctext()
{
// TODO: 在此添加命令处理程序代码
DrawType=3;
Invalidate();
}
void CDCDemoView::OnDcBitmap()
{
// TODO: 在此添加命令处理程序代码
DrawType=5;
Invalidate();
}
void CDCDemoView::OnDcBrush()
{
// TODO: 在此添加命令处理程序代码
DrawType=6;
Invalidate();
}
void CDCDemoView::OnDcFont()
{
// TODO: 在此添加命令处理程序代码
DrawType=7;
Invalidate();
}
void CDCDemoView::OnDcPen()
{
// TODO: 在此添加命令处理程序代码
DrawType=8;
Invalidate();
}
void CDCDemoView::OnDcRgn()
{
// TODO: 在此添加命令处理程序代码
DrawType=9;
Invalidate();
}
void CDCDemoView::OnDcRecttracker()
{
// TODO: 在此添加命令处理程序代码
DrawType=10;
Invalidate();
}
void CDCDemoView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (m_tracker.Track(this, point))
{
m_DrawRect=m_tracker.m_rect;
Invalidate();
}
CView::OnLButtonDown(nFlags, point);
}
BOOL CDCDemoView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (pWnd == this && m_tracker.SetCursor(this, nHitTest))
return TRUE;
return CView::OnSetCursor(pWnd, nHitTest, message);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -