首页 > 代码库 > GDI基础知识

GDI基础知识

GDI即图形设备接口,在windows中负责图形输出。它位于应用程序和不同硬件设备之间,这种结构让程序员从直接处理不同硬件工作中解放出来。GDI处理了硬件间的差异,并且通过将应用程序与不同输出设备特性相隔离,使windows应用程序能够毫无障碍在windows支持的任何图形设备上运行。


CDC类:

SDK全局函数实现:HDC hdc = ::GetDC(m_hWnd); .....::ReleaseDC(m_hWnd,hdc);

CDC类实现:CDC* pDC = GetDC(); ...ReleaseDC(pDC);

CClientDC实现:CClientDC dc(this); (已经封装不需要显式调用GetDC和ReleaseDC,区域是相关窗口的客户区)

CWindowDC实现:CWindowDC dc(this); (区域是相关窗口的所有区域)

CPaintDC实现:CPaintDC dc(this); (用在OnPaint()函数中)

以上相关语言,我理解为为这个程序创建一张画布,准备绘制工作。


画笔类:CPen。

画刷类:CBrush。

字体类:CFont。注意它没有构造函数,一般用CreateFont或者CreateFontIndirect函数。

点类:CPoint。

大小类:CSize。

矩形类:CRect。


GDI的相关绘制方法:(注意是属于GDI类的方法,调用格式)

SetPixel画点;

MoveTo和LineTo画线,并最后返回当前位置;

Polyline画折线,参数需要各个点组成的数组;

Recttangle画矩形;

Polygon画多边形;

RoundRect画圆角矩形;

Ellipse画椭圆;

FillRect按指定画刷填充;

FillSolidRect单色填充;

Pie填充扇形;

SetBKMode设置输出字体背景;

TextOut输出文字;

……


关于SelectObject的用法:

...

CPen pen(PS_SOLID,1,RGB(255,0,0));

CClientDC dc(this);

CPen pOldPen = dc.SelectObject(&pen); //返回上次画笔工具

dc.MoveTo(m_start);

dc.Lineto(point);

dc.SelectObject(pOldPen); //恢复先去的状态

...

哪些地方需要用这个函数呢?就是当具体的绘制函数如果不包含画笔工具作为参数的话,就必须调用该函数选画笔。

像FillRect参数中已经包含画笔工具参数,就不用再调用SelectObject了。


补充输出字体的方法:

dc.GetCurrentFont()->GetLogFont(&lf);

lf.lfHeight = 20;

lf.lfWidth = 10;

lf.lfWeight = 500; //文本的大小

strcpy(lf.lfFaceName,"隶书");

font.CreateFontIndirect(&lf);

pOldFont = dc.SelectObject(&font);

dc.TextOut(10,10,"hello");

font.DelectObject(); //断开句柄纽带

dc.SelectObject(pOldFont);


补充全屏显示会用到的函数:

GetWindowPlacement;

ClientToScreen;

GetSystemMetrics;

SetWindowPlacement;

具体实现方法可百度。


GDI基础知识