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;
具体实现方法可百度。
原文地址:http://blog.csdn.net/hunterlew/article/details/41170001