c语言窗口画图,C语言实现画图程序
授权:共享软件 大小:153KB 语言: 简体中文
笔者在开发县级电网调度自动化系统的过程中,碰到一个要绘制电力系统一次接线图的问题。由于电力系统一次接线图比较复杂,图上有一些特殊的符号,象变压器符号、开关符号等等,用一般的编程方法来绘制比较困难,因此,笔者用C语言开发了一个手工绘制电力系统一次接线图的键盘绘图程序,使用该程序绘制的一次接线图符合用户需求,效果良好。
2.使用方法
程序中定义了几个特殊键:
"V”:画笔提起
"W”:开始画图
"R”:开始擦图
"S”:当前图形存入文件
"E”:调出已有文件
"C”:画圆
程序一运行,屏幕上出现一个黄色的边框来设定画图的区域,区域中间出现提起的画笔符号 ,当按下”W“键时,画笔符号变为 ,此时可移动方向键(上、下、左、右、左上、左下、右上、右下)来画图;当按下”R“键时,画笔符号变为 ,此时可移动方向键来擦图;在画图过程中,按下“C”键,可画出一个半径为20个象素点的圆;当结束画图时,按下“S”键,将画好的图形存盘;按下“E”键可调出已有的图形进行编辑。
3.源程序清单
# 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 */
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);
4.总结
该程序在Turbo C 2.0环境下运行通过,使用效果良好。可以根据具体需要,对该程序进行扩充,以增加绘图功能。
c语言窗口画图,C语言实现画图程序相关推荐
- c语言窗口插件,C语言使用ActiveX控件
ActiveX使用的头文件,是只有C++才能用的,C语言要使用ActiveX控件,也是件很容易的事. 微软标准的ActiveX控件,根本上它还是一个窗口(Window),通俗地说就是关联了一个或多个C ...
- c语言窗口插件,C语言插件开发形式
C语言插件开发模式 以前总是不明白为什么不同的模块是相互独立的编译,相互之间不存在的调用关系, 怎么做到在使用的时候加载不使用的时候卸载掉? 现在总算是明白了.其实就是将一个功能做成一个动态库,在wi ...
- c语言窗口程序暂停,C语言中的时间和程序暂停
C/C++中的计时函数是clock(),而与其相关的数据类型是clock_t.在MSDN中,查得对clock函数定义如下: clock_t clock( void ); 这个函数返回从"开启 ...
- r语言 断轴 画图_R语言基础画图/绘图/作图
R语言基础画图 R语言免费且开源,其强大和自由的画图功能,深受广大学生和可视化工作人员喜爱,这篇文章对如何使用R语言作基本的图形,如直方图,点图,饼状图以及箱线图进行简单介绍. 0 结构 每种图形构成 ...
- linux r语言画图,R语言︱画图
笔者寄语:不论画啥,你先plot准没错. plot 二维坐标绘图 dotchart 点图 barplot 条形图 hist 直方图 pie 饼图 points 添加点 lines 添加线 text 添 ...
- R语言——在linux环境下如何画图或保存图片
通常在win环境下,我们利用RStudio画图非常方便,直接plot就可以展现出图片,但是在linux环境下,我们通过shell则无法画图. 问题 例如我们在linux下的R中输入如下命令: png( ...
- linux 易语言窗口程序_易语言开发Linux程序
令人兴奋的是易语言可以开发Linux程序,易语言是一个跨平台的开发工具,支持Windows及Linux.使用易语言开发Linux程序,您可以在Windows环境下编写基本于Windows的程序,及编写 ...
- 易语言html截图,易语言窗口截图源码
易语言窗口截图源码系统结构:子程序1,PaintRect,SetTimer,GetCursorPos,WindowFromPoint,KillTimer,GetWindowRect,CreateDC, ...
- C语言怎么改变窗口颜色,C语言运行窗口颜色.doc
C语言运行窗口颜色 C语言运行窗口颜色 #include #include int main(void) { int i,j; printf("背景颜色:0:黑.1:蓝.2:绿.3:湖蓝色. ...
- c语言窗口如何加背景图片,MFC积累---关于设置背景图片、背景颜色插入背景音乐...
第二种方法是把声音文件加入到资源中,然后从资源中播放声音.Visual C++支持WAVE型资源,用户在资源视图中单击鼠标右键并选择Import命令,然后在文件选择对话框中选择The Microsof ...
最新文章
- 返回浏览器或div 顶部
- html 乱码_html小坑:网页变成乱码
- 如何将Unix时间戳转换为DateTime,反之亦然?
- 注册表修改之USB口启用
- python杂记-读取png图像文件头数据
- 将html代码确析成json数据格式,JSON字符串解析成JSON数据格式
- vba 修改下拉列表_Excel隐藏的超实用技能,涉及VBA技巧,建议【收藏】
- 海上瓶子下有东西吗_《海上钢琴师》:宁愿一生孤独,不愿随波逐流。
- supsplk 服务器被植入木马 挖矿 cpu使用 700%
- 电脑主板跳线_电脑主板跳线连接图
- 反向代理实现同域名下PHP和Java共存
- Hadoop权威指南环境搭建+实例运行
- 计算机连接游戏手柄,无线游戏手柄怎么连接电脑 无线游戏手柄链接电脑方法...
- 片袖原型制图_袖原型一片袖打版干货
- ubuntu安装matlab2016b
- CI24R1低成本国产2.4G无线收发器芯片替代XN297精简版SI24R1
- 引介|主流密钥管理项目深度对比
- AWS的下一站:3.8万亿美元的企业IT市场
- php 上传绕过,文件上传验证绕过技术总结
- symmetric tree java_Symmetric Tree对称树
热门文章
- Excise_day05_Array
- Android 启动过程介绍
- 怎么给pdf文件插入页码,有什么简单的方法?
- Codeforces 106C Buns 【0-1背包】
- 大学生慕课网站计算机操作系统,中国大学mooc电脑版
- 魔兽对战平台服务器更新维护什么,魔兽官方对战平台更新:公会系统正式上线!...
- Android图片压缩——Luban鲁班压缩
- 【侯捷】C++面向对象程序设计
- java开发设置用户头像_如何修改 WordPress 的用户默认头像?
- linux+新浪行情接口,新浪天气API接口