您可能感兴趣的话题:

C语言

核心提示:笔者在开发县级电网调度自动化系统的过程中,碰到一个要绘制电力系统一次接线图的问题

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

一、使用方法

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

\"V":画笔提起

\"W":开始画图

\"R":开始擦图

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

\"E":调出已有文件

\"C":画圆

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

二、源程序清单

# 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 */[Page]

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

三、结束语

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

应用c语言编辑画图程序,应用C语言编辑画图程序相关推荐

  1. c语言计算二次函数顶点坐标,C语言编写一个求一元二次方程的实根的程序。 编辑一个小程序去做一元二次方程的求解(b^24ac)...

    导航:网站首页 > C语言编写一个求一元二次方程的实根的程序. 编辑一个小程序去做一元二次方程的求解(b^2>4ac) C语言编写一个求一元二次方程的实根的程序. 编辑一个小程序去做一元二 ...

  2. 黑马程序员C语言基础(第三天)

    黑马程序员C语言基础(一)第三天 https://www.bilibili.com/video/BV15W411K7k6?p=40 文章目录 低级语言与高级语言 c语言优缺点 c语言应用领域 通过gc ...

  3. c语言最简单的程序编写,C语言简单程序编写.doc

    C语言简单程序编写 项目一 C语言简单程序编写 1.1学习目标 本项目达到的目标为: 掌握程序设计的基本思路 掌握C语言的基本结构 了解流程图的符号含义 掌握C语言的关键字 会设计和编写简单的C应用程 ...

  4. 用c语言写出一个榜单程序,C语言依然位居榜单前列,依然值得程序员学习

    原标题:C语言依然位居榜单前列,依然值得程序员学习 关注.星标公众号,不错过精彩内容 如今,市面上编程语言几百种,很多人觉得Python. JAVA这种语言比较火,是不是C语言就不行了呢? 殊不知,C ...

  5. c++语言表白超炫图形_让C/C++程序员告诉你什么叫浪漫,表白黑科技,炫酷多彩求爱利器...

    原标题:让C/C++程序员告诉你什么叫浪漫,表白黑科技,炫酷多彩求爱利器 前言 缘是美丽的邂逅,爱是心跳的感觉,情是心灵的交会,恋是甜蜜的思念,走在爱与被爱的边缘,你见或者不见,爱你的心始终不改变!C ...

  6. python能开发小程序吗_微信小程序用什么语言开发?Python能开发小程序么

    小程序是什么语言开发设计的那麼微信小程序的编程语言用的什么,许多 官方网站都会微信上有微信小程序,不用下载手机软件就可以享有一样的服务项目,还无需占运行内存,棒极了有么有?下边给大伙儿产生小程序語言开 ...

  7. 算法可以用不同的语言描述如果用c语言,【判断题】算法可以用不同的语言描述,如果用C 语言或PASCAL语言等高级语言来描述,则算法实际上就是程序了。...

    [判断题]算法可以用不同的语言描述,如果用C 语言或PASCAL语言等高级语言来描述,则算法实际上就是程序了. 更多相关问题 [判断题] 一个优秀的新闻编辑的能力结构应包括分析问题的能力.引导舆论的能 ...

  8. 【Java开发语言 01】第一章 Java语言概述(基础常识+Java语言概述+Java程序运行机制及运行过程+Java语言环境的搭建+开发体验hello world+错误:编码GBK的不可映射字符)

    java入门-第一章Java语言概述 1基础常识 软件开发 人机交互方式 常用的DOS命令(win系统,有一些直接通过命令执行的) 2 Java语言概述 什么是计算机语言 关于面向对象和面向过程 Ja ...

  9. python能开发小程序吗_搭建小程序用Python语言可以搭建吗?

    原标题:搭建小程序用Python语言可以搭建吗? 正如我们在学习语言编程的过程中能发现各种逻辑规律的奥妙无穷那样,当我们能掌握一种语言编程方式之后,逐渐地也能深刻地感受到如今在小程序编写上还能有着怎样 ...

  10. 只能输入字母的c语言程序设计教程课后答案,c语言程序设计基础教程_习题答案解析.doc...

    c语言程序设计基础教程_习题答案解析.doc 习题答案 第1章 填空题 应用程序ONEFUNC.C中只有一个函数,这个函数的名称是__main . 一个函数由__函数头__和__函数体__两部分组成. ...

最新文章

  1. linux登录密码破解
  2. Product API buffer
  3. 使用SAP ABAP BSP应用实现一个环状的进度条
  4. idea迁移到其他电脑,省去重新安装破解及配置
  5. 深入理解 Laravel 管道
  6. HTML5 vs. Flash:Adobe面向何方?
  7. 自动驾驶汽车如何解决复杂交互问题?清华联合MIT提出M2I方案
  8. chainmaker 交易执行失败也会打包到区块 落盘
  9. python中else与for_在Python中使用else条件语句和for循环
  10. 软件测试工程师必备的27个基础技能
  11. Packet Tracer 思科模拟器入门教程 之十 路由器单臂路由配置
  12. 小刘同学的第一百五十八篇日记
  13. 设计师的“通天塔”—浅谈设计沟通
  14. 2017 东北四省赛热身赛 C
  15. (SEED-Lab) DNS_Local Attack Lab
  16. Python调用百度API实现语音识别
  17. @property基本概念
  18. C# 判断是不是非负数
  19. 自引用结构兼谈Malloc和Free函数
  20. 【DP1】钢条分割详解

热门文章

  1. 关于Java和Scala同步的五件事你不知道
  2. Java开发人员的Erlang
  3. 将原生SQL功能休眠到您的Spring Data Repository中
  4. Spring Security –在一个应用程序中有两个安全领域
  5. IntelliJ IDEA for Mac在MacOS模式下的选择快捷键(Select Shortcut)
  6. Java的子类可以继承父类的私有变量和私有方法吗?
  7. php调用swf文件上传,swfupload-jquery-plugin AJAX+PHP 文件上传
  8. java代码审计ssrf危险函数_某租车系统Java代码审计之后台注入漏洞分析
  9. sql 计算两个小数乘积_数学篇|学会这些数学计算技巧,想不满分都难!
  10. python循环输出三角形图案的画_python循环输出三角形图案的例子