首页 > 范文大全 > 正文

浅谈窗口菜单在文本和图形两种模式下的设计与制作

开篇:润墨网以专业的文秘视角,为您筛选了一篇浅谈窗口菜单在文本和图形两种模式下的设计与制作范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

自参加工作以来,一直在从事C语言的教学工作,在教学过程中不断探索和积累关于C语言的教学方法和实践经验。C语言以其语言简洁,使用灵活、方便,具有结构化控制语句:while语句、do-while语句、for语句、if-else语句、switch语句,等特点成为计算机相关专业的入门语言,深受广大师生的喜爱,同时,也是非计算机专业学生获得计算机资格的考试内容之一。

C语言课程是计算机学科的一门基础主干课,也是其他相关专业的必修课,是一门实践性很强的课程。C语言的学习对于程序开发入门人员的程序设计逻辑思维能力的培养和训练有着深远的意义和影响,但是,C语言的学习也会成为部分程序开发人员最初的障碍,为了帮助广大C语言爱好者进行实践能力的提高,接下来将使用实例―窗口菜单制作,结合C语言结构化、模块化程序设计的方法和实践教学案例,进一步阐述程序设计逻辑思维的训练方法与解决实际问题的技巧。

采用C语言实现窗口菜单制作,将需要解决以下四方面的问题:

一是窗口菜单具有的功能:窗口菜单的功能取决于应用程序本身的功能。

二是窗口菜单是在那种模式下使用:窗口菜单在何种模式下使用将以应用程序运行的环境为依据,即文本模式和图形模式的选择。

三是用户采用那种输入设备:计算机硬件组成中的常用输入设备有键盘和鼠标,这也是程序开发人员在程序开发过程中结合应用程序本向的功能和用户的需求要着重考虑和具体实现的用户接口。友好的用户界面可以为用户带来较大的方便,同时,也是用户评价应用程序性能的标准之一。

四是窗口菜单的组成:一个应用程序总是以一个窗口的形式出现。在窗口中有标题栏、菜单栏、工具栏、窗口显示区、状态栏等,但是在本案例中仅涉及菜单栏的设计与实现。

针对以上窗口菜单制作的问题将给出以下解决方案:应用程序是用户界面基于文本模式和图形模式的窗口与菜单技术:文本模式下键盘操作的窗口菜单和图形模式下使用鼠标操作的窗口菜单,以下案例的开发工具是Win-TC。

一、文本模式下键盘操作的窗口菜单

首先,绘制用户界面的窗体和下拉菜单的边框。使用gotoxy(x,y)将光标定位至指定位置,通过左上角、水平直线、右上角、垂直线、左下角、右下角对应的ASCII值218、196、179、192、217,结合格式输出printf(“%c”,ASCII)画出窗体和下拉菜单的边框,注意水平线和垂直线还要与循环一起配合使用。

其次,使用结构体建立主菜单和各个下拉菜单的菜单项。例如设计的主菜单有文件、编辑、帮助三个主菜单,文件主菜单的下拉菜单项为新建、打开、保存、另存为、退出,编辑主菜单的下拉菜单项为复制、剪切、粘贴、删除,帮助主菜单的下拉菜单项为帮助主题、关于。根据以上窗口菜单项,则将会设计出以下的结构体:

struct Menu{

char mainMenuName[10];//主菜单的字名

char childMenuName[1-][10];//下拉菜单项名字

}menu[3];

再次,设置各个菜单项的文本和背景颜色。使用textcolor(bcolor)来设计菜单项的文本颜色,使用textbackground(bcolor)函数设置菜单项的背景颜色,其中之一bcolor的取值为[0,15]之间的整数。

最后,接收用户的按键并响应。对用户选择的菜单项进行高亮显示,在选中某菜单项后,再按回车键就可以执行相应的菜单命令。

1.接收用户的按键:定义按键变量int key,通过bioskey(0)的值进行判断是否有按键按下,若有键被按下bioskey(1)的值为非0的,使用key=bioskey(0)进行接收。对常用的文本模式下窗口菜单按键进行宏定义,如上键、下键、左键、右键、回车键,具体定义如下:

#define UP 0x4800

#define DOWN 0x5000

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define ENTER 0x1c0d

2.响应用户的按键:将key作为响应用户选择的入口,与预定义的LEFT、DOWN、RIGHT、LEFT、ENTER进行比较,确定用户的选择,从而执行不同的操作。具体实现如下:

key=bioskey(0);

switch(key)

{

case LEFT: //主菜单项的水平切换 即移到左边选项

break;

case RIGHT: //主菜单项的水平切换 即移到右选项

break;

case UP: //下拉菜单项的上下移动 即向上移动

break;

case DOWN: //下拉菜单项的上下移动 即向下移动

break;

case ENTER:

break;

}

二、图形模式下使用鼠标操作的窗口菜单

与文本模式下的窗口菜单相比,图形模式下的窗口菜单具有更为美观,且可以使用鼠标进行方便操作的优点,但此处需要使用图形模式下的字模进行汉字的绘制显示。

首先,图形模式初始化。以下代码将图形系统初始化为VGA 640X480 16色工作方式:

detectgraph(&gdriver, &gmode); //自动测试硬件

initgraph(&gdriver, &gmode, "c:\\tc"); // 根据测试结果初始化图形

其次,图形模式下的汉字计算。在Win-TC编辑环境中的“超级工具集”下的“点阵字模工具”可以帮助我们完成点阵字模的计算。在此,可以输入要提取的字模,选择字体,设置字体大小等等。

再次,绘制窗口界面、主菜单、下拉菜单项。

1、绘制窗口界面:使用textbackground(bcolor)设定背景颜色,使用textcolor(bcolor)设定文本颜色,使line(x1, y1, x2, y2)画线,画线前可以使用setcolor(bcolor)设定画线颜色,如果需要,也可以画矩形,并填充矩形内部区域,具有该功能的函数是bar(int left, int top, int right, int bottom),其中left,top 屏幕左上角坐标,right,bottom:屏幕右下角坐标。

2、主菜单与下拉菜单项的绘制:前面已经计算出汉字的点阵字模,此处,需要通过void drawmat(char *mat,int matsize,int x,int y,int color)函数调用刚刚计算好的点阵字模mat,设置好字体颜色color后输出到指定的(x,y)处。

最后,获得鼠标坐标并响应。

对鼠标信息进行宏定义:

#define WAITING 0xff00

#define LEFTPRESS 0xff01

#define LEFTCLICK 0xff10

#define LEFTDRAG 0xff19

#define RIGHTPRESS 0xff02

#define RIGHTCLICK 0xff20

#define RIGHTDRAG 0xff2a

#define MIDDLEPRESS 0xff04

#define MIDDLECLICK 0xff40

定义画鼠标指针的矩阵:可以使用专业工具设计鼠标图形,并将由此生成的鼠标图形对应矩阵保存,并在此处使用即可。

3.鼠标驱动程序及其控制函数:鼠标驱动程序的步骤是:设定鼠标上下边界setMouseY()和左右边界setMouseX(),确定初始鼠标的位置setMouseXY(),获得鼠标当前位置getMouseXY(),第一次显示鼠标的位置MouseOn(MouseX,MouseY)。鼠标控制函数:就是鼠标状态的处理,我们将会根据当前鼠标所在位置与绘制菜单的位置进行范围比较,从而确定菜单项的响应。

在现实的程序设计中,我们可以把这两种窗口菜单技术结合起来,即制作在图形模式下的即可以使用鼠标又可以使用键盘的窗口菜单。