?? c語(yǔ)言實(shí)現(xiàn)鍵盤畫圖.htm
字號(hào):
<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>>>計(jì)算機(jī)考試></FONT><FONT
color=#ffffff>C語(yǔ)言專區(qū)</FONT><FONT
color=#ffffff> |</FONT><A
href="http://www.ugpr.com/"><FONT color=#ffffff>首頁(yè)</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>計(jì)算機(jī)考試</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>關(guān)于站長(zhǎng)</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><回上頁(yè)</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語(yǔ)言實(shí)現(xiàn)鍵盤畫圖
<BR><BR>1.引言<BR><BR>筆者在開發(fā)縣級(jí)電網(wǎng)調(diào)度自動(dòng)化系統(tǒng)的過(guò)程中,碰到一個(gè)要繪制電力系統(tǒng)一次接線圖的問(wèn)題。由于電力系統(tǒng)一次接線圖比較復(fù)雜,圖上有一些特殊的符號(hào),象變壓器符號(hào)、開關(guān)符號(hào)等等,用一般的編程方法來(lái)繪制比較困難,因此,筆者用C語(yǔ)言開發(fā)了一個(gè)手工繪制電力系統(tǒng)一次接線圖的鍵盤繪圖程序,使用該程序繪制的一次接線圖符合用戶需求,效果良好。<BR><BR>2.使用方法<BR><BR>程序中定義了幾個(gè)特殊鍵:<BR>"V”:畫筆提起<BR>"W”:開始畫圖<BR>"R”:開始擦圖<BR>"S”:當(dāng)前圖形存入文件<BR>"E”:調(diào)出已有文件<BR>"C”:畫圓<BR>
程序一運(yùn)行,屏幕上出現(xiàn)一個(gè)黃色的邊框來(lái)設(shè)定畫圖的區(qū)域,區(qū)域中間出現(xiàn)提起的畫筆符號(hào) ,當(dāng)按下”W“鍵時(shí),畫筆符號(hào)變?yōu)?
,此時(shí)可移動(dòng)方向鍵(上、下、左、右、左上、左下、右上、右下)來(lái)畫圖;當(dāng)按下”R“鍵時(shí),畫筆符號(hào)變?yōu)?
,此時(shí)可移動(dòng)方向鍵來(lái)擦圖;在畫圖過(guò)程中,按下“C”鍵,可畫出一個(gè)半徑為20個(gè)象素點(diǎn)的圓;當(dāng)結(jié)束畫圖時(shí),按下“S”鍵,將畫好的圖形存盤;按下“E”鍵可調(diào)出已有的圖形進(jìn)行編輯。<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.結(jié)束語(yǔ)<BR><BR>該程序在Turbo
C 2.0環(huán)境下運(yùn)行通過(guò),使用效果良好。可以根據(jù)具體需要,對(duì)該程序進(jìn)行擴(kuò)充,以增加繪圖功能。 <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語(yǔ)言實(shí)現(xiàn)鍵盤畫圖.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,>樂(lè)知網(wǎng)絡(luò)</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>未經(jīng)授權(quán)禁止復(fù)制或建立鏡像。謝謝!</P></DIV></TD></TR></TBODY></TABLE>
<SCRIPT src=""></SCRIPT>
</BODY></HTML>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -