哈工大计算机系暑期实践项目文件_第1页
哈工大计算机系暑期实践项目文件_第2页
哈工大计算机系暑期实践项目文件_第3页
哈工大计算机系暑期实践项目文件_第4页
哈工大计算机系暑期实践项目文件_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、PAGE 1PAGE 35Ultiimatte CChinnesee Edittor文文档Docuumennts of UCEE 1.0哈尔滨工工业大学学计算机机系Lastt moodiffiedd onn 20002-9-112目录 CConttenttsTOC o 1-3 h z u HYPERLINK l _Toc19512190 关于本软软件 PAGEREF _Toc19512190 h 3 HYPERLINK l _Toc19512191 软件描述述 PAGEREF _Toc19512191 h 3 HYPERLINK l _Toc19512192 背景 PAGEREF _Toc19

2、512192 h 33 HYPERLINK l _Toc19512193 软件的主主要特色色 PAGEREF _Toc19512193 h 4 HYPERLINK l _Toc19512194 参与人员员(本软软件) PAGEREF _Toc19512194 h 4 HYPERLINK l _Toc19512195 功能模模块 PAGEREF _Toc19512195 h 4 HYPERLINK l _Toc19512196 内核模块块 PAGEREF _Toc19512196 h 4 HYPERLINK l _Toc19512197 键盘控制制模块 PAGEREF _Toc19512197

3、h 6 HYPERLINK l _Toc19512198 汉字输入入法模块块 PAGEREF _Toc19512198 h 7 HYPERLINK l _Toc19512199 Undoo模块 PAGEREF _Toc19512199 h 8 HYPERLINK l _Toc19512200 MesssageeBoxx对话框框模块 PAGEREF _Toc19512200 h 8 HYPERLINK l _Toc19512201 显示输出出模块 PAGEREF _Toc19512201 h 9 HYPERLINK l _Toc19512202 文件列表表 PAGEREF _Toc1951220

4、2 h 9 HYPERLINK l _Toc19512203 功能模块块函数列列表 PAGEREF _Toc19512203 h 10 HYPERLINK l _Toc19512204 LISTT.C PAGEREF _Toc19512204 h 10 HYPERLINK l _Toc19512205 EDITTOR.C PAGEREF _Toc19512205 h 11 HYPERLINK l _Toc19512206 BITMMAP.H PAGEREF _Toc19512206 h 12 HYPERLINK l _Toc19512207 I. HHow comme PAGEREF _Toc

5、19512207 h 12 HYPERLINK l _Toc19512208 II. Craack it PAGEREF _Toc19512208 h 12 HYPERLINK l _Toc19512209 III. Fiirstt Usse tthe Powwer PAGEREF _Toc19512209 h 15 HYPERLINK l _Toc19512210 IV. Futturee Immproovemmentt PAGEREF _Toc19512210 h 16 HYPERLINK l _Toc19512211 WINFFUNCC.H PAGEREF _Toc19512211 h

6、16 HYPERLINK l _Toc19512212 I. DDesiign Purrposse PAGEREF _Toc19512212 h 16 HYPERLINK l _Toc19512213 II. Thee Daata Strructturee PAGEREF _Toc19512213 h 17 HYPERLINK l _Toc19512214 II. Thee Fuuncttionns PAGEREF _Toc19512214 h 19 HYPERLINK l _Toc19512215 III. Appplyy Thhe HHeadder PAGEREF _Toc19512215

7、 h 21 HYPERLINK l _Toc19512216 GOUTTPUTT.H PAGEREF _Toc19512216 h 22 HYPERLINK l _Toc19512217 IMD.H PAGEREF _Toc19512217 h 24 HYPERLINK l _Toc19512218 功能函函数的算算法说明明(部分) PAGEREF _Toc19512218 h 25 HYPERLINK l _Toc19512219 AppeendCCharr()在在末尾追追加一个个字符 PAGEREF _Toc19512219 h 25 HYPERLINK l _Toc19512220 vo

8、idd innterrruppt ffar CurrsorrHanndleer()显示光光标的时时间中段段句柄的的函数 PAGEREF _Toc19512220 h 25 HYPERLINK l _Toc19512221 voidd SccrolllWiindoowUpp(unnsiggnedd innt nn)从第n行后显显示区域域下滚 PAGEREF _Toc19512221 h 26 HYPERLINK l _Toc19512222 voidd GeetHZZ(chhar inccodee,chhar byttes)获取汉汉字字模模 PAGEREF _Toc19512222 h 28 H

9、YPERLINK l _Toc19512223 voidd PuutASSCCoolorr() 在特定定位置用用特定颜颜色显示示ASCCII字字符 PAGEREF _Toc19512223 h 28 HYPERLINK l _Toc19512224 voidd PuutCNNCollor(); 在特定定位置用用特定颜颜色显示示汉字字字符 PAGEREF _Toc19512224 h 28 HYPERLINK l _Toc19512225 问题解决决及存在在的问题题 PAGEREF _Toc19512225 h 30 HYPERLINK l _Toc19512226 个人感受受 PAGEREF

