GDI基础知识
来源:互联网 发布:windows 保存窗口大小 编辑:程序博客网 时间:2024/05/29 04:51
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基础知识
- GDI+ 基础知识入门
- GDI+基础知识一
- GDI+基础知识二 绘图表面
- GDI+基础知识 反锯齿技术
- Windows API-GDI入门基础知识详解
- GDI+基础知识——各种画笔线型
- Windows API-GDI入门基础知识详解
- C# GDI+ 绘图基础知识(1)
- Windows API-GDI入门基础知识详解 来源: PConline.com.cn
- GDI+基础知识——通过画刷构建画笔
- GDI+基础知识——画笔的对齐方式
- GDI+基础知识——画笔的线帽属性示意
- GDI+基础知识三 钢笔(pen)和笔刷(brush) 1
- Windows API-GDI入门基础知识详解(转)
- GDI+
- GDI+
- GDI+
- 使用命名管道与 MetaTrader 5 进行无 DLL 通信
- 项目引导页动画的总结
- 导入excel数据到sql server 2008
- MetaTrader的拓展应用,创建自己的DLL程序
- microsoft help viewer 收藏夹功能
- GDI基础知识
- 欧几里得算法 --- 辗转相除法求最大公约数
- Integrating SQL Server 2008 with Metatrader 5
- 读取网页内容
- MYSQL IFNULL函数的使用
- The 3n + 1 problem
- 【BZOJ1056/BZOJ1862】【ZJOI2006】【HAOI2008】游戏排名系统 splay
- LeetCode——Reverse Integer
- MT如何调用C#的dll所产生问题