原创]windows gdi入门初级应用(vc sdk)
【程序编程相关:好的原程序做出好的软件】【推荐阅读:高斯消元法的应用】
【扩展信息:Oracle入门基本知识一点通】好久没发贴了,今天手痒痒,发一个.gdi的绘图函数基本上都是有状态的,所有的函数都要求一个hdc类型的句柄. 这个hdc的获得有几个途径beginpaint,getwindowdc, getdc.他们的参数都只需要一个hwnd就差不多了. 记得调用了beginpaint后要调用endpaint进行清理,调用getwindowdc与getdc后要调releasedc进行清理. 在mfc代码中常常遇到的cdc cpaintdc cwindowdc cclientdc.在这里稍作解释. cdc :例如用gdi画矩形要rectangle(hdc,...),而使用cdc则是dc.rectangle(...),由此可见cdc主要是把原本需要hdc作为参数的gdi函数封装了一下,hdc成了它的一个成员变量. cpaintdc cwindowdc cclientdc:他们都是从cdc继承,分别是对上面所说的beginpaint,getwindowdc, getdc调用对进行封装(cpaintdc构造时调用beginpaint,析构时调用endpaint,其余同理). beginpaint一般用在对wm_paint的响应函数中使用 getwindowdc可获得整个window的hdc,而getdc仅能获得客户区的hdc,区别就在于---- 前者有效地绘制区域是整个窗口(边框.标题栏.客户区的总与). 后者有效地绘制区域仅限于客户区. 两者的坐标系都是相对坐标而非屏幕坐标,原点是(0,0).即以自己可绘制区域的左上角作为原点. 这里可以顺带的讲讲rect了,rect是一个结构,依次有4个成员left,top,right,bottom用来代表一个矩形区域.crect从rect继承,提供了一些常用的操作(例如说位移,缩小等等),其实就是改变4个成员的值.完全不用crect也可以.许多gdi函数都要求一个rect作为参数,或者类似的用(x,y,cx,cy)作参数,其实也就是一个rect变种,用了宽度与高度罢了.基础知识介绍完毕,开始实例教程:
我们以如何绘制一个具有平面风格的状态栏为例: 首先从cstatusbar继承一个类:cstatusbarnew.(如果无法通过类向导做这件事,而你又对mfc的messagemap等等东西不熟悉,可以从cstatusbarctrl继承一个,待生成代码后,把所有的cstatusbarctrl改为cstatusbar) ... 下一页