画图流程是:

1、画图之前windows程序从GDI获取设备描述表句柄;

2、每次调用GDI输出函数时将句柄返回给GDI。

MFC的CDC类将windows设备描述表和获取设备描述表句柄的GDI函数就近封装在一起,CDC的派生类则代表不同类型的设备描述表。

类名    描述
CPaintDC    用于在窗口客户区画图(仅限于OnPaint处理程序)
CClientDC    用于在窗口客户区画图(除OnPaint处理程序外的任何处理程序)
CWindowDC    用于在窗口内任何地方画图,包括非客户区
CMetaFileDC    用于向GDI元文件画图

得到设备环境句柄HDC的方法:BeginPaint、GetWindowDC、GetDC

1.采用GetDC获取HDC

HDC hdc = ::GetDC( hwnd );

// 此处添加绘图代码

::ReleaseDC( hwnd, hdc );

2.采用BeginPaint获取HDC      适合用在OnPaint程序中,则需用CWnd::BeginPaint和CWnd::EndPaint分别代替GetDC和ReleaseDC以保证合理地处理WM_PAINT消息

HDC hdc;

PAINTSTRUCT ps;// 保存

hdc = ::BeginPaint( hwnd, &ps );

// 此处添加绘图代码

::EndPaint( hwnd, &ps );

注意:另外在OnPaint程序中CDC类可以直接进行实例化,构造函数和析构函数调用相应的函数捕获和释放设备描述表

在栈中实例化

CPaintDC dc(this);

// Do some drawing

在堆中实例化

CPaintDC * pDC = new CPaintDC(this)

// Do some drawing

delete pDC;

3.采用GetWindowDC获取HDC   在非OnPaint程序

HDC hdc = ::GetWindowDC( hwnd );

// 此处添加绘图代码

::ReleaseDC( hwnd, hdc );

设备描述表属性

当使用CDC输出函数在屏幕上画图时,输出的某些特性并没有在函数调用过程中规定,但可通过设备描述表自身获得。

Attribute    Default    Set with    Get with
文本颜色    Black    CDC::SetTextColor    CDC::GetTextColor
背景颜色    White    CDC::SetBkColor    CDC::GetBkColor
背景模式    OPAQUE    CDC::SetBkMode    CDC::GetBkMode
映射模式    MM_TEXT    CDC::SetMapMode    CDC::GetMapMode
绘图模式    R2_COPYPEN    CDC::SetROP2    CDC::GetROP2
当前位置    (0,0)    CDC::MoveTo    CDC::GetCurrentPosition
当前画笔    BLACK_PEN    CDC::SelectObject    CDC::SelectObject
当前画刷    WHITE_BRUSH    CDC::SelectObject    CDC::SelectObject
当前字体    SYSTEM_FONT    CDC::SelectObject    CDC::SelectObject

创建这些对象

位图:CreateBitmap, CreateBitmapIndirect, CreateCompatible Bitmap, CreateDIBitmap, CreateDIBsection(只有内存设备上下文环境可选择位图,并且在同一时刻只能一个设备上下文环境选择位图)。

画刷:CreateBrushIndirect, CreateDIBPatternBrush, CreateDIBPatternBrushPt, CreateHatchBrush, CreatePatternBrush, CreateSolidBrush。

字体:CreateFont, CreateFontIndirect。

笔:CreatePen, CreatePenIndirect。

区域:CombineRgn, CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn, CreateRectRgn, CreateRectRgnIndirect。

返回值为类型,然后调用SelectObject函数选中。选中后,返回原来画刷的句柄用来恢复时使用。图形绘制完毕后使用DeleteObject函数将其释放。

所以其流程如下:

CreatePen 新的

SelectObject 新的

SelectObject 旧的

DeleteObject 新的

画图

1.直线   MoveTo 、LineTo

2.  椭圆Ellipse

3. 矩形Rectangle

4.点SetPixel

5.文本显示 DrawText

6.画刷填充 FillRect

引申到双缓冲绘图

1.MemDC.CreateCompatibleDC(NULL);

2.MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);

3.pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);

