VC绘图/游戏简易教程--16:设备上下文句柄(Windows 编程入门2)
作者:bestans

教程总目录:http://www.easyx.cn/skills/View.aspx?id=45 (里面包括VC下的graphics.h的配置方法)

注:学习本节前,请自备MSDN,以便查阅Windows GDI函数。

EasyX的绘图函数最初是模仿的BGI的函数命名。为了让大家借此学习Windows GDI绘图,EasyX增加了获取HDC句柄的功能。

对于Windows GDI中的绘图函数,很多都需要一个HDC句柄。我们用GetImageHDC()函数获取该句柄,然后就可以使用Windows GDI了。先看看例子吧:

#include <graphics.h>
#include <conio.h>

void main()
{
	// 初始化绘图窗口,并获取HDC句柄
	initgraph(640, 480);
	HDC hdc = GetImageHDC();

	// 以下是标准Windows GDI操作画一条线(相关语句,请查阅MSDN)
	MoveToEx(hdc, 100, 100, NULL);
	LineTo(hdc, 200, 200);
	// 标准 Windows GDI 操作结束
	
	// 使之前的 Windows GDI 操作生效
	FlushBatchDraw();

	// 按任意键返回
	getch();
	closegraph();
}

还可以针对IMAGE对象使用GDI绘图函数,看下面这个例子:

#include <graphics.h>
#include <conio.h>

void main()
{
	// 初始化绘图窗口
	initgraph(640, 480);

	// 创建 300x300 的 IMAGE 对象,并获取其 HDC 句柄
	IMAGE img(300, 300);
	HDC hdc = GetImageHDC(&img);

	// 以下是标准Windows GDI操作画一条线(相关语句,请查阅MSDN)
	MoveToEx(hdc, 100, 100, NULL);
	LineTo(hdc, 200, 200);
	// 标准 Windows GDI 操作结束
	
	// 将 img 贴到绘图窗口上:
	putimage(0, 0, &img);

	// 按任意键返回
	getch();
	closegraph();
}

注意:

1. 通过 GetImageHDC() 获取绘图窗口的 HDC 时,绘图后需要执行 FlushBatchDraw() 使之生效;获取 IMAGE 的 HDC 无需执行 FlushBatchDraw()。

2. 这次的内容虽然少,但是 Windows GDI 的内容相当多,所以,完成本节的学习还是很不容易的。

3. Windows GDI 并没有设置颜色这样的函数,需要创建画笔(画刷)并选入画笔(画刷),并且在不用的时候记得删除。Windows GDI 相当的丰富,这里就不多做介绍了,感兴趣的请参考相关书籍。

4. 至于作业,其实从前几讲开始就没必要弄什么作业了,能坚持看下来的,相信都会自觉的写一些东西。

更新时间:2011/3/2