第13章图形和用户界面技术

上传人:资****亨 文档编号:133877099 上传时间:2020-05-31 格式:PPT 页数:49 大小:174.50KB
返回 下载 相关 举报
第13章图形和用户界面技术_第1页
第1页 / 共49页
第13章图形和用户界面技术_第2页
第2页 / 共49页
第13章图形和用户界面技术_第3页
第3页 / 共49页
第13章图形和用户界面技术_第4页
第4页 / 共49页
第13章图形和用户界面技术_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《第13章图形和用户界面技术》由会员分享,可在线阅读,更多相关《第13章图形和用户界面技术(49页珍藏版)》请在金锄头文库上搜索。

1、 第13章图形和用户界面技术 本章导读界面是程序的一个窗口 是用户与程序之间的桥梁 友善的用户界面 不仅可以使用户感觉赏心悦目 使用方便 自然有趣 更能提高程序的使用效率 因此 用户界面是应用程序不可缺少的组成部分 而用户界面分为文本形和图两种 本章将学习图形显示技术和菜单设计 并为编辑器添加菜单 完善用户界面 本章的教学目标 掌握图形显示技术 了解汉字显示方法 掌握文本方式和方式下的菜单设计 为编辑器添加菜单 完善用户界面 完成编辑器的最终设计目标 第13章图形和用户界面技术 13 1文本窗口的程序设计13 2文本下拉式菜单设计13 3图形显示技术13 4汉字显示技术13 5图形方式下的菜单

2、设计13 6菜单的综合应用 13 1文本窗口的程序设计 13 1 1窗口定义TurboC使用函数window 定义屏幕窗口 函数原型为 voidwindow intx1 inty1 intx2 inty2 参数x1 y1是窗口左上角的坐标 x2 y2是右下角的坐标 并规定整个屏幕左上角的坐标为 1 1 右下角的坐标为 80 25 例如 定义一个窗口 它的左上角在屏幕的第5列第10行处 宽为30列 高15行 可调用函数 window 5 10 35 25 13 1 2窗口操作函数 窗口设计举例 例13 1 创建一个宽64列 高17行的窗口 窗口左上角坐标是 7 7 背景颜色为白色 字符为蓝色 然

3、后在窗口正中间显示若干字符 如图13 1所示 图13 1创建窗口 include conio h main charname 80 textbackground WHITE 设置白色背景颜色 clrscr 清屏 使设置的背景颜色生效 window 7 7 71 24 textbackground 5 设置5号背景颜色 textcolor BLUE 设置蓝色文本颜色 clrscr 清屏 使设置的颜色生效 gotoxy 16 8 cprintf Onewindowiscreated getch window 1 1 80 25 恢复全屏幕窗口 textbackground BLACK 恢复0号背景

4、颜色 textcolor 7 恢复7号前景颜色 clrscr 清屏 使设置的颜色生效 13 2文本下拉式菜单设计 13 2 1设计目标主菜单分为 File Edit Search和Option四项 其中 File项包含5个子菜单 New Open Save SaveAs Exit Edit项包含6个子菜单 Cut Copy Paste Del SelectedAll Edit Search项包含2个子菜单 Find Replace Option项包含4个子菜单 Undo Redo Config Help 1 启动menu 进入程序主菜单 利用左 右 键 可操作主菜单间左右移动 2 利用上 下

5、键 可控制子菜单间上下移动 3 回车确认光带所选菜单项 4 选择菜单File Exit 退出系统 13 2 2菜单设计方法 编写下拉式菜单的一般步骤 保存屏幕弹出前的矩形区域 显示菜单正文 产生光条 读取按键信息 根据菜单项的选择 处理相应的事务 恢复屏幕弹出前的原始状态 连编成一个完整的程序 1 保存和恢复屏幕区域 保存屏幕可用gettext 函数 其函数原型为 intgettext intx1 inty1 intx2 inty2 void buffer 将屏幕上以 x1 y1 为左上角 x2 y2 右下角的矩形区域的文本内容存入buffer指针指向的内存空间 内存所用字节数为 y2 y1

6、1 X x2 x1 1 恢复保存的屏幕内容可调用函数puttext 完成 其函数原型为 intputtext intx1 inty1 intx2 inty2 void buffer 将gettext 函数存入内存buffer中的文字内容拷贝到屏幕指定位置 2 显示菜单正文 利用光标定位函数gotoxy 和字符串显示函数cputs 就可完成 voiddisp menu item intx inty intfcolor intbcolorchar string textbackground bcolor textcolor fcolor gotoxy x y cputs string 函数的功能是

7、在屏幕 x y 点 用背景颜色bcolor 字符颜色fcolor显示字符串指针string所指向的字符串 3 产生光条最简单的方法是用不同的背景颜色和字符颜色重写光条的菜单项 调用函数disp menu item 完成 4 读取按键信息 菜单设计中最关键的一点是功能键的读取 而键盘上有两种键 ASCII码键和特殊功能键 为通用起见 我们编写了如下GetKey 函数 用来返回键值 当读取的键是普遍键时 返回其ASCII码值 如是特殊功能键时 返回大于256的整数 intGetKey void union unsignedintx unsignedchary 2 key1 while bioske

8、y 1 0 key1 x bioskey 0 return key1 y 0 0 key1 y 1 256 key1 y 0 13 2 3程序框架及功能函数 1 主程序框架voidmain void InitScreen 初始化屏幕 WMainMenu 显示主菜单 WSubMenu 显示子菜单 SelectMenu 根据用户按键 处理相事务 Quit 恢复屏幕 2 菜单的框架函数 SelectMenu 约定 左 右移动键是主菜单间左右移动选择 由SlectMainMenu 函数实现 而上 下键是子菜单间上下移动选择 由SlectSubMenu 函数实现 回车键进入事务处理子函数SubFunGo

