Chinaunix首页 | 论坛 | 博客
  • 博客访问: 35923
  • 博文数量: 17
  • 博客积分: 608
  • 博客等级: 中士
  • 技术积分: 265
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-07 00:56
文章分类
文章存档

2012年(17)

我的朋友

分类: 虚拟化

2012-07-17 03:09:50

      APO追求的是高速,简单;所以APO的窗口应用程序实际上只是A server的一个线程;奇怪的只是APO没用A Client。APO的窗口应用程序由2个文本文件构成;一个是初始窗口布局文本件;另一个是关于相应消息处理的动态窗口的文本文件—应用程序。窗口是屏幕上应用程序能够直接控制的矩形区域。应用程序能够创建并控制主窗口的一切,如大小和形状。通过将屏幕分为不同的窗口,用户能够使用键盘或鼠标选择一个并行运行的应用程序,以此对多任务环境中的一个特定程序进行输入。

APO窗口的图元:在其父窗口上画的基本图形。如控制图标,边框,光标,游标,小位图,几何图形等。在GPU内的图元库可有最大64K个图元,可以查询、增加、删除图元库中的图元;如增加一个位图按钮图元等。

 一、初始窗口布局对象描述文档

    窗口是图元的容器;对象描述文档就是一个文本文件。该文件的节点描述符文件通常是用APO拖拉式窗口布局编辑器自动生成。这里以360浏览器为例来说明:

360浏览器根窗口{标题栏子窗口;网址浏览栏子窗口;工具快捷栏子窗口;网页标题栏子窗口;网页栏子窗口;状态栏子窗口}。

标题栏子窗口{绿色e图标  图元指针;网页与窗口标题字符串  XX;请登录菜单子窗口;文件菜单子窗口;查看菜单子窗口;收藏菜单子窗口;账户菜单子窗口;工具菜单子窗口;帮助菜单子窗口;更换-图标图元指针;最小化图标图元指针;变动图标图元指针;最大化图标图元指针;关闭图标 图元指针}。
   
网址浏览栏子窗口{后退图标图元指针;前进图标图元指针;查看浏览记录图标图元指针
;停止图标图元指针;刷新图标图元指针;主页图标 图元指针;恢复图标图元指针;显示恢复菜单子窗口;无痕图标图元指针;切换浏览模式菜单子窗口;网址选择文本框图元指针;加速图标图元指针;搜索文本框图元指针;搜索图标图元指针}。

 。。。。。。网页栏子窗口{网页内容子窗口;必要时的一个垂直滚动条子窗口;必要时的一个水平滚动条子窗口}。。。。。。。一个可选择的菜单条可以显示在标题条的下方。通过菜单条来选择菜单和子菜单。这种选择可以通过用鼠标单击,也可以用热键组合来实现。热键组合经常是ALT与命令中带下划线的字母的组合,比如File命令中的“F”。

用户区子窗口

    通常用户区占据了窗口最大的部分。这是应用程序的基本输出区域。应当由应用程序来复杂管理用户区。另外,应用程序可以输出到用户区。

图标

  图标是用来使用记住特定操作、想法或产品的小图形对象。比如,一个电子表格程序被最小化时可以显示一个很小的柱状图以提醒用户这个程序还在运行之中。在柱状图上双击鼠标会使APO激活这个应用程序。图标是非常有力的工具。它很适合用来引起用户的注意,比如在发出错误警告或者是向用户提供选择时。

光标

 光标是APO用来跟踪指点设备的运动的图形符号。这种图形符号可以改变形状以指明特定的APO操作。如,当标准的箭头光标变为沙漏光标时说明APO正在执行一个命令,需要暂停。

编辑光标

 应用程序在窗口中显示编辑光标以告诉用户在哪儿输入。编辑光标与其他屏幕符号显然不同,因为它是闪烁的。多数时候,鼠标输入与光标相连,而键盘输入与编辑光标相连。但是,可以用鼠标来改变编辑光标的输入点。

消息框

  消息框是一种包含标题、图标和消息的弹出式子窗口。

对话框

  对话框与消息框相似的地方在于它也是一种弹出式窗口。但是对话框主要用于接受用户输入而不仅仅是显示一些输出。对话框允许应用程序接受输入,每次一个域或是一个框的内容,而不是每次一个字符。对话框的布局通常用编译器中的资源编辑器完成。

字体

 字体是一种图形对象形成GPU的字体库,它定义了完整的字符集合的字样。这些字符都有一个特定的大小和风格,可以使文本具有不同的外观。字样是字符的一种基本属性,它定义了字符的衬线和笔画宽度。

