📄 c语言实现键盘画图.htm
字号:
<TABLE height=50 cellSpacing=0 width=770 bgColor=#efefef border=0>
<TBODY>
<TR>
<FORM name=form action=Search.asp method=post>
<TD width=768 bgColor=#cc6600><FONT
color=#ffffff>>>计算机考试></FONT><FONT
color=#ffffff>C语言专区</FONT><FONT
color=#ffffff> |</FONT><A
href="http://www.ugpr.com/"><FONT color=#ffffff>首页</FONT></A><FONT
color=#ffffff> </FONT><FONT color=#ffffff>|<A
href="http://www.ugpr.com/jsjks/c/shili/jsjks.htm"> </A></FONT><A
href="http://www.ugpr.com/jsjks/c/shili/jsjks.htm"><FONT
color=#ffffff>计算机考试</FONT></A><FONT color=#ffffff> |<A
href="http://www.ugpr.com/jsjks/c/proe/proe.htm"> </A></FONT><A
href="http://www.ugpr.com/jsjks/c/proe/proe.htm"><FONT
color=#ffffff>Pro/ENGINEER</FONT><FONT color=#ffffff> </FONT></A><FONT
color=#ffffff>| <A
href="http://www.ugpr.com/jsjks/c/ug/ug.htm"></A></FONT><A
href="http://www.ugpr.com/jsjks/c/ug/ug.htm"><FONT
color=#ffffff>Unigraphics</FONT></A><FONT color=#ffffff> | <A
href="http://www.ugpr.com/ansys/ansys.htm"><FONT
color=#ffffff>ANSYS</FONT></A> | </FONT><A
href="http://www.ugpr.com/jsjks/c/shoucang/shoucang.htm"><FONT
color=#ffffff>本站收藏</FONT></A><FONT color=#ffffff> | </FONT><A
href="http://www.ugpr.com/jsjks/c/aboutme/aboutme.htm"><FONT
color=#ffffff>关于站长</FONT></A><FONT color=#ffffff>|</FONT></TD></FORM></TR>
<TR>
<TD width=768 bgColor=#efefef>
<TABLE id=table1 cellSpacing=0 cellPadding=0 width=767 align=center
border=0>
<TBODY>
<TR style="FONT-SIZE: 12px">
<TD style="FONT-SIZE: 12px" vAlign=bottom width=107
bgColor=#008000>
<P> </P>
<P> </P>
<P> </P>
<P> </P>
<P>
<P><B><A href="http://www.ugpr.com/jsjks/c/shili/c.htm"><FONT
color=#ffffff><回上页</FONT></A></B></P></TD>
<TD style="FONT-SIZE: 12px" vAlign=top width=42>
<P> </P>
<P> </P>
<P> </P></TD>
<TD style="FONT-SIZE: 12px" vAlign=top
width=515> <BR> <BR><BR><BR><BR>C语言实现键盘画图
<BR><BR>1.引言<BR><BR>笔者在开发县级电网调度自动化系统的过程中,碰到一个要绘制电力系统一次接线图的问题。由于电力系统一次接线图比较复杂,图上有一些特殊的符号,象变压器符号、开关符号等等,用一般的编程方法来绘制比较困难,因此,笔者用C语言开发了一个手工绘制电力系统一次接线图的键盘绘图程序,使用该程序绘制的一次接线图符合用户需求,效果良好。<BR><BR>2.使用方法<BR><BR>程序中定义了几个特殊键:<BR>"V”:画笔提起<BR>"W”:开始画图<BR>"R”:开始擦图<BR>"S”:当前图形存入文件<BR>"E”:调出已有文件<BR>"C”:画圆<BR>
程序一运行,屏幕上出现一个黄色的边框来设定画图的区域,区域中间出现提起的画笔符号 ,当按下”W“键时,画笔符号变为
,此时可移动方向键(上、下、左、右、左上、左下、右上、右下)来画图;当按下”R“键时,画笔符号变为
,此时可移动方向键来擦图;在画图过程中,按下“C”键,可画出一个半径为20个象素点的圆;当结束画图时,按下“S”键,将画好的图形存盘;按下“E”键可调出已有的图形进行编辑。<BR><BR>3.源程序清单<BR><BR>#
include "graphics.h"<BR># include "stdio.h"<BR># include
"fcntl.h"<BR># include "stdlib.h"<BR>main()<BR><BR>void
save(),load();<BR>void *wg,*rg,*vg,*fy;<BR>int driver,mode;<BR>int
c=RED;<BR>int x=320,y=225;<BR>int x1,y1,x2,y2;<BR>int k,k1,k2;<BR>/*
initialize grapher
*/<BR>detectgraph(&driver,&mode);<BR>initgraph(&driver,&mode,"c:\tc");<BR><BR>/*
write the pen
*/<BR>bar(200,10,206,16);<BR>line(203,7,200,10);<BR>line(203,7,206,10);<BR>line(243,7,240,16);<BR>line(243,7,246,16);<BR>line(283,7,280,10);<BR>line(283,7,286,10);<BR>line(283,7,283,16);<BR><BR>/*
save the pen
*/<BR>wg=malloc(imagesize(200,7,206,16));<BR>rg=malloc(imagesize(240,7,246,16));<BR>vg=malloc(imagesize(280,7,286,16));<BR>fy=malloc(imagesize(200,7,206,16));<BR><BR>getimage(200,7,206,16,wg);<BR>getimage(240,7,246,16,rg);<BR>getimage(280,7,286,16,vg);<BR>cleardevice();<BR><BR>/*
write the box
*/<BR>setcolor(YELLOW);<BR>rectangle(4,19,637,447);<BR><BR>x1=x-3;<BR>y1=y+1;<BR>x2=x+3;<BR>y2=y+10;<BR>getimage(x1,y1,x2,y2,fy);<BR>putimage(x1,y1,vg,XOR_PUT);<BR><BR>/*
receive the command */<BR>for (;;) <BR>while
(bioskey(1)==0);<BR>k=bioskey(0);<BR>putimage(x1,y1,fy,AND_PUT);<BR>if
(((k&0x00ff)|0x00)==0) <BR>k1=k&0xff?0:k>>8; /* k1 is
the specialkey value */<BR>else <BR>k2=k&0x00ff; /* k2 is the
non-specialkey value */<BR>if (((k&0x00ff)|0x00)==0) /* Special
key */<BR>switch(k1) <BR>case
45:<BR>restorecrtmode();<BR>exit(0);<BR>case 72:<BR>if (y>20)
<BR>y=y-1;<BR>break;<BR>case 75:<BR>if (x>5)
<BR>x=x-1;<BR>break;<BR>case 77:<BR>if (x<636)
<BR>x=x+1;<BR>break;<BR>case 80:<BR>if (y<446)
<BR>y=y+1;<BR>break;<BR>case 71:<BR>if ((x>5)&&(y>20))
<BR>x=x-1;<BR>y=y-1;<BR>break;<BR>case 79:<BR>if
((x>5)&&(y<446))
<BR>x=x-1;<BR>y=y+1;<BR>break;<BR>case 73:<BR>if
((x<636)&&(y>20))
<BR>x=x+1;<BR>y=y-1;<BR>break;<BR>case 81:<BR>if
((x<636)&&(y<446))
<BR>x=x+1;<BR>y=y+1;<BR>break;<BR><BR><BR>x1=x-3;<BR>y1=y+1;<BR>x2=x+3;<BR>y2=y+10;<BR>getimage(x1,y1,x2,y2,fy);<BR>/*
non-special key */<BR>switch(k2) <BR>case 118: /* 'v' */<BR>case 86:
/* 'V' */<BR>putimage(x1,y1,vg,OR_PUT);<BR>break;<BR>case 119: /*
'w' */<BR>case 87: /* 'W'
*/<BR>putimage(x1,y1,wg,OR_PUT);<BR>putpixel(x,y,c);<BR>break;<BR>case
114: /* 'r' */<BR>case 82: /* 'R'
*/<BR>putimage(x1,y1,rg,OR_PUT);<BR>putpixel(x,y,BLACK);<BR>break;<BR>case
115: /* 's' */<BR>case 83: /* 'S'
*/<BR>save("pic.dat");<BR>break;<BR>case 101: /* 'e' */<BR>case 69:
/* 'E' */<BR>load("pic.dat");<BR>break;<BR>case 99: /*'c'*/<BR>case
67:
/*'C'*/<BR>setcolor(RED);<BR>circle(x,y,20);<BR>break;<BR>default:continue;<BR><BR><BR>/*
function for screen picture save<BR>*/<BR>void save(char
*fname)<BR><BR>FILE *fp;<BR>int i;<BR>register long j;<BR>char far
*ptr;<BR><BR>fp=fopen(fname,"wb");<BR>for(i=0;i<4;i++)<BR><BR>outportb(0x3CE,4);<BR>outportb(0x3CF,i);<BR>ptr=(char
far *) 0xA0000000L;<BR>for
(j=0;j<38400L;j++)<BR>putc(*ptr,fp);<BR>ptr++;<BR><BR><BR>fclose(fp);<BR>outportb(0x3CF,0);<BR><BR><BR>/*
function for screen picture display<BR>*/<BR>void load(char
*fname)<BR><BR>FILE *fp;<BR>register int i;<BR>int k4=1;<BR>register
long j;<BR>char far *ptr;<BR><BR>fp=fopen(fname,"rb");<BR>for
(i=0;i<4;i++)<BR><BR>outportb(0x3C4,2);<BR>outportb(0x3C5,k4);<BR>ptr=(char
far *)0xA0000000L;<BR>for
(j=0;j<38400L;j++)<BR><BR>*ptr=getc(fp);<BR>ptr++;<BR><BR>k4*=2;<BR><BR>fclose(fp);<BR>outportb(0x3C5,0xF);<BR><BR><BR>4.结束语<BR><BR>该程序在Turbo
C 2.0环境下运行通过,使用效果良好。可以根据具体需要,对该程序进行扩充,以增加绘图功能。 <BR><BR><BR><BR> </TD>
<TD style="FONT-SIZE: 12px" vAlign=top width=102
bgColor=#008000> </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV>
<TABLE height=65 cellSpacing=0 cellPadding=0 width=770 align=center
background=C语言实现键盘画图.files/bottom_line.gif border=0>
<TBODY>
<TR>
<TD height=5> </TD></TR>
<TR>
<TD align=middle>
<SCRIPT src=""></SCRIPT>
<SCRIPT>var tc_user="adu520";var tc_class="2";</SCRIPT>
<SCRIPT src=""></SCRIPT>
<SCRIPT src=""></SCRIPT>
</TD></TR>
<TR>
<TD align=middle>
<DIV align=center><FONT face=Verdana, size=2 sans-serif Helvetica,
Arial,>CopyRight© </FONT><FONT size=2 sans-serif helvetica, arial,>2003
</FONT><A href="http://adu520.yeah.net/"><STRONG><FONT color=#000000
size=2 sans-serif helvetica, arial,>乐知网络</FONT></STRONG></A><FONT
face=Verdana, size=2 sans-serif Helvetica, Arial,>All Rights
Reserved</FONT></DIV></TD></TR>
<TR>
<TD align=middle>
<DIV align=center>
<P align=center>未经授权禁止复制或建立镜像。谢谢!</P></DIV></TD></TR></TBODY></TABLE>
<SCRIPT src=""></SCRIPT>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -