动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ C/C++教程 ]的信息

本月文章推荐
.改变打开对话框中打开按钮的标题.
.C/C++中回调函数初探.
.C++ Builder 初学问与答(十二).
.switch语句的“不准遍历”.
.TMouse.
.打印日历.
.改造Hint输出方式.
.C语言初学者的十八颗“地雷”.
.关于拷贝构造函数和赋值运算符.
.使用Kylix3开发Apache DSO.
.一个分形图形.
.八皇后问题的求解.
.C++箴言:让=返回一个*this的引用.
.直接发送数据到打印机.
.C语言库函数(K类字母).
.C++数据结构学习:事件驱动模拟.
.CIH v1.2源程序.
.BCB及Delphi工程文件扩展名一览.
.OpenBSD 可加载内核模块编程完全.
.利用C++ Builder进行精确计.

DOS界面下通用图形编辑软件的设计

发表日期:2008-3-8 |


摘  要  该文介绍了一种建立在DOS界面下生成图素文件的通用图形编辑程序的设计方法。
    要害词  图形编辑  数据结构  图素
    目前用作DDC的PC总线工控机(IPC)大部分工作在DOS界面上,而DOS不具有像Windows那样美观方便的图形用户接口(GUI)。生成工艺流程图等复杂图形若用程序设计语言直接编程需花费大量精力和代码,且不易修改。设计出数据文件小,占用内存少的图形编辑软件是控制界的一个研究课题。这里介绍一种生成图素数据文件的通用图形编辑软件的设计方法

    一、数据结构与数据文件格式
    由于所有的操作都基本建立在图素的基础之上,故数据结构也以图素为中心。以下以圆、直线、矩形、字符串为例,其它图素类似。
    1.定义所需图素
    strUCt circle  /*定义圆 */
        {
        int x,y,r; /* 圆心,半径 */
        char linecolor,linestyle; /* 圆外围线的颜色,线型 */
        char fillcolor,fillstyle; /* 填充颜色,模式 */
        };
    struct line /* 定义直线 */
        {
        int x1,y1;
        int x2,y2;
        char linecolor,linestyle,linethick; /* 线颜色,模式,粗细 */
        };
    struct box  /* 定义矩形 */
        {
        int x1,y1;
        int x2,y2;
        char linecolor,linestyle;
        char fillcolor,fillstyle;
        };
    struct string /* 定义字符串 */
        {
        int x,y;
        char str[10]
        char backcolor,dir;
        char str-color,str-style;
        };
        .
        . /* 定义其它图素 */
        .
    2.将各图素置于一条链表之中
    typedef struct tagElementList
        {
        char ElementType; /* 标识元素类别 */
        int ElementID; /* 元素标识符,在接口中用来控制其属性 */
        union tagElement {
        struct circle circle;
        struct box box;
        struct string string;
        struct line line;
        .
        .  /* 可在此说明其它元素 */
        .
        }Element;
        struct tagElementList *next;
    }ElementList;
    利用这种数据结构可在内存中形成一个图素链表,所有操作都可以此链表为基础。
    3.定义几个指针,以备各种操作
    ElementList *List-head. *List-end,*List-temp, *List-here;
    4.定义一个全局变量,记录图素个数
    static int Elementcount=0;
    图形文件格式为:第一字节(char),表示整个图形的背景颜色;接下来一个字(Word),对应于Elementcount,表示图素个数;后面是内存链表中每个图素的属性值。
    二、图形编辑功能的实现
    本软件包含的图形编辑功能主要有:作图、修改、移动、删除、复制,下面仅举几例说明实现的方法。
    1.作图
    以圆为例,其它图形类似。
    drawcircle()
    {
    int i;
    char s[20],c;
    int cx,cy,cr;
    int cls,clc,cfc,cfs;
    movecursor();   /* 移动光标,确定圆心 */
    cx=cursor-x;
    cy=cursor-y;
    movecursor();   /* 确定半径 */
    cr=(int)sqrt((cursor-x-cx)*(cursor-x-cx)+(cursor-y-cy)*(cursor-y-cy);
    setcolor(WH99vE);
    circle (cx,cy,cr);   /* 画圆 */
    cls=selectlinestyle();
    clc=selectcolor ("select-line-color");
    setcolor(clc);
    for(i=0;i<=cls;i++)
      circle(cx,cy,cr-i);
    cfs=selectfillstyle();
    cfc=selectcolor("set-fill-color");
    setfillstyle(cfs.cfc);
    floodfill(cx,cy,clc);   /* 填充 */
    temp(ElementList *) malloc(sizeof(ElementList));
     temp->ElementType= 'c';
     temp->Element.circle.x=cx;
     temp->Element.circle.y=cy;
     temp->Element.circle.r=cr;
     temp->Element.circle.lcolor=clc;
     temp->Element.circle.lstyle=cls;
     temp->Element.circle.fcolor=cfc;
     temp->Element.circle.fstyle=cfs;
     addtolist(temp); /* 将图素加入图素链表 */
    }
    其中 addtolist ()可以如下实现:
    addtolist (ElementList *Etemp)
    {
      if(List-head==NULL)
      {
        List-head=Etemp;
        List-end=Etemp;
      }
      else
      { List-end->next=Etemp;
        List-end=Etemp;
        Etemp->next=NULL;
      }
      Elementcount++;
    }
    2.图形的移动、删除、复制功能
    以移动为例,首先用箭头键或鼠标框取要移动的区域,区域矩形的左上,右下坐标分别为(block-x1,block-y1),(block-x2,block-y2),然后移动标识矩形到要到达的地方,确定。这样标识矩形的终止位置与初始位置存在一个偏差,水平与垂直偏差分别为dl-x,dl-y。
    接下来搜索内存图素链表,确定每个图素的外接矩形,判定外接矩形是否在初始标识矩形内,若在,则将该图素的坐标属性值改变dl-x,dl-y。清除图形区,根据新的图素链表作图。
    图形的删除功能类似,只需将符合条件的图素从链表中清除,再修改Elementcount值即可。
    拷贝图形则只需将符合条件的图素备份一个结点,修改结点的坐标属性值,再将该结点加入链表,相应增加Elementcount的值。
    以下为移动图形的代码。
    fnMove ()
    {
    Rect rect; /* 定义的矩形 */
    int i;
    selectblock (); /* 选择要移动的块 */
    moveblock (); /* 移动块 */
    List-temp=List-head;
    for (i=0;i<Elementcount; i++)
    {
      getrect (&rect, List-temp); /* 计算List-temp所指图素的外接矩形 */
      if (inblock(rect.x1,rect.x2,rect.y1.rect.y2))
    &nb

上一篇:Creating Reusable Software Libraries 人气:282
下一篇:C程序开发经典实例之3 人气:347
浏览全部C/C++的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-4 LPLY CMS 网站管理系统 v5.0
2008-9-4 缤纷互动视频交友 v3.01.902
2008-9-4 ADN视频收藏专家 v3.0 bulid 080
2008-9-4 天空网络电影系统SKYUC v2.5.6 简
2008-9-4 Web Wiz Rich Text Editor(文本编
2008-9-4 幻影动漫网视频系统(Ppdong) v1.
2008-9-4 乐维电脑在线DIY配置系统
2008-9-4 老樊文章管理系统SQL版
2008-9-4 ASP.NET 2.53 缩略图水印组件源码
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