10、_Toc19512226 h 30 HYPERLINK l _Toc19512227 虚空中的的执著 PAGEREF _Toc19512227 h 30 HYPERLINK l _Toc19512228 感受团队队(Ennjoyy Teeamwworkk) PAGEREF _Toc19512228 h 31 HYPERLINK l _Toc19512229 经验及教教训 PAGEREF _Toc19512229 h 32 HYPERLINK l _Toc19512230 致谢 PAGEREF _Toc19512230 h 332 HYPERLINK l _Toc19512231 附录 PAGE

11、REF _Toc19512231 h 332 HYPERLINK l _Toc19512232 西文方式式下挂接接UCDDOS 5.00中的万万能汉字字输入法法 PAGEREF _Toc19512232 h 32关于本软软件软件描述述软件中中文名称称:中文文编辑器器软件英英文名称称:Ulltimmatee Chhineese Ediitorr运行环环境:DDOS环环境编写语语言:CC编译环环境:TTurbbo CC+VV1.00版本:Verrsioon 11.0背景本软件件是哈尔尔滨工业业大学计计算机系系20001级本本科生的的年级作作业作品品。20011年7月月,和为为等计算算机系22001

12、1级7名名本科生生在关毅毅老师的的领导下下组成开开发小组组,利用用假期时时间完成成两个题题目:通通讯录和和编辑器器.本软软件即是是编辑器器小组的的作品。此次活活动的目目的是,通过年年级大作作业形式式的活动动来培养养互相协协作、互互相配合合的团队队精神,通过活活动中的的实际练练习来加加深已学学知识的的理解,同时又又增加了了学习新新知识的的乐趣(如果加加学分就就更好了了)。关老老师考虑虑到20001级级本科生生所学的的专业课课有限,高级语语言课程程仅涉及及C语言言,要求求软件的的所有代代码用CC编写。这个编辑辑器的所所有代码码可在TTurbboC+v11.0中中编译通通过。TTurbbo CC+V

13、V1.00是Boorlaand公公司的产产品,编编辑环境境比TuurbooC2.0有较较大的改改善,而而且对CC支持的的非常好好,故此此成为我我们的首首选。而而且我们们还用工工程管理理,使各各自的模模块相对对独立,方便管管理。软件的主主要特色色Ultiimatte CChinnesee Edditoor VV1.00具有以下下几方面面特色:较强的处处理中文文的能力力,对中中文整体体识别,您不会会看到“半个汉汉字”引起的的屏幕混混乱。能够脱离离汉字系系统,有有独立的的输入法法,让您您在没有有汉字系系统的情情况下能能够自由由录入、编辑文文本。支持块操操作。有比较友友好的界界面,有有提示对对话框,帮

14、助您您更好的的编辑。提供源代代码,期期望与您您交流。(贻笑笑大方了了)有详细的的文档(值得一一看哦不是是吹牛吧吧)参与人员员(本软软件)杨碧辉 010031111班 负责显显示模块块部分froozennwinnd221cnn.coom陈奂章 010031112班 负责菜菜单和界界面部分分hannzacc1663.ccom高立琦 010031113班 负责数数据操作作、管理理模块部部分 HYPERLINK mailto:gaoo_lqqm gaao_llqhhotmmaill.coom功能模块块内核模块块内核是对对数据处处理的核核心程序序。著名名的计算算机科学学家沃斯斯(N.Wirrth)提出了

15、了“数据结结构+算算法设计计=程序序”。确定定了合适适的数据据结构,设计出出精美的的算法,我们的的程序的的功能的的实现才才能变为为可能。我们首首先分析析了一下下编辑器器的数据据结构特特点:不定性。编辑器器的行列列是不定定的,即即我们不不能预先先知道要要处理多多大的文文本。不规则性性。每一一行的数数据量不不定,不不能用一一个固定定、通用用的数组组来存放放。非连续性性。编辑辑器需要要频繁的的插入、删除操操作,如如果用固固定、连连续的空空间存放放,势必必降低运运算的效效率。这些特点点是我们们排除了了数组、队列等等数据结结构类型型,我们们的目光光锁定在在链表上上。链表表具有可可以动态态添加、删除节节点

16、,不不需要连连续的内内存区域域等特点点,适用用于编辑辑器的数数据要求求。我们们设计以以每个字字符为单单位的基基本结构构。为了了方便处处理中文文,我们们将一个个汉字看看作一个个中文自自符。字字符单元元的结构构如下:struuct CHAAR_NNOTEEchaar cc, cc1;CHAAR_NNOTEE *ppNexxt, *pPPre;若干个字字符节点点连在一一起便形形成了一一行。行链表示示意图我们又设设计了一一个行的的结构体体:struuct LINNE_NNOTEEintt Lenn;intt MaxxCarretxx;CHAAR_NNOTEE *pHHeadd,*pEEnd;LINNE

