授权:共享软件 大小:153KB 语言: 简体中文

笔者在开发县级电网调度自动化系统的过程中,碰到一个要绘制电力系统一次接线图的问题。由于电力系统一次接线图比较复杂,图上有一些特殊的符号,象变压器符号、开关符号等等,用一般的编程方法来绘制比较困难,因此,笔者用C语言开发了一个手工绘制电力系统一次接线图的键盘绘图程序,使用该程序绘制的一次接线图符合用户需求,效果良好。

2.使用方法

程序中定义了几个特殊键:

"V”:画笔提起

"W”:开始画图

"R”:开始擦图

"S”:当前图形存入文件

"E”:调出已有文件

"C”:画圆

程序一运行,屏幕上出现一个黄色的边框来设定画图的区域,区域中间出现提起的画笔符号 ,当按下”W“键时,画笔符号变为 ,此时可移动方向键(上、下、左、右、左上、左下、右上、右下)来画图;当按下”R“键时,画笔符号变为 ,此时可移动方向键来擦图;在画图过程中,按下“C”键,可画出一个半径为20个象素点的圆;当结束画图时,按下“S”键,将画好的图形存盘;按下“E”键可调出已有的图形进行编辑。

3.源程序清单

# include "graphics.h"

# include "stdio.h"

# include "fcntl.h"

# include "stdlib.h"

main()

void save(),load();

void *wg,*rg,*vg,*fy;

int driver,mode;

int c=RED;

int x=320,y=225;

int x1,y1,x2,y2;

int k,k1,k2;

/* initialize grapher */

detectgraph(&driver,&mode);

initgraph(&driver,&mode,"c:\tc");

/* write the pen */

bar(200,10,206,16);

line(203,7,200,10);

line(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);

/* save the pen */

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();

/* write the box */

setcolor(YELLOW);

rectangle(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);

/* receive the command */

for (;;)

while (bioskey(1)==0);

k=bioskey(0);

putimage(x1,y1,fy,AND_PUT);

if (((k&0x00ff)|0x00)==0)

k1=k&0xff?0:k>>8; /* k1 is the specialkey value */

else

k2=k&0x00ff; /* k2 is the non-specialkey value */

if (((k&0x00ff)|0x00)==0) /* Special key */

switch(k1)

case 45:

restorecrtmode();

exit(0);

case 72:

if (y>20)

y=y-1;

break;

case 75:

if (x>5)

x=x-1;

break;

case 77:

if (x<636)

x=x+1;

break;

case 80:

if (y<446)

y=y+1;

break;

case 71:

if ((x>5)&&(y>20))

x=x-1;

y=y-1;

break;

case 79:

if ((x>5)&&(y<446))

x=x-1;

y=y+1;

break;

case 73:

if ((x<636)&&(y>20))

x=x+1;

y=y-1;

break;

case 81:

if ((x<636)&&(y<446))

x=x+1;

y=y+1;

break;

x1=x-3;

y1=y+1;

x2=x+3;

y2=y+10;

getimage(x1,y1,x2,y2,fy);

/* non-special key */

switch(k2)

case 118: /* 'v' */

case 86: /* 'V' */

putimage(x1,y1,vg,OR_PUT);

break;

case 119: /* 'w' */

case 87: /* 'W' */

putimage(x1,y1,wg,OR_PUT);

putpixel(x,y,c);

break;

case 114: /* 'r' */

case 82: /* 'R' */

putimage(x1,y1,rg,OR_PUT);

putpixel(x,y,BLACK);

break;

case 115: /* 's' */

case 83: /* 'S' */

save("pic.dat");

break;

case 101: /* 'e' */

case 69: /* 'E' */

load("pic.dat");

break;

case 99: /*'c'*/

case 67: /*'C'*/

setcolor(RED);

circle(x,y,20);

break;

default:continue;

/* function for screen picture save

*/

void save(char *fname)

FILE *fp;

int i;

register long j;

char far *ptr;

fp=fopen(fname,"wb");

for(i=0;i<4;i++)

outportb(0x3CE,4);

outportb(0x3CF,i);

ptr=(char far *) 0xA0000000L;

for (j=0;j<38400L;j++)

putc(*ptr,fp);

ptr++;

fclose(fp);

outportb(0x3CF,0);

/* function for screen picture display

*/

void load(char *fname)

FILE *fp;

register int i;

int k4=1;

register long j;

char far *ptr;

fp=fopen(fname,"rb");

for (i=0;i<4;i++)

outportb(0x3C4,2);

outportb(0x3C5,k4);

ptr=(char far *)0xA0000000L;

for (j=0;j<38400L;j++)

*ptr=getc(fp);

ptr++;

k4*=2;

fclose(fp); outportb(0x3C5,0xF);

4.总结

该程序在Turbo C 2.0环境下运行通过,使用效果良好。可以根据具体需要,对该程序进行扩充,以增加绘图功能。

