mfc下内存缓冲画图的实践

 mfc下内存缓冲画图的实践 用vc做程序,如何画图是一个大家都很关心,但是却感到很难以理解的问题,因为在mf c的封装之下,没有现成的画图函数供你直接调用,像vb等等里面直接来个point之类的 ,常常让人感到无从下手。这两天帮人解决了一个用内存缓冲画图的问题,顺便也就谈 谈这些东西,也算是总结。 我先来解释一下在mfc里面很关键的设备环境描述符,也就是所谓的DC(device contex t
摘要由CSDN通过智能技术生成

 mfc下内存缓冲画图的实践
用vc做程序,如何画图是一个大家都很关心,但是却感到很难以理解的问题,因为在mf
c的封装之下,没有现成的画图函数供你直接调用,像vb等等里面直接来个point之类的
,常常让人感到无从下手。这两天帮人解决了一个用内存缓冲画图的问题,顺便也就谈
谈这些东西,也算是总结。
我先来解释一下在mfc里面很关键的设备环境描述符,也就是所谓的DC(device contex
t)。
还是从历史来看吧,dos时代,我们如果要绘图,必须通过一系列系统函数来启动图形环
境(用过turbo pascal或者turbo c的人该还有印象吧),这之间对各种硬件的初始化参
数都不相同,非常的烦人,常常还要查阅硬件手册,那时的程序智能针对最流行的硬件
来编写,对不流行的就没有办法了。windows操作系统为了屏蔽不同的硬件环境,让编程
时候不考虑具体的硬件差别,采取了一系列办法,设备环境描述符就是这样产生的。简
单的说,设备描述符抽象了不同的硬件环境为标准环境,用户编写时使用的是这个虚拟
的标准环境,而不是真实的硬件,与真实硬件打交道的工作一般交给了系统和驱动程序
完成(这同样解释了为什么我们需要经常更新驱动程序的问题)。使用在windows图形系
统(gdi,而不包括direct x)上面,就体现在一系列的图形DC上面,我们如果要在gdi
上面绘图,就必须先得到图形DC的句柄(handle),然后指定句柄的基础上进行图形操
作。
再来回忆一下,我们怎么在sdk的环境下面绘图呢,我想这个大家都不太清楚吧,但是确
实很基础。在windows的sdk环境下面,我们用传统的c编写程序,在需要的绘图地方(比
如响应WM_PAINT消息的分支)这样做:
hdc = GetDC( hwnd );
oldGdiObject = SelectObject( hdc,newGdiObject );
...绘图操作...
SelectObject( hdc,oldGdiObject );
DeleteObject( newGdiObject );
ReleaseDC( hdc);
或者是这样
BeginPaint( hwnd,&ps );//PAINTSTRUCT ps -- ps is a paint struct
...绘图操作...
EndPaint( hwnd )
这就是大概的过程,我们看到了hdc(图形DC句柄)的应用,在绘图的部分,每一个绘图
函数基本上也要用到这个句柄,最后我们还必须释放它,否则将严重影响性能。每次我
们都必须调用GetDC这个api函数得到(不能用全局变量保存结果重复使用,我在后面解
释)。这些是最最基本的windows图形操作的方式,相比dos时代简单了些,但是有些概
念也难理解了些。vb里面的简单的point函数其实最后也是被转化为这样的方式来执行,
系统帮助做了很多事情。
到了mfc里面,由于有了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值