GDI 编程基础简介

简介:

  今天准备重新对GDI的知识进行回顾一下,以便加深认识。

 

一、GDI

  在进行Windows编程时,可能经常会用到设备描述表的类型句柄,例如,最厂家的HDC,它就是图像设备描述类型句柄。因为GDI的绘图函数基本上都是有状态的,因此GDI所有的函数都要求一个这样的图形设备描述类型的句柄——HDC。而一个图像设备描述表实际上就是对一种安装在机器上的图形卡的描述在使用句柄时,其实就是对具体的一种设备进行操作。对于GDI的任何函数的调用,这个设备的信息是需的。

  

  从本质上来说,提供指向任何GDI函数的HDC句柄,都是用来访问一个函数操作设备的重要信息。这就是需要一个图形描述表的原因。

  图形设备描述表要跟踪编程过程中任何可能改变的软件设置。比如,在GDI中被大量使用的字体、画笔、画刷、线、点、矩形等类型。GDI使用这些基本数据类型来绘制任何图形,即使使用的画笔颜色不是视频卡的默认颜色,那么设备描述表也会跟踪它。因此,图形设备描述表不仅是硬件的描述,而且还是记录和保存设置的信息库

 

二、CDC类

  CDC类就是MFC把DC(设备描述环境)和一些GDI函数填充装到一起的一个集合。它是CObject的直接派生类。并且从CDC又派生出了许多其他类,如最常用的窗口客户区DC所对应的CClientDC类,OnPaint和OnDraw消息响应函数的输入参数中使用的CPaintDC类,图元文件对应的CMetaFileDC类和整个窗口所对应的CWindowDC类。CDC类中有许多成员函数,可以用来设备各种绘图环境、属性和参数,以及绘制各种图形和图像。

  常见的函数如下:

  (1)用于获取DC句柄的函数GetDC()

    每次调用GetDC函数所获得的DC,都是一个全新的临时默认DC,具有默认的绘图环境和设置。它不能用任何变量临时保存,而且GetDC后原来选入的各种GDI对象全部作废,原来设置的各种状态也失效,一切都要从头开始。

  (2)用于获取DC安全句柄的函数GetSafeHdc()

    其获得的DC在窗口的存在期间内一直是有效的。

  (3)用于释放DC的函数ReleaseDC()

三、GDI对象

 3.1 画笔类

使用构造函数创建

CPen(

int nPenStyle,

int nWidth,

COLORREF crColor

用CreatePen函数创建画笔对象

HPEN CreatePen(int fnPenStyle, int nWidth, COLORREF crColor);

用CETStockObject函数直接创创建画笔

HGDIOBJ GetStockObject ( int fnObject )

用CreatePenIndirect函数创建

HPEN CreatePenIndirect( const LOGPEN * logopen );

3.2 画刷类

CBrush(

int fnStyle

COLOREF crColor

 

HBRUSH CreateHatchBrush(int fnStyle, COLORREF crColor);

 

GetStockObject()

 

HBRUSH CreateBrushIndirect(CONST LOGBRUSH *lplb);

typedef struct tagLOGBRUSH

{

  UINT lbStyle;

  COLORREF lbColor;

  LONG lbHatch;

} LOGBRUSH

 

3.3 字体类

3.4 点类

typedef sturct tagPOINT

{

  LONG x;

  LONG y;

}POINT;

3.5 大小类

typedef struct tagSIZE

{

  LONG cx;

  LONG cy;

}SIZE;

 

 

 

 

 

参考文章:

1. Visual C++ 典型模块与项目实战大全

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。




    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5560149.html ,如需转载请自行联系原作者
相关文章
|
6月前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
487 0
|
9月前
|
前端开发 JavaScript 安全
深入探索 Qt WebEngineCore:从基础原理到高级应用与技巧
深入探索 Qt WebEngineCore:从基础原理到高级应用与技巧
813 0
|
设计模式
[笔记]设计模式实践_SDLGUI封装系列之开源库SDL2_gui编译
[笔记]设计模式实践_SDLGUI封装系列之开源库SDL2_gui编译
129 0
|
开发框架 Ubuntu 编译器
学习Qt之基础篇——从入门开始(1)
Qt 简介 Qt是一个跨平台的C++应用程序开发框架,被广泛用于开发GUI程序。 Qt有丰富的 API且面向对象。Qt是自由且开放源代码的软件,在GNU较宽松公共许可证条款下发布。支持广泛的编译器,包括GCC的C++编译器和Visual Studio。
265 0
学习Qt之基础篇——从入门开始(1)
|
存储 算法 编译器
OpenGL简介以及术语总结
OpenGL (Open Graphics Library)是⼀个跨编程语⾔、跨平台的编程图形程序接⼝,它将计算机的资源抽象称为⼀个个OpenGL的对象,对这些资源的操作抽象为⼀个个的OpenGL指令。
276 0

热门文章

最新文章