9、 由菜单项File exit退出 其中 Mm是主菜单项变量 Smm Mm 是对应第Mm项菜单的子菜单项变量 LEFT RIGHT UPPER DOWN是对应于左右 上下移动键的符号常量 注意与GetKey 函数返回值一致 voidSelectMenu void while 1 Key GetKey 循环接受键盘输入 if Key LEFT Key RIGHT SlectMainMenu 主菜单左右选择 if Key UPPER Key DOWN SlectSubMenu 子菜单上下选择 if Key ENTER 回车确认选项 if SubFunGo break 执行编辑命令操作 3 主菜单选择

10、函数 voidSlectMainMenu void window 1 1 80 25 恢复主菜单光条 disp menu item SbX Mm 1 14 3 Main Mm 恢复屏幕 puttext SbX Mm 2 2 SbX Mm SbWid Mm 1 SbNum Mm 4 buf if Key LEFT Mm Mm 0 3 Mm 1 实现主菜单的循环 if Key RIGHT Mm Mm 3 0 Mm 1 disp menu item SbX Mm 1 14 4 Main Mm 设置光条 WSubMenu 显示下拉式菜单 4 子菜单选择函数 voidSlectSubMenu void

11、子菜单项的选择 光条恢复 disp menu item 2 1 Smm Mm 15 3 Sub Mm Smm Mm if Key UPPER 实现子菜单项的循环 Smm Mm Smm Mm 0 SbNum Mm 1 Smm Mm 1 if Key DOWN Smm Mm Smm Mm SbNum Mm 1 0 Smm Mm 1 设置光条 disp menu item 2 1 Smm Mm 14 1 Sub Mm Smm Mm 13 3图形显示技术 13 3 1图形系统控制1 图形系统的初始化用函数initgraph完成图形系统的初始化 函数原形为 voidfarinitgraph intfar

12、 gdriver intfar gmode charfar path 其中 gdriver为图形驱动程序 参见表13 2 在graphics h中有相应的枚举常量 常用的有DETECT 自动检测 EGA VGA gmode为图形适配器的工作模式 graphics h中常用的枚举常量有EGAHI VGAHI path为查找图形驱动程序所用的路径名 2 图形系统的关闭图形系统处理完毕后 需调用closegraph函数关闭图形系统 退出图形状态 函数原形为 voidfarclosegraph void 13 3 2基本图形函数 TurboC提供了丰富的图形函数 一些基本的图形可经过直接调用图形函数而

13、得到 对于一般的图形都可以由它们组合而成 基本的图形函数均包含在头文件graphics h中 如下表13 3所示 表13 3基本图形函数 13 3 3时钟程序 包含文件 time tltime 类型time t即long structtm pt pt为指向时间结构tm的指针 voidshowTime void 以图形方式显示运转的时钟 intRs 100 秒针长度 intRc 130 时钟外圆圈半径 doublealpha 2 PI 60 0 秒针1秒钟和分针1分钟所旋转的弧度数 intx y 时钟圆心坐标 intxSecond ySecond 秒针针尖位置坐标 intdriver DETEC

14、T mode initgraph 画时钟外圆圆圈 while kbhit 按下任一键则退出循环 time 调用图形方式显示函数 13 4汉字显示技术 13 4 116点阵字模字库中的汉字按16 16点阵模式存储 每个汉字由16 16 256个点组成 占用16 2 32个字节单元 字节的每一位 bit 表示一个点的属性 1 有亮点 0 无亮点 连续的两个字节表示该汉字字模的一行 32个字节的排列序如图13 5所示 13 4 2汉字的内码 在计算机内英文字符是用一个字节的ASCII代码表示 一般用七位表示128个字符 而最高位作为奇偶校验 或不用 我国国标规定汉字用内码表示 内码为两个字节 为了与

15、西文兼容 汉字系统的内码必须同时允许ASCII码和汉字内码的使用 两者之间不应冲突 所以规定每个字节只用7位 bit 若两个字节的最高位均为1 则该字符为汉字 13 4 3字模的显示 汉字库分成若干区 每个区有94个汉字 每个汉字均有一个确定的区码和位码 知道了区位码也就相当于知道了汉字在字库中的位置 由于汉字的内码与区位码有一定的关系 所以只要通过汉字的内码就可以得到汉字的区位码 从而可以获得该汉字的字模 然后在图形方式下 读取字模的每一个字节的每一位即可按画点的方式在屏幕上显示出汉字 由于在中文DOS下 输入汉字时 其相应的内码已在程序中存在 即内码已在汉字的位置 如同在西文DOS下 输入

16、英文字符时 其对应的ASCII码也在程序中存在一样 设某个汉字内码为十六进制数aaff 则区号qh和位号wh分别为 qh aa 0 xa0 wh ff 0 xa0 则该汉字在汉字库中的起始位置为 以字节为单位 offset 94 qh 1 wh 1 32L 连续读取32个字节就是该汉字的字模 对每个字节的每一位进行判断 如果是1就画点 否则就不画 这样就可以显示汉字来 因此 由汉字内码 从汉字库中读取字模的可用下函数实现 voidget hzm charincode charbytes unsignedcharqh wh unsignedlongoffset qh incode 0 0 xa0 得到区号 wh incode 1 0 xa0 得到位号 offset 94 qh 1 wh 1 32L 得到偏移位置 fseek fp offset SEEK SET 定位字模首字节 fread bytes 1 32 fp voiddisp hzm intx inty intcolor charbuf 显示字模的函数 inti j k for i 0 i 7 k 例13 4 在例13 3的三维直

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号