C语言提供了很多函数,用于对绘图屏幕和视图区等进行控制管理。
与绘图环境相关的函数图表9-1所示:
表9-1 绘图环境函数表
l cleardevice()函数:用于清除屏幕内容,是用当前背景色清空屏幕,并将当前点移至(0, 0)。
void cleardevice();
l getaspectratio()函数:用于获取当前缩放因子。
void getaspectratio(float *pxasp,float *pyasp);
参数:pxasp返回x方向上的缩放因子,pyasp返回y方向上的缩放因子。
返回值:(无)
l setaspectratio()函数:用于设置当前缩放因子。
void setaspectratio(float xasp,float yasp);
参数:xasp为x方向上的缩放因子,例如绘制宽度为100的矩形,实际的绘制宽度为100*xasp。Yasp为y方向上的缩放因子,例如绘制高度为100的矩形,实际的绘制高度为100*yasp。
返回值:(无)
说明:
如果缩放因子为负,可以实现坐标轴的翻转。例如,执行setaspectratio(1,-1)后,可使y轴向上为正。
l graphdefaults()函数:用于重置视图、当前点、绘图色、背景色、线形、填充类型、字体为默认值。
void graphdefaults();
返回值:(无)
l setorigin()函数:用于设置坐标原点。
void setorigin(int x, int y);
x:原点的 x 坐标(使用物理坐标),y:原点的 y 坐标(使用物理坐标)。
返回值:(无)
l setcliprgn()函数:用于设置当前绘图设备的裁剪区。
void setcliprgn(HRGN hrgn);
参数:hrgn为区域的句柄,创建区域所使用的坐标为物理坐标,如果该值为 NULL,表示取消之前设置的裁剪区。
返回值:(无)
说明:
HRGN 是 Windows 定义的表示区域的句柄。将该区域设置为裁剪区后,任何区域外的绘图都将无效(但仍然可以通过操作显存在裁剪区外绘图)。
可以使用 Windows GDI 函数创建一个区域。例如,创建矩形区域可以使用函数:
HRGN CreateRectRgn(int left, int top, int right, int bottom);
此外,还可以使用函数 CreateEllipticRgn 创建椭圆形的区域,使用 CreatePolygonRgn 创建多边形的区域等等。还可以使用 CombineRgn 组合区域。更多关于区域的 GDI 函数,请参考 MSDN 中的 Region Functions。
注意:创建区域后,如果不再使用,请执行DeleteObject(HRGN hrgn) 以释放该区域对应的系统资源。
【例9-2】创建一个矩形裁剪区,并在该裁剪区内画圆,请观察裁剪效果:
#include <graphics.h>
#include <conio.h>
int main()
{
initgraph(640, 480); /* 初始化绘图窗口*/
HRGN rgn = CreateRectRgn(100, 100, 200, 200); /*创建一个矩形区域*/
setcliprgn(rgn); /*将该矩形区域设置为裁剪区*/
DeleteObject(rgn); /* 不再使用rgn,清理 rgn 占用的系统资源*/
circle(150, 150, 55); /* 画圆,受裁剪区影响,只显示出四段圆弧*/
setcliprgn(NULL); /*取消之前设置的裁剪区*/
circle(150, 150, 60); /*画圆,不再受裁剪区影响,显示出一个完整的圆*/
getch();/*按任意键退出*/
closegraph();
return 0;
}
程序运行结果:
图9-4 运行结果
l clearcliprgn()函数:用于清空裁剪区的屏幕内容。
void clearcliprgn();
返回值:(无)