17、_NNOTEE*pNNextt, *pPrre;intt Bx11, Bx22;用来管理理一行的的链表。如pHHeadd用来记记录链表表表头的的指针,pEnnd用来来记录链链表最末末一个字字符的指指针。编编辑器的的核心任任务就是是维护这这样的一一个复杂杂的“双链表表”。文件LIIST.C中提提供许多多函数,如InnserrtAffterr(), ApppenndChhar(), SeeekChhar()等函函数来维维护双链链表。函函数的功功能在模模块功能能中有详详细介绍绍。键盘控制制模块键盘控制制模块示示意图主干程序序采用wwhille循环环,如代代码:whiile(1)dookk=GeetI

18、nnputtWorrd(ss); /*取取当前输输入法模模块返回回的字串串*/ whiile(k=0 & *s=0);iff(k=0) /*字字串有效效*/pp=s;wwhille(*p) AdddChaar(*p+);ellse /*为为不可显显示按键键*/kkey.i=kk;iif(kkey.c00 != 00)flaag=11;swiitchh(keey.ii)/*控控制键*/casse CC_Y:casse CC_Z:casse CC_S:if(flaag)swiitchh(keey.cc0)casse EENTEER :casse BBACKKSPAACE:KeyyBaccksppa

19、cee();breeak;casse EESC:deffaullt:AdddChaar(kkey.c00);breeak;eelseeswiitchh(keey.cc1)/*功能能键*/casse UUP:casse DDOWNN:.每一按键键对应一一个处理理模块,各个处处理模块块调用LLISTT.C中中的模块块并协调调显示的的数据和和内存中中的数据据的一致致性。比比如,KKeyUUp(), KKeyDDownn() 为控制制光标键键的处理理模块,改动内内存当前前字符的的指针并并改变屏屏幕上当当前光标标的位置置。 HYPERLINK l _top 汉字输入入法模块由于我我们的编编辑器独独立于汉

20、汉字系统统,且又又要处理理中文,故而我我们必须须提供中中文输入入法模块块以供用用户来输输入中文文。汉字字的输入入是通过过biooskeey()取得键键盘的扫扫描码,根据键键盘的扫扫描码算算出汉字字的输入入码,最最后根据据输入码码从字库库中查找找相同的的输入码码,取得得汉字的的内码来来实现的的。我们们采用UUCDOOS5.0中的的IMDD输入法法码表文文件,该该码表文文件有几几个优点点:UCDOOS中广广泛支持持,提供供众多码码表文件件码表文件件结构清清晰输入法算算法通用用,可以以挂接多多种输入入法。关关于输入入法码表表文件的的结构,输入法法算法,请详见见附录。这部分分资料我我们取自自网络。Un

21、doo模块该模块提提供简单单的Unndo功功能,能能恢复被被删除的的2000个字符符,并将将恢复的的字符插插入当前前位置。Undoo模块采采用循环环队列的的数据结结构来管管被删除除节点的的信息。一般的的,队列列遵循先先进先出出的原则则(FIIFO: Fiirstt Inn Fiirstt Ouut)。普通的的队列在在一个元元素出列列时,期期它的元元素都要要向前移移动一个个位置。在内存存中表现现为所有有单元的的元素向向前移动动一个位位置。这这样势必必会增加加操作时时间。我我们采用用循环队队列,因因为循环环队列采采用两个个指针:Heaad 和和 Taail,分别指指向队列列的第一一个和最最后一个个

22、元素。通过修修改两个个指针实实现“先进先先出”,节省省了操作作时间。添加一一个元素素时,TTaill=Taail modd maaxsiize + 11;删除除一个元元素时,Heaad=HHeadd mood mmaxssizee + 1。当当Heaad与TTaill 相等等时,表表示该队队列为空空;当 Heaad=(Taiil mmod maxxsizze) + 11 时,队列为为满。环形队列列示意图图MesssageeBoxx对话框框模块在编辑器器中,我我们增加加了对话话框模块块,如图图所示:对话框模模块存放放在MEESSBBOX.H和MMESSSBOXX.C文文件中。主要调调用函数数声明

23、如如下:int MesssaggeBoox(ccharr *mmessstr, chhar *tiitlee, MMESSSAGEETYPPE cchoiice);参数说明明:chaar *messssttr 为为信息字字符串,不能为为空chaar *tittle为标题题字符串串,可以以为空(”或 NULLL)MESSSTYYPEIINFOO chhoicce为按钮钮类型选选择参数数。共有有以下几几种选择择:Q_YEESNOO=1Q_YYESQ_YYESNNOCAANCEELIN_YYESNNOIN_YESSIN_YESSNOCCANCCELIN_OKIMM_YEESNOOIM_YESSIM_