windows GDI开发相关推荐

  1. Windows GDI和GDI+编程实例剖析(1)

    Windows GDI和GDI+编程实例剖析(1) 作者:宋宝华  e-mail:21cnbao@21cn.com 1.基本概念 GDI在Windows中定义为Graphics Device Inte ...

  2. Windows Mobile 开发系列文章收藏 - Windows Mobile 6.x

    收集整理一些Windows Mobile 6.x开发相关文章, 文章及相关代码大部分搜集自网络,版权属于原作者! 智能手机      手机词汇      研发手机基本流程 WAP协议分析(1)     ...

  3. linux windows C++开发差异

    新手注意事项 1.文件与目录的大小写以及路径分隔符的差别. windows下不区分大小写,路径分隔符一般使用"\":linux下区分大小写,路径分隔符使用"/" ...

  4. Windows游戏开发感想一个完整的Windows窗口程序

    现在的互联网行业从事Windows游戏开发的人实在是太少了.一是因为门槛较高,游戏行业本来就是互联网行业最尖端的领域,要想从事游戏开发,不仅要掌握一门过硬的语言,尤其是对C++的精通,还要对算法非常精 ...

  5. Windows客户端开发简介(二)

    Windows客户端开发简介(二) 一个典型的Windows客户端程序要有哪几部分构成呢?下面我会以一个国内比较流行的互联网客户端程序的基本架构来跟大家逐步展开分析,由于涉及到知识产权的问题,请大家不 ...

  6. Windows Phone开发(19):三维透视效果

    Windows Phone开发(19):三维透视效果 原文:Windows Phone开发(19):三维透视效果 三维效果也可以叫透视效果,所以,我干脆叫三维透视效果.理论知识少讲,直接用例开场吧,因 ...

  7. Windows Phone 开发——相机功能开发

    原文:Windows Phone 开发--相机功能开发 相机功能是手机区别于PC的一大功能,在做手机应用时,如果合理的利用了拍照功能,可能会给自己的应用增色很多.使用Windows Phone的相机功 ...

  8. Windows Phone开发(48):不可或缺的本地数据库

    原文:Windows Phone开发(48):不可或缺的本地数据库 也许WP7的时候,是想着让云服务露两手,故似乎并不支持本地数据库,所有数据都上传上"云"数据库中.不过呢,在SD ...

  9. Windows Phone开发(41):漫谈关键帧动画之下篇

    原文:Windows Phone开发(41):漫谈关键帧动画之下篇 也许大家已经发现,其实不管什么类型的动画,使用方法基本是一样的,不知道大家总结出规律了没有?当你找到规律之后,你会发现真的可以举一反 ...

  10. Windows Phone开发(27):隔离存储A

    Windows Phone开发(27):隔离存储A 原文:Windows Phone开发(27):隔离存储A 在很多资料或书籍上都翻译为"独立存储",不过,我想了一下,决定将Iso ...

最新文章

  1. 月薪30k~50k,这个领域的人才正在被疯抢!
  2. Mybatis中 $ 和 # 千万不要乱用!
  3. 专转本计算机第一章试题,江苏专转本 计算机第一章自测题(含答案).doc
  4. 应用密码学的笑话之MD5+Salt不安全
  5. Android RecyclerView初体验
  6. Sql 列转行 三种方法对比
  7. JavaScript:模块化及模块化规范
  8. matlib实现梯度下降法
  9. 特种期货开户交易权限开通认定标准
  10. PYQT显示表格并绘制曲线图
  11. 【python机器学习】普通最小二乘法多元线性回归
  12. 【信息检索】Java简易搜索引擎原理及实现(三)B+树索引和轮排索引结构
  13. 输入圆半径计算圆周长、圆面积、圆球表面积,结果保留3位小数。 注意:输入的半径可能是整数,也可能是小数。
  14. Some projects cannot be imported because their project description file is corrupted
  15. 两数相除,如果有余数则结果加一
  16. CSDN如何上传资料
  17. vue项目访问服务器时:WebSocket connection to ‘wss://XXXX/‘的解决方法
  18. 常见Web漏洞危害及整改建议
  19. html手机端自动换,jQuery+HTML5实现手机摇一摇换衣特效
  20. 浙江省现代教育强市要求计算机配套的,《浙江省中小学现代教育技术装备标准》.doc...

热门文章

  1. 最新Spring下载网址
  2. Extjs学习(3):事件和动作
  3. Java数据结构与算法(3) - ch04栈(栈和转置)
  4. CentOS 安装 PPTP ××× 客户端安装脚本
  5. 用scanf函数输入数据,字符数据的输入输出
  6. linux定时器编程实验报告,Linux定时器实验.doc
  7. python桌面程序臃肿_Python自动化整理文件“大升级”,任意路径下文件,都给你整理的明明白白!...
  8. java打印等腰三角形_为什么大家都说Java中只有值传递?
  9. c语言变量命名规则_数据的来龙去脉——常量与变量
  10. Webpack 学习笔记