




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PPSM嵌入式RTOS中的窗口系统开发摘要是为68系列提供的实时嵌入式操作系统。本文介绍在嵌入式上开发窗口及控件系统的体系和方法。关键词32832868实时嵌入式操作系统窗口系统控件在目前的中低档中,很多厂商都采用68系列芯片。为其68提供了一套免费的实时操作系统。但该系统中没有提供窗口系统。我们在实践中开发了一套窗口系统,如图1和图2所示。该系统为事件驱动方式,并有一系列控件支持。软件开发人员采用添加控件的方式构建所需的窗口,编写对控件和窗口事件的响应方式。下面介绍这套窗口系统的设计方案。1系统简介1虚拟多任务方式系统中可以创建多个主任务,但只有一个主任务处于活动状态。每个主任务可以创建多个子任务。主任务和子任务均有唯一的。任务之间可以发送消息。接收消息的任务及其主任务可以取得的控制权。2触摸屏输入系统采用了活动区的概念。活动区是用户设定的屏幕上的一个矩形区域,只有笔在这样的区域中的动作才能引起向活动任务发送消息。每个活动区均属于其创建的任务。换一种方式表达为每个任务保存和管理一系列活动区,活动主任务的所有子任务的活动区均处于活动状态,后创建的活动区覆盖之前创建的活动区。3图形界面支持系统以一部分系统内存作为屏幕缓存。每个任务可以拥有自己独立的屏幕缓存,也可以共享一个屏幕缓存。屏幕缓存的尺寸可以与实际的屏幕大小不同。系统显示活动任务的屏幕缓存中的图像。每个主任务拥有自己独立的屏幕缓存,可以使主任务切换时迅速切换屏幕;而各主任务共享一个屏幕缓存可以节约内存空间,同时,应用程序还可以创建独立于任务的屏幕缓存。它具有与屏幕缓存同样的结构,但不能直接输出到屏幕上。用户可设置当前的屏幕缓存。提供了一组函数,用于在当前的屏幕缓存中作图。4事件驱动采用中断方式处理各类事件,如时钟、输入输出、笔输入等。各种事件均向活动任务发送消息。各任务主任务或子任务均有各自的消息队列。各任务从其消息队列中取得并处理消息。2窗口的基本任务及界面系统的总体考虑由于提供了灵活的屏幕缓存操作方式,范文先生网收集整理开发的系统可能会因各应用程序采用了不同的屏幕缓存方式而冲突,并且难以协调。我们开发系统上的窗口系统,就是为了使其应用程序界面开发变得容易而快速,使编程人员的精力集中在应用程序本身的功能上,提高开发的效率和可靠性。1关于界面绘制、切换、恢复的考虑由于本窗口系统的目标是基于328的便携设备,其特点是内存较小、屏幕较小、速度和屏幕刷新速度均较慢;而窗口系统则要求刷新速度快,占有内存小。通过分析系统特点,较小的屏幕上,一般很少要求子窗口之间的切换,因而本窗口系统中,子窗口不能切换。换言之,子窗口均为有模式的,只有关闭上层子窗口,才能显示下一层的窗口。下一层的窗口被上层子窗口覆盖的部分可以由上层子窗口保存并恢复,或由下一层的窗口自己重画。前一种恢复方式虽然节约内存,但速度较慢,而且如果被最顶层窗口覆盖的窗口只有一个,则每个窗口均需按顺序重画。这在速度较慢的上是不能容忍的,因而我们采用了后一种保存并恢复窗口覆盖区域的方式。一个应用程序主任务拥有一个主窗口。主窗口之间的切换等同于应用程序的切换。如果以重画的方式恢复一个主窗口,意味着该主窗口连同其所有子窗口必须依次重画,这样的刷新速度是不能满足要求的。提供了这样一种能力如果主任务具有自己的屏幕缓存,在任务切换时,屏幕自动切换。因而我们采用这种方式。应用程序具有自己的屏幕缓存,而各窗口均在该缓存上绘出。每个应用程序均保存了一屏自己的窗口图形,当切换时,自动恢复。由于消息只由最顶层窗口处理,见3消息的处理部分,因而,在我们的窗口系统中不存在下层窗口界面绘制问题;同时,在小的屏幕上,实现窗口的移动和缩放并无太大的实用性,因而我们也不实现窗口的这些功能。另外有一类比较特殊的窗口,即属性的窗口。这类窗口主要应用于菜单和提示窗口,特点是单击窗口之外的区域将自动关闭该窗口。我们的处理方法是在这类窗口显示时,设定一个全屏的活动区,以取得窗口外区域的笔输入;再设定一个窗口区域的活动区覆盖在全屏的活动区之上,以将窗口区域排除在点击自动关闭的区域之外。2关于界面输入的考虑由于采用活动区的输入方式,每个任务管理自己的活动区,任务激活时,其活动区处于有效状态。因而应用程序切换时,其活动区自动切换;但一个应用程序中,各窗口的活动区可能互相干扰。应用程序中,每个窗口均有各种的输入区域,而各窗口的活动区域可能相互覆盖,显示上层窗口时必须使下次窗口的所有活动区无效。有两种方式可实现这样的要求。第一种方式是,采用中子任务的方式各子任务管理自己的活动区,当该子任务挂起或激活时,其活动区随之挂起或激活。这要求一个窗口必须对应有一个子任务。由于每个新的子任务需要较大的系统内存空间,而我们并不需要应用程序内各窗口之间的切换,因而我们不采用这种方式。第二种方式是,采用中挂起活动区和恢复活动区的方法。支持对每个任务多次挂起活动区和恢复活动区,因而我们可以在显示新的窗口时,先挂起原有的活动区;窗口关闭时,恢复原有的活动区。3消息的处理中定义了一系统硬件中断产生的消息,如_、_、—等等;同时,提供和函数允许发送用户自定义消息。用户自定义消息从—开始。一个程序可以发送到另一个应用程序或自己。这些消息和所有系统消息均由应用程序的顶层窗口处理。应用程序从其消息队列中取得消息后,首先,由预定义的应用程序消息处理函数处理公共的消息。然后,由为顶层窗口定义的消息处理函数处理。顶层窗口不处理的消息由预定义的窗口消息处理函数处理。消息发送采用两种方式。第一种是,该函数将消息放在应用程序的消息队列中并立即返回;第二种是直接调用应用程序顶层窗口的消息处理函数,这样函数便在消息处理之后返回。4控件体系窗口只是提供了界面设计操作的基础。窗口中需要一系列按功能和操作方式分类的可视的界面元素,以便编程人员能够方便地设计窗口的界面,实现窗口的特定功能。这样的界面元素叫控件。由于嵌入式设备内存有限的原因,控件并不采用子窗口的方式。根据设计控件的目的,各类控件具有较为确定的外观和规定的动作,并在特定的条件下,向其父窗口发出预定义的消息以供其处理。控件属于父窗口。在父窗口显示时自动显示,在父窗口关闭时自动释放其占用的内存空间;父窗口接收的消息首先在各控件中分发处理。按照这一要求,窗口必须保存、维护其控件的一个列表。列表中控件的指针按控件创建的顺序存放。控件按创建的顺序显示,而消息在控件中按反序传递,以保证后创建的控件在可以覆盖之前创建的控件的图形和操作。为了提高控件开发效率,我们需要各控件可以作为一种新定义控件的子控件。这样新定义的控件可以利用已有的控件功能。如文本框控件中可以包含水平和垂直滚动条子控件。控件可分为有焦点和无焦点的。有焦点的控件可以处理输入法发出的字符消息。3窗口体系的实现31窗口的运行结构根据以上对窗口体系的总体考虑,确定窗口的运行结构需要以下内容窗口的位置、大小和标题。窗口的风格_用程序主窗口。关闭主窗口将自动关闭应用程序。_单出式窗口。单击非窗口区域将自动关闭该窗口。该属性不能和—同时出现。_边框窗口。_——状态条控件的窗口。一般窗口均有一个在窗口底部的状态条,提供弹出该窗口的命令菜单、显示窗口标题、关闭窗口、打开选择输入法、显示系统日期和时间等功能。—类窗口的屏幕活动区和窗口活动区的。窗口当前的光标位置。窗口中控件的列表。窗口保存其覆盖区域的内存指针。前一个窗口的指针。用以在关闭窗口时重设应用程序的顶层窗口。窗口的缺省输入法类型和打开的输入法控件的句柄。窗口的焦点控件的句柄。焦点控件将最先处理字符输入的消息。窗口的消息处理函数指针。32窗口的创建和操作函数介绍&;结构定义窗口的基本属性,如位置、大小、标题、风格等,见上面所述。该函数为窗口运行时的结构分配内存,初始化属性,并返回窗口结构的指针。;显示一个窗口。其工作包括挂起以前的活动区;保存窗口的覆盖区域的图形;如果是有—属性的窗口,须设定屏幕和窗口的活动区;向该窗口的消息处理函数传递—消息事实上是直接调用该函数,以提供编程人员在窗口上绘制控件以外的图形的机会;如果是没有_的窗口,添加控件;依次调用窗口中各控件的绘制函数以显示控件;设第一个有焦点控件为窗口当前的焦点控件。;关闭一个窗口。其工作包括向该窗口的事件处理函数发送—消息,如果返回则退出本函数,如果返回则继续以下工作一一恢复窗口覆盖区图形;释放类窗口的屏幕活动区和窗口活动区;依次释放该窗口包含的控件;隐藏光标;释放该窗口结构占用的内存;向上层窗口发送—的消息,该消息用于下层窗口更新需要自动变化的界面,如股票实时大盘数据表;设置该窗口的前一层窗口为应用程序的顶层窗口。函数指针类型。*,16,32,_32,32;,16,32,_32,32;处理如窗口区外的点击自动关闭窗口之类的消息和行为。32,_8,16,_8;向有状态条控件的窗口增加应用程序定义的命令。命令出现在状态条的弹出菜单中。该函数返回一个唯一的命令,用于窗口处理—消息时区分命令。,;删除一条命令。32,32,_8;修改一条命令。其它函数。因篇幅原因,不能完全列出和解释所有的窗口操作函数。33控件的实现1控件的基本结构我们使用控件的基本结构定义各类控件的公共属性。具体的控件结构在此基础上扩展,以包含其它属性。以下论述控件的基本属性。首先,在窗口的显示过程中,各控件的外观由自己绘制,因而各种控件需要一个绘制函数。该函数在定义具体控件时定义,在控件结构中保留该类函数的指针。其次,各种控件需要各自的消息处理函数,该函数的指针也保存在结构中。最后,一些控件可能会动态分配内存空间以保存自身的数据。控件需要在被释放时释放这样的内存,因而控件结构中也保存控件释放函数的指针。控件是窗口上的一个可操作区域,主要由笔输入来操作,因而控件需要响应笔操作的活动区。各种控件的活动区数量不同,因而在控件结构中需要保存一个可增长的活动区列表;但控件的屏幕区域可能覆盖部分窗口中的其它活动区如其它控件,从而造成控件操作的混乱,因此需要一个控件占用区域的活动区,以屏蔽其它可能造成干扰的活动区。由于我们需要各种控件能在定义新控件时使用,即作为新控件的子控件,在控件的结构中,须保存子控件列表。各类控件的绘图、消息处理和释放函数,必须为控件系统定义的相应的缺省处理函数。这些缺省处理函数根据控件的子控件列表,首先调用子控件的相应函数。2具体控件定义的方法一个具体的控件对应一个特定的结构。该结构首先包含控件的基本结构,其次定义该控件所需要的其它属性。如按键控件,需要有按键的类型、显示的文本或图形、笔操作所需的活动区和按下状态等属性。定义控件的绘制、消息处理和释放函数。定义该控件的创建函数,如。在该函数的参数中包含该控件所需的初始属性、参数中标准的部分是控件的位置和大小。该函数初始化该控件结构的属性,包括初始化在基本控件结构中的控件绘制、消息处理和释放函数指针,使之指向相应的函数。定义操作控件、存取控件中数据所需的其它函数。3系统预定义的控件在系统中,已经使用这种定义方式定义了一些常用的控件。它们有按键。文本或图形按键,方式按键。标签。复选框。单选框。组合框。滚动条。水平或垂直,简单类型滚动条可作为使用。编辑框。单行或多行,可编辑或不可编辑,有选块功能。列表框。单列或多列,选项可带有图标。状态条。含有命令菜单弹出按键、窗口关闭按键在窗口关闭按键上
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安保部加班管理制度
- 安全科人员管理制度
- 定向钻施工管理制度
- 实训室库房管理制度
- 审计科印章管理制度
- 客车线路牌管理制度
- 家为乐餐饮管理制度
- 家装修施工管理制度
- 应急处置卡管理制度
- 强电房安全管理制度
- DB61-T 5068-2023 钢桥面改性聚氨酯混凝土铺装应用技术规程
- 国内民用船舶修理价格表(92黄本)
- 国家中长期科技发展规划纲要2021-2035
- 中学生早餐调查报告公开课一等奖课件省赛课获奖课件
- 【解析】江西省新余市2023年小升初语文试卷
- TACEF 077-2023 污染地块风险管控与修复工程职业健康防护指南
- 2023-2024学年四川省阿坝州小学语文四年级期末深度自测试卷详细参考答案解析
- 高等量子力学-课件
- 上消化道出血急救和护理演示文稿
- 公路箱梁水纹产生及防治
- 通许县供水管网工程环境影响报告
评论
0/150
提交评论