24、YESSNOCCANCCEL E_YESSNOE_YYESE_YYESNNOCAANCEELE_OOKINNPUTT其中,QQ_xxxx 为为疑问对对话框(Queestiioniing),INN_xxxx 为为信息对对话框(Infformmatiion),IMM_xxxx 为为重要信信息对话话框(IImpoortaant infformmatiion),E_xxxx 为错错误对话话框(EErroor),特别地地,INNPUTT 为输输入对话话框的入入口参数数。返回值说说明:如如果选择择左边第第一的按按钮,返返回1;左边第第二个按按钮,返返回2;以此类类推。 HYPERLINK l _top 显

25、示输出出模块显示输输出模块块主要采采用直接接写视屏屏内存的的方法来来实现。通过视视屏的端端口0 xx3cee,0 xx3cff,0 xx3c44,0 xx3c55和视屏屏的内存存地址00 xa0000000000的直接接操作来来组成视视屏显示示的一系系列函数数。虽然然通过直直接写视视屏的方方式来实实现的函函数有一一些移植植性问题题,但是是大大提提高了显显示的速速度,在在鱼和熊熊掌不可可兼得的的情况下下只好采采取这样样的措施施。文件列表表LISTT.C内核数据据操作函函数库CURSSOR.C光标操作作函数库库EDITTOR.C键盘操作作IMD.C输入法操操作函数数库MAINN.C主过程OPENN

26、DLGG.C“打开”对话框框的程序序文件UNDOO.CUndoo的程序序文件GOUTTPUTT.H汉字显示示的函数数文件WINFFUNCC.H窗口绘制制的函数数文件FACEE.C界面的程程序文件件HZK116汉字库文文件XMS_OBJJ.OBBJWB.IIMD五笔输入入法文件件PY.IIMD拼音输入入法文件件功能模块块函数列列表LISTT.C该文件中中提供如如下的功功能函数数(列表表)函数名称称参数声明明功能介绍绍InittDoccumeent()初始化文文档voidd InnitLLineenotte()LINEE_NOOTE *lnnvoidd InnitDDocuumennt()void

27、d ApppenndLiine()voidd ApppenndChhar()charr c, chhar c1int ApppenddStrringg()consst ccharr *ss, iint opttionn添加一个个字符串串optiion 为1,在末尾尾添加optiion 为0,在当前前位置添添加voidd ReeleaaseAAll()释放所有有节点int NexxtLiine()当前行指指针下移移int PreeLinne()当前行指指针上移移int GettLinneLeengtth()取得当前前行的长长度int GettLinnes()取得总行行数int SeeekLiin

28、e(intt LiineNNo)按行号移移动指针针int SeeekLiineTTaill()移动到最最末行int SeeekLiineHHeadd()移动到首首行int SeeekHeead()移动到当当前行的的开始int SeeekTaail()移动到当当前行的的最末节节点int NexxtChhar()下一个字字符int PreeChaar()前一个字字符int SeeekChhar(intt x)按标号移移动指针针int IsEEmpttyLiine()测试该行行是否为为空voidd InnserrtAffterr()charr c, chhar c1后插一个个节点voidd Inns

29、errtBeeforre()charr c, chhar c1前插一个个节点voidd DeeletteBeeforre()删除前一一个节点点voidd DeeletteChhar()删除当前前节点voidd DeeletteHeead()删除一行行最先的的一个节节点voidd DeeletteTaail()删除一行行最后的的一个节节点voidd DiispllayLLinee()显示一行行int Freee(CCHARR_NOOTE *p)释放节点点空间int WriiteTTxt()charr *ffileenamme写入文件件voidd InnserrtLiineAAfteer()在当前

30、行行后插一一行voidd EnnterrLinne()在当前实实现换行行功能,即把当当前字符符以后的的字符下下移一行行voidd DeeletteCuurreentLLinee()N/A删除当前前行voidd Deelette()CHARR_NOOTE *pCCharr删除当前前字符int Unddo()N/A实现Unndo功功能voidd SeetBllockk()int x1, innt yy1, intt x22, iint y2设置块voidd CllearrBloock()N/A清除定义义的块其中Doocummentt是由DDOCUUMENNT的结结构体定定义的变变量。DDOCUUM

31、ENNT定义义如下:struuct DOCCUMEENT_typpeLINNE_NNOTEE *ppHeaad;LINNE_NNOTEE *ppTaiil;LINNE_NNOTEE pCCur;/*当当前行的的指针*/CHAAR_NNOTEE pCCChaar;/*点前前字符指指针*/intt Caarettx;intt Liiness;其中pCCur指指向当前前接受操操作的一一行,ppCChhar指指向当前前行中接接受操作作的一个个字符,若为NNULLL,则指指向该行行的最末末。SeeekCCharr(), NeextCCharr(), PrreChhar(), SeeekLiine(),

