在win32上面绘制图形其实是比较简单的。要想进行图形绘制,关键是找到设备上下文。就我目前所知道的,获得设备上下文主要有这么几种方式:一、根据BeginPaint获得设备上下文,这主要在WM_PAINT使用;二、根据GetDC获得设备上下文,这主要用在非WM_PAINT消息中;三、CreateDC获得设备上下文,这个主要用在屏幕的截取;四、根据CreateCompatibleDC获得设备上下文,然后通过BitBlt进行绘制,这个一般用在图形界面较多的绘制场景。今天,我们就讨论前面两种,后面两种等遇到了再说。
WM_PAINT下用BeginPaint获得设备上下文是比较常用的方式,比如下面一段代码,
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
MoveToEx(hdc, 100,100,NULL);
LineTo(hdc, 150,230);
Rectangle(hdc, 200, 200, 300, 300);
Ellipse(hdc, 15,15, 130, 130);
EndPaint(hdc, &ps);
break;
同样一段代码,如果是在鼠标响应的时候调用,应该怎么修改呢?
case WM_RBUTTONUP:
hdc = GetDC(hWnd);
// TODO: Add any drawing code here...
MoveToEx(hdc, 100,100,NULL);
LineTo(hdc, 150,230);
Rectangle(hdc, 200, 200, 300, 300);
Ellipse(hdc, 15,15, 130, 130);
ReleaseDC(hWnd, hdc);
break;
大家发现没有,其实绘制的内容都是一样,只是hdc获取的方式发生了改变而已。
其次,这里主要使用了这几个函数,
MoveToEx(hdc, 100,100,NULL);
LineTo(hdc, 150,230);
Rectangle(hdc, 200, 200, 300, 300);
Ellipse(hdc, 15,15, 130, 130);
这其中MoveToEx和LineTo搭档画直线,Rectangle画矩形,Ellipse画椭圆形。
有兴趣的同学可以试一试。