二、窗口应用程序对象描述文档

    具有相似的外观和表现的窗口可以被组合成一个类,以此来减少需要维护的信息。因为每个窗口类都有自己的可共享的类结构,不需要复制不必要的窗口类参数。同时,同类的两个窗口使用相同的函数以及相关的例程。这样可以节省时间和空间,因为不存在代码复制。类的描述文档就是设计蓝图,后缀.class。

    A server可有64K个线程,附带的线程有键盘消息线程、鼠标消息线程、声音输入线程、声音输出线程、GPU通信线程、网络通信线程、游戏杆输入线程、窗口管理器线程、显示管理器线程等。绝大部分的线程都是窗口应用程序线程。窗口应用程序线程实际上就是一个消息处理线程。 

窗口应用程序线程{ // 如果是焦点线程,窗口管理器线程分发相关消息到msg变量。

    TBH(应用程序的消息入口表地址,msg);  // 查表跳转指令;

应用程序的消息入口表地址;       // 消息接口  

    处理消息1函数入口;          //

    。。。。。。。。

    处理消息N函数入口;          //

处理消息x函数{  // 编写消息处理函数

。。。。。。。。

} 

     A server从键盘和鼠标接受输入,这些输入数据被当作“事件”传送给适当的客户端
程序。至于哪个窗口应接受到这些事件,是依赖于窗口管理器的;典型的事件包括按键,鼠标移动,鼠标按下/放开等。应用程序通常不需要关心具体的设备,只要编写处理相应的事件函数就行了。移动窗口,改变窗口大小,图标化(最小化)窗口,改变窗口层叠顺序窗口上的标题,按钮,漂亮的边框,全都是窗口管理器提供的。不同的机器在本机显示的窗口,由窗口管理器统一装饰和指挥。

     从应用程序的角度来看,消息是关于发生的事件的通知。用户可以通过按下或移动鼠标来产生这些事件,也可以是通过改变窗口大小或选择一个菜单项等。这些事件也可以由应用程序本身产生。A server本身也能产生消息;还处理一些隐含的窗口消息并实现一些标准操作,如:如果将鼠标指针放在边框上并按下鼠标的左键,用户就可以改变窗口的大小。系统控制图标是每个窗口左上方的小图片,每个应用程序都使用它。在控制图标上单击鼠标键会使显示系统菜单。系统菜单提供了诸如Restore,Move,Size,Minimize,Maximize以及Close这样标准操作。

应用程序文档中的所有资源:菜单项,控制图标,字符串,光标子窗口等。即是说对象描述文档内的所有节点(包括属性节点,子节点)都会由编译器统一分配一个唯一的资源索引数值(节点描述符ID)。

    基本图元库,字库是GPU里的2个位图库。基本图元库的索引是1字的16进制数如0X1111等,而字符串的字符则是字库的索引。   

1、根窗口JDMUF节点描述符的定义:

JDMUF{        // 根窗口样式索引值0。

BU16  JDID;    // 根节点的节点描述符ID号,0X00。

BU16  FJDID;   // 根节点的父节点描述符ID号,0X00。

BU16  JDFSID;  // 分配到的所属内存根目录中本文档的节点描述符ID号

BU16  BJDFSID; // 所属内存根目录中背景位图的节点描述符ID号或背景图元指针。

BU16  W;  // 根窗口初始化的宽度Width。

BU16  H;  // 根窗口初始化的高度Height。

BU16  X;  // 根窗口初始化的X坐标。

BU16  Y;  // 根窗口初始化的Y坐标。

} 

2、子窗口JDMUF节点描述符的定义:

JDMUF{

BU16  JDID;    // 子窗口的节点描述符ID号。

BU16  FJDID;   // 子窗口节点的父节点描述符ID号

BU16  IKCSS;   // 窗口样式索引值。

BU16  BJDFSID; // 所属内存根目录中背景位图的节点描述符ID号或背景图元指针。

BU16  W;  // 窗口初始化的宽度Width。

BU16  H;  // 窗口初始化的高度Height。

BU16  X;  // 窗口初始化的X坐标。

BU16  Y;  // 窗口初始化的Y坐标。

} 

3、图元JDMUF节点描述符的定义:

JDMUF{

BU16  JDID;    // 图元的节点描述符ID号。

BU16  FJDID;   // 图元节点的父节点描述符ID号

BU16  IKCSS;     // 图元样式索引值。

BU16  TYZFIP;  // 图元的字符串存放指针。

BU16  W;  // 图元初始化的宽度Width。

BU16  H;  // 图元初始化的高度Height。

BU16  X;  // 图元初始化的X坐标。

BU16  Y;  // 图元初始化的Y坐

Alib:

   Alib库定义了一套图形用户界面的编程接口。应用程序开发人员通过用Alib库来实现具体的用户界面,如按钮、菜单、滚动条、文本框等消息操作。我们能够通过把对象的节点描述符提供给各种Alib函数来操纵这些对象。Alib还包含了画直线、矩形、圆弧和多边形等的操作;也提供了许多位图操作,这些位图操作可以作用于子窗口的各个区域。Alib提供了字体相关的操作。应用程序可以请求A server在指定的区域用指定的字体显示指定的字符串,当然在此前应该请求A server加载字体,加载后客户端程序可以得到关于字体的一些信息。

阅读(1243) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~