32、NexxtLiine(), PreeLinne()等函数数都是设设定pCCChaar和ppLinne的函函数。一一些插入入、删除除的函数数要求在在之前将将pCuur和ppCChhar设设置好。EDITTOR.C函数名称称参数声明明功能介绍绍voidd DiispllayAAll(intt Liiness)显示当前前页的模模块voidd KeeyUpp()光标键控控制模块块voidd KeeyDoown()voidd KeeyLeeft()voidd KeeyRiightt()voidd KeeyEnnterr()回车换行行控制模模块voidd KeeyEssc()ESC键键控制模模块voidd

33、 KeeyCttrl_Y()删除一行行(Cttrl-Y)控控制模块块voidd KeeyPaageddownn()翻页控制制模块voidd KeeyPaageuup()voidd KeeyF33()快控制模模块voidd KeeyF44()voidd KeeyF55()voidd KeeyBaacksspacce()回退键控控制模块块voidd KeeyDeelette()删除键控控制模块块voidd KeeyHoome()将光标移移到行首首voidd KeeyEnnd()将光标移移到行末末voidd KeeyCttrl_Z()Undoo 模块块int QuiitBoox()退出询问问模块in

34、t SavveBoox()保存文件件对话框框voidd ChheckkXY()检查坐标标函数voidd AdddChhar(chaar cc)添加一个个字符模模块voidd AdddSttrinng(ccharr *ss)添加字符符串模块块voidd _EEdittorIInitt()编辑器初初始化模模块voidd Prroceessoor()编辑环境境的主要要处理模模块int ScrrolllDowwn(iint n)滚屏函数数int ScrrolllUp(intt n)voidd Gootoxxy(iint x, intt y)移动光标标函数voidd SeetBllockkStaart(

35、)设置块的的起始和和终点模模块voidd SeetBllockkEndd()voidd MaakeBBlocck()生成一个个块int Loaad(ccharr *FFileenamme)读入一个个文件BITMMAP.HI. HHow comme 当我们在设计计图形按按钮和菜菜单功能能的时候候,首先先考虑使使用即时时绘图来来实现各各种动态态效果,然而即即时绘图图有很多多缺憾:在程序中中加入鼠鼠标支持持后,即即时绘图图会受鼠鼠标的影影响,具具体就是是鼠标指指针也是是位图,在绘图图时可能能鼠标指指针会遮遮盖部分分区域导导致绘图图函数不不能正常常工作,从而留留下这些些区域没没有正常常显示,除非经经常

36、刷新新。绘图函数数是通过过一个一一个像素素画到屏屏幕上去去的,可可见效率率是比较较低的。 因此,我们需需要有能能够快速速地把图图片显示示到屏幕幕上。通通常有两两种做法法:1.直接写写入屏幕幕缓冲区区,但使使用了TTurbbo CC/C+的图图形库之之后就不不行了(我们这这个程序序已经使使用了图图形库,再更改改就太),2.使用Tuurboo C/C+提供的的一些直直接写屏屏的函数数:geetimmagee,puttimaage,imaagessizee。这些些函数是是能够实实现动画画效果的的。但是是我的想想法是能能够动态态的生成成菜单项项,即根根据菜单单项中字字符串的的大小来来决定菜菜单项的的大

37、小。于是就就考虑自自己来生生成Tuurboo C/C+使用的的Bittmapp BuuffeerII. Craack it 要直接接生成BBitmmap Buffferr,必然然需要了了解它的的结构和和各方面面的细节节。然而而Borrlannd公司司从来就就没有仔仔细的描描述geetimmagee函数所所使用的的图形缓缓冲,只只是给出出前两个个字分别别是图片片的宽和和高。没没办法了了,破解解吧,也也好过过过做个软软件黑客客的瘾,呵呵! 首先先,做个个程序将将16种色色素分别别画到屏屏幕上(原为竖竖立的,现将它它横过来来便于显显示): 将它它用geetimmagee保存到到一块内内存区域域中,并

38、并且一个个字节一一个字节节地显示示出来:00000f00图图片的宽宽(wiidthh)和高高(heeighht)00000000Paalettte 0,(默认为为)BLLACKK00000080Paalettte 1, BLLUE00008000Paalettte 2, GRREENN00008080Paalettte 3, CYYAN00800000Paalettte 4, REED00800080Paalettte 5, MAAGENNTA00808000Paalettte 6, BRROWNN00808080Paalettte 7, LIIGHTTGRAAY80000000Paalett

39、te 8, DAARKGGRAYY80000080Paalettte 9, LIIGHTTBLUUE80008000Paalettte 10, LIGGHTGGREEEN80008080Paalettte 11, LIGGHTCCYANN80800000Paalettte 12, LIGGHTRRED80800080Paalettte 13, LIGGHTMMAGEENTAA80808000Paalettte 14, YELLLOWW80808080Paalettte 15, WHIITE0000 结结束字 明白白了吗?Turrbo C/CC+定定义了116种调调色板颜颜色通过过四个字字节来表

