作者在 2007-09-09 06:54:00 发布以下内容
大家都知道C语言图形编程一共提供了4种类型的线型.大家可以在下面的枚举型定义里看出.
enum line_styles
{SOLID_LINE = 0,DOTTED_LINE = 1,CENTER_LINE = 2,DASHED_LINE = 3,USERBIT_LINE = 4,};
显然,这四种线型对我们开发比较大的程序是不够的.因此,C语言图形编程提供了一种自定义线型的方法.
这就方便我们开发出具有自身特色的图形.废话少说,我们就开始介绍怎么自定义线型吧.
大家都知道,C语言中提供了一个能设置线型的函数setlinestyle().它的原型声明:
void far _Cdecl setlinestyle(int linestyle, unsigned upattern,int thickness);
从函数原型声明中可以看出,linestyle指的是线型(这里我们就自定义线型USERBIT_LINE),
thickness指的是线的宽度.这里的upattern是就是自定义线型的时侯用的.如果不是自定义线型,
这个形参就不启作用.当linestyle为USERBIT_LINE时,也就是自定义类型时,upattern才能发挥作用.
现在,大家可能会问自定义线型是怎样画线的.这个原理和点阵汉字的显示相类似.
也就是检查upattern的位,如果位上为1,就显示,如果为0不作任何操作.
例如:upattern为0x0001.大家可以看出它的低字节为0x01,高字节为0x00.
画线程序首先是在upattern从低位到高低的扫描,如果位上为1,就画点.
upattern的位示意图:
低字节: 1 0 0 0 0 0 0 0 0 高字节: 0 0 0 0 0 0 0 0
低位------->高位 低位------->高位
由上位示意图,可以看出当upattern为0x0001时,线型就是每隔16个点画一个点.
以上为线型,如果作这样的一条线line(100,100,200,100),它的工作原理:
首先,检查upattern的低字节的最低位,如果为1,就在(100,100)上画上一点.如果为0,就不作操作.
然后,继续检查upattern的低字节的第二低位,如果为1,就是(101,100)的位置上画一点,反点,不操作.
继续从低到高扫描,直到扫描守高字节的最高位,再从低字节的最低位重新开始.
直到输出点(200,100)结束.
好了,其它就是不多说,就讲到这里吧.
enum line_styles
{SOLID_LINE = 0,DOTTED_LINE = 1,CENTER_LINE = 2,DASHED_LINE = 3,USERBIT_LINE = 4,};
显然,这四种线型对我们开发比较大的程序是不够的.因此,C语言图形编程提供了一种自定义线型的方法.
这就方便我们开发出具有自身特色的图形.废话少说,我们就开始介绍怎么自定义线型吧.
大家都知道,C语言中提供了一个能设置线型的函数setlinestyle().它的原型声明:
void far _Cdecl setlinestyle(int linestyle, unsigned upattern,int thickness);
从函数原型声明中可以看出,linestyle指的是线型(这里我们就自定义线型USERBIT_LINE),
thickness指的是线的宽度.这里的upattern是就是自定义线型的时侯用的.如果不是自定义线型,
这个形参就不启作用.当linestyle为USERBIT_LINE时,也就是自定义类型时,upattern才能发挥作用.
现在,大家可能会问自定义线型是怎样画线的.这个原理和点阵汉字的显示相类似.
也就是检查upattern的位,如果位上为1,就显示,如果为0不作任何操作.
例如:upattern为0x0001.大家可以看出它的低字节为0x01,高字节为0x00.
画线程序首先是在upattern从低位到高低的扫描,如果位上为1,就画点.
upattern的位示意图:
低字节: 1 0 0 0 0 0 0 0 0 高字节: 0 0 0 0 0 0 0 0
低位------->高位 低位------->高位
由上位示意图,可以看出当upattern为0x0001时,线型就是每隔16个点画一个点.
以上为线型,如果作这样的一条线line(100,100,200,100),它的工作原理:
首先,检查upattern的低字节的最低位,如果为1,就在(100,100)上画上一点.如果为0,就不作操作.
然后,继续检查upattern的低字节的第二低位,如果为1,就是(101,100)的位置上画一点,反点,不操作.
继续从低到高扫描,直到扫描守高字节的最高位,再从低字节的最低位重新开始.
直到输出点(200,100)结束.
好了,其它就是不多说,就讲到这里吧.