c语言窗口画图,C语言实现画图程序相关推荐

  1. c语言窗口插件,C语言使用ActiveX控件

    ActiveX使用的头文件,是只有C++才能用的,C语言要使用ActiveX控件,也是件很容易的事. 微软标准的ActiveX控件,根本上它还是一个窗口(Window),通俗地说就是关联了一个或多个C ...

  2. c语言窗口插件,C语言插件开发形式

    C语言插件开发模式 以前总是不明白为什么不同的模块是相互独立的编译,相互之间不存在的调用关系, 怎么做到在使用的时候加载不使用的时候卸载掉? 现在总算是明白了.其实就是将一个功能做成一个动态库,在wi ...

  3. c语言窗口程序暂停,C语言中的时间和程序暂停

    C/C++中的计时函数是clock(),而与其相关的数据类型是clock_t.在MSDN中,查得对clock函数定义如下: clock_t clock( void ); 这个函数返回从"开启 ...

  4. r语言 断轴 画图_R语言基础画图/绘图/作图

    R语言基础画图 R语言免费且开源,其强大和自由的画图功能,深受广大学生和可视化工作人员喜爱,这篇文章对如何使用R语言作基本的图形,如直方图,点图,饼状图以及箱线图进行简单介绍. 0 结构 每种图形构成 ...

  5. linux r语言画图,R语言︱画图

    笔者寄语:不论画啥,你先plot准没错. plot 二维坐标绘图 dotchart 点图 barplot 条形图 hist 直方图 pie 饼图 points 添加点 lines 添加线 text 添 ...

  6. R语言——在linux环境下如何画图或保存图片

    通常在win环境下,我们利用RStudio画图非常方便,直接plot就可以展现出图片,但是在linux环境下,我们通过shell则无法画图. 问题 例如我们在linux下的R中输入如下命令: png( ...

  7. linux 易语言窗口程序_易语言开发Linux程序

    令人兴奋的是易语言可以开发Linux程序,易语言是一个跨平台的开发工具,支持Windows及Linux.使用易语言开发Linux程序,您可以在Windows环境下编写基本于Windows的程序,及编写 ...

  8. 易语言html截图,易语言窗口截图源码

    易语言窗口截图源码系统结构:子程序1,PaintRect,SetTimer,GetCursorPos,WindowFromPoint,KillTimer,GetWindowRect,CreateDC, ...

  9. C语言怎么改变窗口颜色,C语言运行窗口颜色.doc

    C语言运行窗口颜色 C语言运行窗口颜色 #include #include int main(void) { int i,j; printf("背景颜色:0:黑.1:蓝.2:绿.3:湖蓝色. ...

  10. c语言窗口如何加背景图片,MFC积累---关于设置背景图片、背景颜色插入背景音乐...

    第二种方法是把声音文件加入到资源中,然后从资源中播放声音.Visual C++支持WAVE型资源,用户在资源视图中单击鼠标右键并选择Import命令,然后在文件选择对话框中选择The Microsof ...

最新文章

  1. 返回浏览器或div 顶部
  2. html 乱码_html小坑:网页变成乱码
  3. 如何将Unix时间戳转换为DateTime,反之亦然?
  4. 注册表修改之USB口启用
  5. python杂记-读取png图像文件头数据
  6. 将html代码确析成json数据格式,JSON字符串解析成JSON数据格式
  7. vba 修改下拉列表_Excel隐藏的超实用技能,涉及VBA技巧,建议【收藏】
  8. 海上瓶子下有东西吗_《海上钢琴师》:宁愿一生孤独,不愿随波逐流。
  9. supsplk 服务器被植入木马 挖矿 cpu使用 700%
  10. 电脑主板跳线_电脑主板跳线连接图
  11. 反向代理实现同域名下PHP和Java共存
  12. Hadoop权威指南环境搭建+实例运行
  13. 计算机连接游戏手柄,无线游戏手柄怎么连接电脑 无线游戏手柄链接电脑方法...
  14. 片袖原型制图_袖原型一片袖打版干货
  15. ubuntu安装matlab2016b
  16. CI24R1低成本国产2.4G无线收发器芯片替代XN297精简版SI24R1
  17. 引介|主流密钥管理项目深度对比
  18. AWS的下一站:3.8万亿美元的企业IT市场
  19. php 上传绕过,文件上传验证绕过技术总结
  20. symmetric tree java_Symmetric Tree对称树

热门文章

  1. Excise_day05_Array
  2. Android 启动过程介绍
  3. 怎么给pdf文件插入页码,有什么简单的方法?
  4. Codeforces 106C Buns 【0-1背包】
  5. 大学生慕课网站计算机操作系统,中国大学mooc电脑版
  6. 魔兽对战平台服务器更新维护什么,魔兽官方对战平台更新:公会系统正式上线!...
  7. Android图片压缩——Luban鲁班压缩
  8. 【侯捷】C++面向对象程序设计
  9. java开发设置用户头像_如何修改 WordPress 的用户默认头像?
  10. linux+新浪行情接口,新浪天气API接口