⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gra.htm

📁 C程序宝藏,内有标准C的详细介绍,适合自学,初学人员参考
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setfillstyle(1,14);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
/*设置填充方式*/
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bar3d(100,200,400,350,200,1);
/*画长方体并填充*/
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; floodfill(450,300,LIGHTRED);&nbsp;
/*填充长方体另外两个面*/
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; floodfill(250,150,
LIGHTRED);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rectanle(450,400,500,450);&nbsp;&nbsp;&nbsp;
/*画一矩形*/
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; floodfill(470,420,
LIGHTRED); /*填充矩形*/
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getch();
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; closegraph();
<BR>&nbsp;&nbsp;&nbsp;&nbsp; }

<P>&nbsp;&nbsp;&nbsp; 6. 有关图形窗口和图形屏幕操作函数

<P>&nbsp;&nbsp;&nbsp; 一、图形窗口操作
<BR>&nbsp;&nbsp;&nbsp; 象文本方式下可以设定屏幕窗口一样, 图形方式下也可以在屏幕上某一区域
<BR>设定窗口, 只是设定的为图形窗口而已, 其后的有关图形操作都将以这个窗口的
<BR>左上角(0,0)作为坐标原点, 而且可为通过设置使窗口之外的区域为不可接触。
<BR>这样, 所有的图形操作就被限定在窗口内进行。
<BR>&nbsp;&nbsp;&nbsp; void far setviewport(int xl,int yl,int x2, int y2,int
clipflag);
<BR>&nbsp;&nbsp;&nbsp; 设定一个以(xl,yl)象元点为左上角, (x2,y2)象元为右下角的图形窗口,
<BR>中x1,y1,x2,y2是相对于整个屏幕的坐标。若clipflag为非0, 则设定的图形以外
<BR>部分不可接触, 若clipflag为0, 则图形窗口以外可以接触。
<BR>&nbsp;&nbsp;&nbsp;&nbsp; void far clearviewport(void);
<BR>&nbsp;&nbsp;&nbsp; 清除现行图形窗口的内容。
<BR>&nbsp;&nbsp;&nbsp;&nbsp; void far getviewsettings(struct viewporttype
far * viewport);
<BR>&nbsp;&nbsp;&nbsp; 获得关于现行窗口的信息,并将其存于viewporttype定义的结构变量viewport
<BR>中, 其中viewporttype的结构说明如下:
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct viewporttype{
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
int left, top, right, bottom;
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
int cliplag;
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };
<BR>&nbsp;&nbsp; 注明:
<BR>&nbsp;&nbsp;&nbsp;&nbsp; 1. 窗口颜色的设置与前面讲过的屏幕颜色设置相同,
但屏幕背景色和窗口
<BR>背景色只能是一种颜色, 如果窗口背景色改变, 整个屏幕的背景色也将改变这与
<BR>文本窗口不同。
<BR>&nbsp;&nbsp;&nbsp;&nbsp; 2. 可以在同一个屏幕上设置多个窗口, 但只能有一个现行窗口工作,
要对
<BR>其它窗口操作, 通过将定义那个窗口的setviewport()函数再用一次即可。
<BR>&nbsp;&nbsp;&nbsp;&nbsp; 3. 前面讲过图形屏幕操作的函数均适合于对窗口的操作。

<P>&nbsp;&nbsp;&nbsp; 二、屏幕操作
<BR>&nbsp;&nbsp;&nbsp; 除了清屏函数以外, 关于屏幕操作还有以下函数:
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void far setactivepage(int pagenum);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void far setvisualpage(int pagenum);
<BR>&nbsp;&nbsp;&nbsp; 这两个函数只用于EGA,VGA 以及HERCULES图形适配器。setctivepage()
函数
<BR>是为图形输出选择激活页。&nbsp; 所谓激活页是指后续图形的输出被写到函数选定的
<BR>pagenum页面, 该页面并不一定可见。setvisualpage()函数才使pagenum 所指定
<BR>的页面变成可见页。页面从0开始(Turbo C默认页)。如果先用setactivepage()
<BR>函数在不同页面上画出一幅幅图像,再用setvisualpage()函数交替显示, 就可以
<BR>实现一些动画的效果。
<BR>&nbsp;&nbsp;&nbsp;&nbsp; void far getimage(int xl,int yl, int x2,int
y2, void far *mapbuf);
<BR>&nbsp;&nbsp;&nbsp;&nbsp; void far putimge(int x,int,y,void * mapbuf,
int op);
<BR>&nbsp;&nbsp;&nbsp;&nbsp; unsined far imagesize(int xl,int yl,int x2,int
y2);
<BR>&nbsp;&nbsp;&nbsp;&nbsp; 这三个函数用于将屏幕上的图像复制到内存,然后再将内存中的图像送回到
<BR>屏幕上。首先通过函数imagesize()测试要保存左上角为(xl,yl), 右上角为(x2,
<BR>y2)的图形屏幕区域内的全部内容需多少个字节, 然后再给mapbuf 分配一个所测
<BR>数字节内存空间的指针。通过调用getimage()函数就可将该区域内的图像保存在
<BR>内存中, 需要时可用putimage()函数将该图像输出到左上角为点(x, y)的位置上,
<BR>其中getimage()函数中的参数op规定如何释放内存中图像。
<BR>&nbsp;&nbsp;&nbsp; 关于这个参数的定义参见表8。

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
表8. putimage()函数中的op值
<BR>&nbsp;&nbsp;&nbsp;&nbsp; ━━━━━━━━━━━━━━━━━━━━━━━━━━
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
符号常数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数值&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
含&nbsp;&nbsp; 义
<BR>&nbsp;&nbsp;&nbsp;&nbsp; ──────────────────────────
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
COPY_PUT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
复制
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
XOR_PUT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
与屏幕图像异或的复制
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
OR_PUT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
与屏幕图像或后复制
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
AND_PUT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
与屏幕图像与后复制
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
NOT_PUT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
复制反像的图形
<BR>&nbsp;&nbsp;&nbsp;&nbsp; ━━━━━━━━━━━━━━━━━━━━━━━━━━