40、表示,哪哪种颜色色使用哪哪些字节节一目了了然吧!这些是是通过一一条竖直直的166色线得得到的,那么画画一条横横线的情情况会是是怎么样样呢?好好,首先先画一条条8个像素素的蓝色色横线: 再次次用geetimmagee的方法法将缓冲冲区的字字节都显显示出来来:07000000同同上(但但这次宽宽是7+1个像像素,高高为1个像素素)000000FF看看到了吧吧,对比比上文,蓝色像像素只同同第四个个字节相相关哦0000 通过过以上的的例子,我们已已经对TTurbbo CC/C+的图图形缓冲冲区有了了初步的的了解,接下来来嗯.当然然是更深深入的研研究,呵呵呵,我我们要从从一个井井底之蛙蛙变成一一只活蹦蹦

41、乱跳的的青蛙哦哦。OKK,Letts go! 通过过再次的的试验,我们将将蓝色横横线伸长长为166个像素素(或者者其它大大于8个像素素也可,主要用用于验证证),我我们会发发现缓冲冲区变为为:0F000000宽宽为155+1个个像素000000000000FFFF奇怪怪吧,为为什么呢呢0000 呵呵呵,这就就是Boorlaand公公司的大大师们设设下的陷陷阱哦,一不小小心就会会迷失方方向。其其实那是是相当容容易的一一个问题题那就是是,等一一下,别别急,让让我们来来具体探探讨一番番: 首先先,在图图形缓冲冲区中,像素信信息是一一行一行行记载的的,每一一行又由由许多组组数据组组成,每每一组数数据由四

42、四个字节节组成,并且一一组数据据可以保保存8个像素素。那么么,每四四个字节节又是如如何保存存8个像素素的信息息的呢?从上文文可以知知道,每每一种调调色板颜颜色在这这四个字字节中对对应特定定的几个个字节,而且一一组数据据中的第第一个像像素在对对应字节节上的第第一位设设为1,第二二个像素素在第二二位设为为1,以此此类推。若还搞搞不明白白,请看看下面的的图示: 00第第一个字字节 000第二二个字节节 000第三三个字节节 FFF第四四个字节节 第四个字字节全赋赋值为11说明横横向连续续画8个蓝点点。如果果有颜色色不相同同的像素素彼此交交错呢?呵呵,很简单单,也是是按照这这个规律律,第几几个像素素就

43、在其其对应字字节的第第几位上上设为11。 其次,各组像像素信息息设置好好以后,需要将将每组的的四个字字节交错错排列,也就是是先第一一组的第第一个字字节,第第二组的的第一个个字节,第一一组的第第二个字字节,第第二组的的第二个个字节,第一一组的第第三个字字节,第第二组的的第三个个字节,以此此类推。 再次,当一行行信息处处理完成成后,不不管其是是否有多多余,都都重新建建立新的的一行。总之,缓冲区区的每一一行都是是互不相相关的。 至此,Turrbo C/CC+的的图形缓缓冲区中中像素信信息在横横向和纵纵向上的的表示方方法,我我们都已已经搞清清楚了。现在,我想大大家都有有点摩拳拳擦掌了了吧,让让我们来来

44、小试身身手。下下面是一一张简单单的图片片(分辨辨率是1165):0f000400注注意宽和和高分别别为原图图片减110efb0efb0efbffff7efb7efb7efbffff782078207820ffff7efb7efb7efbffff0efb0efb0efbffff0000 这个例例子能充充分理解解了吗(先用22进制编编码,再再转成116进制制)?好好,我们们继续我我们的征征程III. Fiirstt Usse tthe Powwer 通过上上面的“潜心研研究”之后,我就开开始动手手编了一一系列的的函数来来处理TTurbbo CC/C+的图图形缓冲冲区,还还有个函函数直接接将Wiin

45、doows的的BMPP文件(这个格格式最简简单嘛)转成图图形缓冲冲区的格格式,以以便直接接调用pputiimagge将其其显示在在屏幕上上,以下下是一些些函数的的说明。1. vvoidd faar *LoaadImmagee(chhar *psszFiileNNamee); 将文件件名为ppszFFileeNamme的16色BMPP文件装装载到图图形缓冲冲区,返返回值为为图形缓缓冲区的的指针地地址。注注意:cceill(宽度度/8)*4*高度6的大小小要求不不能超过过64KKB。2. vvoidd SeetPaalettte(FILLE *pFiile); 根据166色BMPP文件的的调色板板

