2024年4月12日发(作者:)

MFC经典绘图方法总结

Windows 绘图的实质就是利用 windows提供的图形设备接口GDI(Graphics Device

Interface)将图形会制在显示器上。

为了支持GDI绘图,MFC提供了两种重要的类:

设备上下文DC(Device Context)类,用于设置绘图属性和绘制图形;

绘图对象类,封装了各种GDI绘图对象,包括画笔、刷子、字体、位图、调色板和区域。

CDC类介绍:

在MFC中,CDC是设备上下文类的基类,派生类包括:CClientDC, CPaintDC,

CWindowDC, CMetaFileDC类

CClientDC 客户区设备上下文, 绘制客户区时

CPaintDC 一般发生在窗口需要重绘时

CWindwDC 可以绘制整个窗口,通常在窗口WM_NCPAINT消息的响应函数

CWnd::OnNCPaint()中使用

CMetaFileDC 专门用于图元文件的绘制,图元文件记录一组GDI命令,重建图形输出。

CDC包含m_hDC和 m_hAttribDC二个设备上下文。 CDC指导所有对m_hDC的输出

GDI调用(SetTextColor)以及对m_hAttribDC的大部分属性GDI调用(GetTextColor)。

CDC对象的重要函数如下:

1、为指定设备创建上下文 virtual BOOL CreateDC(...)

比如创建一个为屏幕的设备上下文

CDC dc;

DC("DISPLAY", NULL, NULL,NULL);

2、创建内存设备上下文,与指定设备上下文兼容 virtual BOOL

CreateCompatibleDC( CDC * pDC)

3、删除CDC对象对应的Windows设备上下文, 通常不调用该函数而是使用析构程序

virtual BOOL DeleteDC();

4、将HDC句柄转化为设备上下文的句柄: CDC *pDC=CDC::FromHandle( hDC )

5、选择GDI对象入选到设备上下文中,一共有五种形式:

CPen * SelectObject( CPen * pPen) ;

CBrush * SelectObject( CBrush * pBrush) ;

virtual CFont * SelectObject( CFont * pFont) ;

CBitmap * SelectObject( CBitmap * pBitmap) ;

int SelectObject( CRgn * pRgn) ;

例:

Cpen cpen;

Pen( PS_SOLID, 2, RGB(255,0,0) );

Cpen *pOldPen=(CPen*)pDC->SelectObject(&pen); //设置新画笔,记录旧画笔

....

pDC->SelectObject(pOldPen); //还原

画笔

三种方法创建画笔

1/构造函数:

CPen();

CPen( int nPenStyle, int nWidth, COLORREF crColor );

CPen(...)略

2/CreatePen( int nPenStyle, int nWidth, COLORREF crColor )

3/CreatePenIndirect( LPLOGPEN lpLogpen )

typedef struct tagLOGPEN{

UINT lopnStyle;

POINT lopnWidth;

COLORREF lopnColor;

}LOGPEN, *LPLOGPEN;

例:

LOGPEN lppn;

lor=RGB(255,0,0);

ype=PS_DASHDOT;

dth.x=2;

dth.y=2;

CPen pen;

PenIndirect( &lppn );

画刷

三种方法创建

1/构造函数:

CBrush();

CBrush(COLROREF crColor);

CBrush(int nIndex, COLORREF crColor);

nIndex 哪种类型的网格, HS_BDIAGONAL HS_CROSS