您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

PPSM嵌入式RTOS中的窗口系统开发

时间:2007-1-20栏目:电子通信论文

在我们的窗口系统中不存在下层窗口界面绘制问题;同时,在小的屏幕上,实现窗口的移动和缩放并无太大的实用性,因而我们也不实现窗口的这些功能。

另外有一类比较特殊的窗口,即POPUP属性的窗口。这类窗口主要应用于菜单和提示窗口,特点是:单击窗口之外的区域将自动关闭该窗口。我们的处理方法是在这类窗口显示时,设定一个全屏的活动区,以取得窗口外区域的笔输入;再设定一个窗口区域的活动区覆盖在全屏的活动区之上,以将窗口区域排除在点击自动关闭的区域之外。

  (2)关于界面输入的考虑

  由于PPSM采用活动区的输入方式,每个任务管理自己的活动区,任务激活时,其活动区处于有效状态。因而应用程序切换时,其活动区自动切换;但一个应用程序中,各窗口的活动区可能互相干扰。应用程序中,每个窗口均有各种的输入区域,而各窗口的活动区域可能相互覆盖,显示上层窗口时必须使下次窗口的所有活动区无效。有两种方式可实现这样的要求。第一种方式是,采用PPSM中子任务的方式:各子任务管理自己的活动区,当该子任务挂起或激活时,其活动区随之挂起或激活。这要求一个窗口必须对应有一个子任务。由于每个新的子任务需要较大的系统内存空间,而我们并不需要应用程序内各窗口之间的切换,因而我们不采用这种方式。第二种方式是,采用PPSM中挂起活动区和恢复活动区的方法。PPSM支持对每个任务多次挂起活动区和恢复活动区,因而我们可以在显示新的窗口时,先挂起原有的活动区;窗口关闭时,恢复原有的活动区。

  (3)消息的处理

  PPSM中定义了一系统硬件中断产生的消息,如IRPT_TIMER、IRPT_RTC、IRPT_UART等等;同时,提供SendMessage和AdvSendMessage函数允许发送用户自定义消息。用户自定义消息从IRPT_USER开始。一个程序可以发送到另一个应用程序或自己。这些消息和所有系统消息均由应用程序的顶层窗口处理。应用程序从其消息队列中取得消息后,首先,由预定义的应用程序消息处理函数处理公共的消息。然后,由为顶层窗口定义的消息处理函数处理。顶层窗口不处理的消息由预定义的窗口消息处理函数处理。

消息发送采用两种方式。第一种是Send Message(),该函数将消息放在应用程序的消息队列中并立即返回;第二种是直接调用应用程序顶层窗口的消息处理函数,这样函数便在消息处理之后返回。

  (4)控件体系

  窗口只是提供了界面设计操作的基础。窗口中需要一系列按功能和操作方式分类的可视的界面元素,以便编程人员能够方便地设计窗口的界面,实现窗口的特定功能。这样的界面元素叫控件。

由于嵌入式设备内存有限的原因,控件并不采用子窗口的方式。根据设计控件的目的,各类控件具有较为确定的外观和规定的动作,并在特定的条件下,向其父窗口发出预定义的消息以供其处理。

控件属于父窗口。在父窗口显示时自动显示,在父窗口关闭时自动释放其占用的内存空间;父窗口接收的消息首先在各控件中分发处理。按照这一要求,窗口必须保存、维护其控件的一个列表。列表中控件的指针按控件创建的顺序存放。控件按创建的顺序显示,而消息在控件中按反序传递,以保证后创建的控件在可以覆盖之前创建的控件的图形和操作。

为了提高控件开发效率,我们需要各控件可以作为一种新定义控件的子控件。这样新定义的控件可以利用已有的控件功能。如文本框控件中可以包含水平和垂直滚动条子控件。

控件可分为有焦点和无焦点的。有焦点的控件可以处理输入法发出的字符消息。

3 窗口体系的实现

3.1 窗口的运行结构

  根据以上对窗口体系的总体考虑,确定窗口的运行结构需要以下内容:

  ① 窗口的位置、大小和标题。

  ② 窗口的风格:

  WS_MAINWND——应用程序主窗口。关闭主窗口将自动关闭应用程序。

  WS_POPUP——弹出式窗口。单击非窗口区域将自动关闭该窗口。该属性不能和WS_MAINWND同时出现。

  WS_NOBORDER——无边框窗口。

上一页  [1] [2] [3] [4] [5] 下一页

下页更精彩:1 2 3 4 下一页