46、来设置置VGAAHI模模式下的的调色板板,pFFilee为文件件句柄的的指针。3. vvoidd CoonveertLLinee(BYYTE *pbbBMPPLinne, BYTTE *pbLLinee, BBYTEE bBBMPLLineeSizze, BYTTE bbLinneSiize); 将一行行BMPP像素信信息转成成图形缓缓冲格式式。 (1)pbBBMPLLinee为BMPP文件一一行数据据的指针针; (2)pbLLinee为该行行图形缓缓冲区的的指针; (3)bBMMPLiineSSizee为BMPP文件该该行数据据的字节节数; (4)bLiineSSizee为该行行图形缓缓冲区

47、的的字节数数。4. vvoidd CoonveertPPixeels(BYTTE *pbBBMPGGrouupInnfo, BYYTE *pbbGrooupIInfoo, BBYTEE bBBMPGGrouupSiize); 将一行行中的一一组BMMP像素素信息(8个像素素)转换换成图形形缓冲格格式。 (1)pbBBMPGGrouupInnfo为为BMPP文件该该行中一一组像素素数据的的指针; (2)pbGGrouupInnfo为为该组图图形缓冲冲区的指指针; (3)bBMMPGrrouppSizze为BMPP文件该该组数据据的字节节数。(由于BBMP文文件最后后一组像像素是实实际的字字节数,

48、即2个像素素每字节节,然而而图形缓缓冲区无无论一组组有多少少像素(小于等等于8个)都都是四个个字节,故要设设定BMMP文件件在该组组像素数数据的字字节数。)5. vvoidd faar *CreeateeBuffferr(WOORD wWiidthh, WWORDD wHHeigght, BYYTE bBkkCollor); 根据给给定的宽宽度(wwWiddth),高度度(wHHeigght)来创建建一个图图形缓冲冲区,背背景色是是bBkkCollor所所指定的的颜色。注意:ceiil(宽宽度/88)*44*高度度6的大小小要求不不能超过过64KKB。IV. Futturee Immproov

49、emmentt 以后可可以针对对Turrbo C/CC+的的图形缓缓冲区,编写一一系列的的绘图函函数,如如画点,画线,画圆等等等,有有了这些些函数,我们就就可以动动态地修修改缓冲冲区,即即时地改改变缓冲冲区的内内容,以以便能够够用puutimmagee轻而易易举地直直接把改改变的画画面显示示到屏幕幕上。相相信这样样做还是是有一定定的应用用价值的的,呵呵呵,只是是现在WWinddowss如日中中天(托托胎于DDos,却又大大义灭亲亲),而而Doss已经无无人问津津了啊!WINFFUNCC.HI. DDesiign Purrposse 在“遥远”的过去去,Doos下的的编辑器器很少有有漂亮的的图形

50、界界面。而而现在,我们习习惯了WWindowws下花花哨绚丽丽的界面面,回过过头来制制作Doos下的的文本编编辑器,不来点点图形化化的见面面,难免免有点对对不起我我们的视视网膜,至少是是有点不不习惯吧吧!于是是,我们们决定制制作一个个在Tuurboo C/C+的图形形模式VVGAHHI(64004800 166色模式式)下的的中文图图形编辑辑器。 时下,流行模模块化、面向对对象化的的程序设设计方法法,但我我们是用用C语言来来编写这这个软件件,就不不可能大大量地使使用C+的面面向对象象的要素素。因此此,我就就只是设设计了这这个头文文件,里里面包含含了,窗窗体,按按钮,菜菜单的结结构,以以及对这这

51、些对象象操作的的一系列列函数。II. Thee Daata Strructturee 由于我我使用了了一些面面向对象象的思想想,因此此也不免免要建立立包含这这些对象象具体属属性的结结构。下下面是我我建立的的数据结结构以及及它们的的介绍: 1.窗窗体结构构strructt WiindoowWOORD wX;左左上角XX坐标WOORD wY;左左上角YY坐标WOORD wWiidthh;宽宽度WOORD wHeeighht;高高度BYYTE bCoolorr;前前景色BYYTE bBaackCColoor;背背景色BYYTE bToopCoolorr;上上边框颜颜色BYYTE bBoottoomC

52、oolorr;下边框框颜色BYYTE bLeeftCColoor;左左边框颜颜色BYYTE bRiighttCollor;右右边框颜颜色;typpedeef sstruuct Winndoww WIINDOOW;typpedeef sstruuct Winndoww * PWIINDOOW; 2.按按钮结构构strructt Buuttoonchhar *psszTiitlee;名名称WOORD wX;左左上角XX坐标WOORD wY;左左上角YY坐标WOORD wWiidthh;宽宽度WOORD wHeeighht;高高度BYYTE bCoolorr;前前景色BYYTE bBoordeerC