<P>&nbsp;&nbsp;&nbsp; 对于imagesize()函数, 只能返回字节数小于64K字节的图像区域,
否则将会
<BR>出错, 出错时返回-1。
<BR>&nbsp;&nbsp;&nbsp; 本节介绍的函数在图像动画处理、菜单设计技巧中非常有用。

<P>&nbsp;&nbsp;&nbsp; 例13:&nbsp; 下面程序模拟两个小球动态碰撞过程。
<BR>&nbsp;&nbsp;&nbsp;&nbsp; #include&lt;stdio.h>
<BR>&nbsp;&nbsp;&nbsp;&nbsp; #include&lt;graphics.h>
<BR>&nbsp;&nbsp;&nbsp;&nbsp; int main()
<BR>&nbsp;&nbsp;&nbsp;&nbsp; {
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i, gdriver,
gmode, size;
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void *buf;
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gdriver=DETECT;
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; initgraph(&amp;gdriver,
&amp;gmode, "");
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setbkcolor(BLUE);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cleardevice();
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setcolor(LIGHTRED);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setlinestyle(0,0,1);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setfillstyle(1,
10);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; circle(100,
200, 30);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; floodfill(100,
200, 12);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size=imagesize(69,
169, 131, 231);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buf=malloc(size);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getimage(69,
169, 131, 231,buf);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putimage(500,
269, buf, COPY_PUT);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=0; i&lt;185;
i++){
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
putimage(70+i, 170, buf, COPY_PUT);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
putimage(500-i, 170, buf, COPY_PUT);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=0;i&lt;185;
i++){
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
putimage(255-i, 170, buf, COPY_PUT);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
putimage(315+i, 170, buf, COPY_PUT);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getch();
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; closegraph();
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }

<P>&nbsp;&nbsp;&nbsp; 7. 图形模式下的文本输出

<P>&nbsp;&nbsp;&nbsp; 在图形模式下, 只能用标准输出函数, 如printf(), puts(),
putchar() 函
<BR>数输出文本到屏幕。除此之外, 其它输出函数(如窗口输出函数)不能使用, 即是
<BR>可以输出的标准函数, 也只以前景色为白色, 按80列, 25行的文本方式输出。
<BR>&nbsp;&nbsp;&nbsp; Turbo C2.0也提供了一些专门用于在图形显示模式下的文本输出函数。下面
<BR>将分别进行介绍。
<BR>&nbsp;&nbsp;&nbsp; 一、文本输出函数
<BR>&nbsp;&nbsp;&nbsp;&nbsp; void far outtext(char far *textstring);
<BR>&nbsp;&nbsp;&nbsp; 该函数输出字符串指针textstring所指的文本在现行位置。
<BR>&nbsp;&nbsp;&nbsp;&nbsp; void far outtextxy(int x, int y, char far
*textstring);
<BR>&nbsp;&nbsp;&nbsp; 该函数输出字符串指针textstring所指的文本在规定的(x,
y)位置。 其中x
<BR>和y为象元坐标。
<BR>&nbsp;&nbsp;&nbsp; 说明:
<BR>&nbsp;&nbsp;&nbsp;&nbsp; 这两个函数都是输出字符串, 但经常会遇到输出数值或其它类型的数据,
<BR>此时就必须使用格式化输出函数sprintf()。
<BR>&nbsp;&nbsp;&nbsp; sprintf()函数的调用格式为:
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int sprintf(char *str, char *format,
variable-list);
<BR>&nbsp;&nbsp;&nbsp; 它与printf()函数不同之处是将按格式化规定的内容写入str
指向的字符串
<BR>中, 返回值等于写入的字符个数。
<BR>&nbsp;&nbsp;&nbsp; 例如:
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sprintf(s, "your TOEFL score is
%d", mark);
<BR>&nbsp;&nbsp;&nbsp; 这里s应是字符串指针或数组, mark为整型变量。

<P>&nbsp;&nbsp;&nbsp; 二、有关文本字体、字型和输出方式的设置
<BR>&nbsp;&nbsp;&nbsp; 有关图形方式下的文本输出函数, 可以通过setcolor()函数设置输出文本的
<BR>颜色。另外, 也可以改变文本字体大小以及选择是水平方向输出还是垂直方向输
<BR>出。

<P>&nbsp;&nbsp;&nbsp;&nbsp; void far settexjustify(int horiz, int vert);
<BR>&nbsp;&nbsp;&nbsp; 该函数用于定位输出字符串。
<BR>&nbsp;&nbsp;&nbsp; 对使用outtextxy(int x, int y, char far *str textstring)
函数所输出
<BR>的字符串, 其中哪个点对应于定位坐标(x, y)在Turbo C2.0中是有规定的。如果
<BR>把一个字符串看成一个长方形的图形, 在水平方向显示时, 字符串长方形按垂直
<BR>方向可分为顶部, 中部和底部三个位置, 水平方向可分为左, 中, 右三个位置,
<BR>两者结合就有9个位置。
<BR>&nbsp;&nbsp;&nbsp; settextjustify()函数的第一个参数horiz指出水平方向三个位置中的一个,
<BR>第二个参数vert指出垂直方向三个位置中的一个, 二者就确定了其中一个位置。
<BR>当规定了这个位置后, 用outtextxy()函数输出

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -