国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 編程設(shè)計 > 正文

C語言編輯中應(yīng)用畫圖程序技巧

2020-07-14 13:20:22
字體:
供稿:網(wǎng)友

  在開發(fā)縣級電網(wǎng)調(diào)度自動化系統(tǒng)的過程中,碰到一個要繪制電力系統(tǒng)一次接線圖的問題。由于電力系統(tǒng)一次接線圖比較復雜,用一般的編程方法來繪制比較困難,因此,用C語言開發(fā)了一個手工繪制電力系統(tǒng)一次接線圖的鍵盤繪圖程序,使用該程序繪制的一次接線圖符合用戶需求,效果良好。下面小編給大家分享下技巧,希望可以幫助到大家解決困難。
  一、使用方法
  程序中定義了幾個特殊鍵:
  /"V":畫筆提起
  /"W":開始畫圖
  /"R":開始擦圖
  /"S":當前圖形存入文件
  /"E":調(diào)出已有文件
  /"C":畫圓
  程序一運行,屏幕上出現(xiàn)一個黃色的邊框來設(shè)定畫圖的區(qū)域,區(qū)域中間出現(xiàn)提起的畫筆符號 ,當按下"W"鍵時,畫筆符號變?yōu)?,此時可移動方向鍵(上、下、左、右、左上、左下、右上、右下)來畫圖;當按下"R"鍵時,畫筆符號變?yōu)?,此時可移動方向鍵來擦圖;在畫圖過程中,按下"C"鍵,可畫出一個半徑為20個象素點的圓;當結(jié)束畫圖時,按下"S"鍵,將畫好的圖形存盤;按下"E"鍵可調(diào)出已有的圖形進行編輯.
  二、源程序清單
  # 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);
  三、結(jié)束語
  該程序在Turbo C 2.0環(huán)境下運行通過,使用效果良好.可以根據(jù)具體需要,對該程序進行擴充,以增加繪圖功能.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 邵武市| 科技| 九龙城区| 双鸭山市| 鸡东县| 明溪县| 淳化县| 泉州市| 合作市| 达州市| 宿州市| 昌乐县| 西和县| 游戏| 青河县| 米易县| 兴义市| 库尔勒市| 福海县| 平度市| 合肥市| 鹰潭市| 大冶市| 高雄县| 都昌县| 汉阴县| 西城区| 封开县| 韶关市| 邯郸县| 玉门市| 沈阳市| 永安市| 建昌县| 莲花县| 越西县| 广宗县| 昭觉县| 三都| 怀远县| 平阳县|