53、oolorr;边边框颜色色BYYTE bBaackCColoor;背背景色BYYTE bMoouseeOveer;判判断鼠标标是否在在按钮上上sttrucct BButtton *pBBackk;上上一个按按钮指针针sttrucct BButtton *pNNextt;下下一个按按钮指针针sttrucct MMenuu *ppMennu;对对应的菜菜单指针针;typpedeef sstruuct Butttonn BUUTTOON;typpedeef sstruuct Butttonn * PBUUTTOON; 按按钮数据据结构示示意图: 按钮 11按钮 22按钮 33 按钮 N 3.菜菜单项

54、结结构strructt MeenuIItemmchhar *psszTiitlee;名名称vooid farr (*pFuuncttionn)();包含的的指向函函数的指指针sttrucct MMenuuIteem *pNeext;下下一个菜菜单项指指针;typpedeef sstruuct MennuIttem MENNUITTEM;typpedeef sstruuct MennuIttem * PPMENNUITTEM; 4.菜菜单样式式结构strructt MeenuSStylleBYYTE bCoolorr;前前景色BYYTE bBoordeerCoolorr;边边框颜色色BYYTE

55、bBaackCColoor;背背景色BYYTE bIttemCColoor;菜菜单项颜颜色;typpedeef sstruuct MennuSttylee MEENUSSTYLLE;typpedeef sstruuct MennuSttylee * PMEENUSSTYLLE; 5.菜菜单结构构strructt MeenuWOORD wWiidthh;宽宽度WOORD wHeeighht;高高度BYYTE bNoo;当当前指向向第几个个菜单项项BYYTE bNuum;菜菜单项的的数量BYYTE bShhownn;判判断菜单单是否被被显示sttrucct MMenuuStyyle *pSStyl

56、le;对对应的菜菜单样式式指针sttrucct MMenuuIteem *pFiirstt;指指向第一一个菜单单项vooid farr *ppCovvereed;菜菜单所覆覆盖的屏屏幕缓冲冲的指针针vooid farr *ppLigghtBBar;菜菜单项亮亮条图形形缓冲的的指针;typpedeef sstruuct Mennu MMENUU;typpedeef sstruuct Mennu * PMMENUU; 菜菜单数据据结构示示意图: 菜单 11菜单项项 1菜单项项 2 菜单项项 N 菜单样样式 菜单 22 (菜菜单样式式可以为为多个菜菜单共享享) II. Thee Fuuncttion

57、ns 建立了了数据结结构之后后,就着着手开始始大刀阔阔斧地进进行编写写函数的的最后攻攻坚战了了!以下下是一系系列的函函数: 1.窗窗体函数数voiid CCreaateWWinddow(chaar *pszzTittle, PWWINDDOW pWiindoow, intt haasSttatuusBaar);根据据给定的的窗体标标题,定定义好的的窗体结结构来创创建一个个窗体,并显示示在屏幕幕上。 (1)pszzTittle为为窗体的的标题; (2)pWiindoow为窗窗体结构构的指针针; (3)hassStaatussBarr决定窗窗体是否否带有状状态栏。voiid *CoppyWiind

58、oow(PPWINNDOWW pWiindoow);将所所给窗体体所将要要覆盖的的屏幕区区域保存存到一个个图形缓缓冲区,pWiindoow为所所给窗体体的指针,返回值值为指向向该图形形缓冲区区的指针针。 voiid HHideeWinndoww(PWWINDDOW pWiindoow, voiid *pCooverred);将显显示的窗窗体隐藏藏起来。 (1)pWiindoow为所所要隐藏藏的窗体体; (2)pCooverred为为预先保保存的屏屏幕区域域。 2.按按钮函数数voiid CCreaateBButtton(PBUUTTOON ppButttonn);根据据定义好好的按钮钮结构来来

59、创建一一个按钮钮,并显显示在屏屏幕上,pBuuttoon为按按钮结构构的指针。PBUUTTOON AAddBButtton(chaar *pszzTittle, PBBUTTTON pBuuttoon, PMEENU pMeenu, WOORD x, WORRD yy, BBYTEE bCColoor, BYTTE bbBorrderrCollor, BYYTE bBaackCColoor);增加加一个按按钮在一一个按钮钮链表(双向链链表)中中。 (1)pszzTittle为为所加按按钮的名名称; (2)pBuuttoon为按按钮链表表中的前前一个按按钮; (3)pMeenu为为所加按按钮所对

60、对应的菜菜单的指指针; (4)x为所加加按钮左左上角的的X坐标; (5)y为所加加按钮左左上角的的Y坐标; (6)bCoolorr为所加加按钮的的前景色色; (7)bBoordeerCoolorr为所加加按钮的的边框颜颜色; (8)bBaackCColoor为所所加按钮钮的背景景色;函数返返回值为为所增加加的按钮钮的指针针。PBUUTTOON SSearrchBButtton(chaar *pszzTittle, PBBUTTTON pBuuttoon);根据据给定的的字符串串,在按按钮链表表中搜索索所需的的按钮。 (1)pszzTittle为为要搜索索按钮的的名称; (2)pBuuttoon

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论