C语言编辑中应用画图程序技巧

所属分类: 软件教程 / 编程开发 阅读数: 1655
收藏 0 赞 0 分享

  在开发县级电网调度自动化系统的过程中,碰到一个要绘制电力系统一次接线图的问题。由于电力系统一次接线图比较复杂,用一般的编程方法来绘制比较困难,因此,用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环境下运行通过,使用效果良好.可以根据具体需要,对该程序进行扩充,以增加绘图功能.

更多精彩内容其他人还在看

精易模块新手入门图文教程

精易模块是最好用的开源易模块,全中文命令,多个常用类功能,采用windows Api+核心命令打造,性能强大、使用简单、功能免费、免费开源,这篇文章主要介绍了精易模块新手入门图文教程,需要的朋友可以参考下
收藏 0 赞 0 分享

scratch3.0怎么制作会变色的鹦鹉动画?

scratch3.0怎么制作会变色的鹦鹉动画?scratch3.0中想要制作一个会变色的鹦鹉,该怎么制作这个效果呢?下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

windows下jdk安装图解(覆盖安装报错)

这篇文章主要介绍了windows下jdk安装图解,覆盖安装报错,第一次安装和第二次安装区别,需要的朋友可以参考下
收藏 0 赞 0 分享

Java配置 JDK开发环境搭建及环境变量配置详细图文教程

这篇文章主要介绍了Java配置 JDK开发环境搭建及环境变量配置详细图文教程,需要的朋友可以参考下
收藏 0 赞 0 分享

IntelliJ IDEA搭建Android开发环境图文详解

这篇文章主要介绍了IntelliJ IDEA搭建Android开发环境图文详解,需要的朋友可以参考下
收藏 0 赞 0 分享

visual studio 2019的安装以及使用方法

这篇文章主要介绍了visual studio 2019的安装以及使用图文方法,一款专为帮助程序设计人员更好,设计更优质程序开发的功能强大,需要的朋友可以参考下
收藏 0 赞 0 分享

基于IntelliJ IDEA 13搭建Android集成开发环境(图文教程)

使用IntelliJ IDEA搭建Android集成开发环境,但是感觉不详细,所以打算自己整理一个详细的图文教程,希望能对新手(包括自己)有所帮助,需要的朋友可以参考下
收藏 0 赞 0 分享

代码自动生成工具ASP.NET Maker 2020安装及激活教程(附注册机下载)

ASP.NET Maker 2020如何激活?ASP.NET Maker 2020一款功能强大的自动化代码生成器,下文中详细的介绍了本软件的安装及激活教程,另附上注册机下载,感兴趣的朋友不妨阅读下文内容,参考一下吧
收藏 0 赞 0 分享

python运行环境搭建和pycharm的安装配置及汉化(零基础小白版)

写这篇文章主要是介绍一下python的环境搭建和pycharm的安装配置,适合零基础的同学观看。这篇文章你会学到python的环境搭建和python比较好用的IDE pycharm的安装与基础配置
收藏 0 赞 0 分享

IntelliJ WebStorm 2020.3.3 最新激活教程 附汉化补丁安装教程

今天脚本小编给大家分享的是IntelliJ WebStorm 2020.3.3最新激活补丁和汉化补丁的安装激活教程,此款软件的激活比较麻烦,每个版本激活方法都不一样,所以小编就给大家分享了详细的安装激活教程,此教程是小编一步一步安装得来,所以真实有效,大家放心按照步骤安装即可
收藏 0 赞 0 分享
查看更多