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

📄 dcdemoview.cpp

📁 《Visual C++.NET MFC类库应用详解》程序实例
💻 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 + -