在县级电网调度自动化系统的开发过程中,我们遇到了绘制电力系统一次性接线图的问题. 由于电源系统的主要接线图更加复杂,因此使用通用的编程方法来绘制它更加困难. 因此c 画图板,用C语言开发了用于手动绘制电源系统主要接线图的键盘绘制程序. 而且效果很好. 以下编辑为您分享了一些技巧,希望能帮助您解决难题.
I. 使用方法
程序中定义了几个特殊键:
\“ V”: 拉起
\“ W”: 开始绘制
\“ R”: 开始删除图片
\“ S”: 将当前图形保存到文件
\“ E”: 调用现有文件
\“ C”: 画一个圆
程序运行后,屏幕上会出现一个边框以设置绘图区域. 凸起的笔形符号出现在该区域的中间. 当按下“ W”键时,笔符号改变. 这时,您可以移动箭头键((上,下,左,右,左上,左下,右上,右下)绘制图片;按“ R”键时,笔符号会改变,然后可以移动箭头键以删除图片;在绘制过程中,请按“ C”键绘制半径为20像素的圆. 完成绘制后,请按“ S”键保存绘制的图形;按“ E”键调出现有图形进行编辑.
第二个源程序列表
#include \“ graphics.h \”
#include \“ stdio.h \”
#include \“ fcntl.h \”
#include \“ stdlib.h \”
主要()
void save(),load();
void * wg,* rg,* vg,* fy;
int驱动程序,模式;
int c =红色;
int x = 320c 画图板,y = 225;
int x1,y1,x2,y2;
int k,k1,k2;
/ *初始化绘图仪* /
detectgraph(&驱动程序,&模式);
initgraph(&驱动程序,&模式,\“ c: \\ tc \”);
/ *书写笔* /
bar(200,10,206,16);
line(203,7,200,10);
第(203,7,206,10)行;
line(243,7,240,16);
line(243,7,246,16);
line(283,7,280,10);
line(283,7,286,10);
line(283,7,283,16);

/ *保存笔* /
wg = malloc(imagesize(200,7,206,16));
rg = malloc(imagesize(240,7,246,16));
vg = malloc(imagesize(280,7,286,16));
fy = malloc(imagesize(200,7,206,16));
getimage(200,7,206,16,wg);
getimage(240,7,246,16,rg);
getimage(280,7,286,16,vg);
cleardevice();
/ *填写框* /
setcolor();
矩形(4,19,637,447);
x1 = x-3;
y1 = y + 1;
x2 = x + 3;
y2 = y + 10;
getimage(x1,y1,x2,y2,fy);
putimage(x1,y1,vg,XOR_PUT);
/ *接收命令* /
对于(;;)
while(bioskey(1)== 0);
k =生物钥匙(0);
putimage(x1,y1,fy,AND_PUT);
如果((((k&0x00ff)| 0x00)== 0)
k1 = k&0xff? 0: k >> 8; / * k1是特殊键值* /
其他
k2 = k&0x00ff; / * k2是非特殊键值* /
如果((((k&0x00ff)| 0x00)== 0)/ *特殊键* /
开关(k1)
案例45:
restorecrtmode();
退出(0);
案例72:
如果(y> 20)
y = y-1;

休息;
案例75:
如果(x> 5)
x = x-1;
休息;
案例77:
如果(x <636)
x = x + 1;
休息;
案例80:
如果(y <446)
y = y + 1;
休息;
案例71:
如果(((x> 5)&&(y> 20))
x = x-1;
y = y-1;
休息;
案例79:
如果((x> 5)&&(y <446))
x = x-1;
y = y + 1;
休息;
案例73:
if(((x <636)&&(y> 20))
x = x + 1;
y = y-1;
休息;
案例81:
if((x <636)&&(y <446))
x = x + 1;
y = y + 1;
休息;
x1 = x-3;
y1 = y + 1;

x2 = x + 3;
y2 = y + 10;
getimage(x1,y1,x2,y2,fy);
/ *非特殊键* / [页]
开关(k2)
案例118: / * \'v \'* /
案例86: / * \'V \'* /
putimage(x1,y1,vg,OR_PUT);
休息;
案例119: / * \'w \'* /
案例87: / * \'W \'* /
putimage(x1,y1,wg或OR_PUT);
putpixel(x,y,c);
休息;
案例114: / * \'r \'* /
案例82: / * \'R \'* /
putimage(x1,y1,rg,OR_PUT);
putpixel(x,y,BLACK);
休息;
案例115: / * \'s \'* /
案例83: / * \'S \'* /
保存(\“ pic.dat \”);
休息;
案例101: / * \'e \'* /
案例69: / * \'E \'* /
加载(\“ pic.dat \”);
休息;
案例99: / * \'c \'* /
案例67: / * \'C \'* /
setcolor(红色);
圆(x,y,20);
休息;
默认: 继续;
/ *用于保存屏幕图像的功能
* /

无效保存(char * fname)
文件* fp;
int i;
注册long j;
char far * ptr;
fp = fopen(fname,\“ wb \”);
对于(i = 0; i <4; i ++)
输出(0x3CE,4);
输出(0x3CF,i);
ptr =(字符远*)0xA0000000L;
for(j = 0; j <38400L; j ++)
putc(* ptr,fp);
ptr ++;
fclose(fp);
输出(0x3CF,0);
/ *用于屏幕图像显示的功能
* /
空载(char * fname)
文件* fp;
注册int i;
int k4 = 1;
注册long j;
char far * ptr;
fp = fopen(fname,\“ rb \”);
对于(i = 0; i <4; i ++)
输出(0x3,2);
输出(0x3C5,k4);
ptr =(字符远*)0xA0000000L;
for(j = 0; j <38400L; j ++)
* ptr = getc(fp);
ptr ++;
k4 * = 2;
fclose(fp);
输出(0x3C5,0xF);
三,结论
该程序在Turbo C 2.0环境下运行,效果很好. 您可以根据自己的特定需求扩展程序以增加绘图功能.
来源: QQ空间克隆
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-160882-1.html
#杨洋2015金投赏##杨洋轻奢young#羊毛携手杨洋
赶紧抢
我官网买的米2差不多充满两次是可以的