BUIW的架构和消息流程

 BUIW的基本框架如下图,这幅图是比较完整的一个结构,ROOTForm通过一个VectorModel管理所有Forms;通过一个RootContainer管理所有Rootform上的widgets和其它formpiwidget成员(XYContainer类型,其它所有Forms都通过自己的piwidget管理自己的子container或子widget)

 

       插入一个新的Form的过程(RootForm_InsertForm)

1.       分别找到新Form和对应piwidgetpiFormspiWidget中的位置。

2.       分别把Form插入piFormspiContainer

3.       更新FormStack,包括:

(1)       设置最顶层FormActive状态

(2)       所有其他Forms设为not Active状态

(3)       设置ActiveForm侦听函数

(4)       设置最上面的非POPUP Form侦听函数

(5)       所有popup Forms和最上面的非PopUpForms需要显示,把它们的piwidgetàbShow标志位都置为1

(6)       其它Forms不必显示,把它们的piWidget->bShow标志位都清零

(7)       设置focus widget,设置过程是一个递归调用的过程,一直会设置到最上层form的最底层一个container最底层的widget

(8)       SoftKey Widget在最顶层FormpiWidget下面

(9)       Title Widget在最上面的非PopUpForm下面,如果没有PopUp Forms,则为TopForm---SoftKeyWidget---TitleWidget

 

由上述插入过程基本可以看出整个BUIWFORM---Contaienr---Widget的框架了。

下面再来看其消息处理流程:

(1)       APP把消息传给ROOTForm,由RootForm_HandleEvent处理

(2)       RootForm_HandleEvent首先查找当前widget处理,分两步:

l         如果此时RootForm指定了piwCapture,用该Widget处理该消息,piwCapture在设置touch的时候会指定好;

l         如果未指定piwCapture,则由当前focus widget处理。插入FORM过程中指定focus widget过程上面已经描述过了;

(3)       如果此时仍然没有被处理,则转给当前TOPForm处理

 

几个概念区分:

1.       bactive是标志当前FORM是否active的标志位;最顶层formactive状态,另外,当APP处于激活状态时,rootformbactive也为TRUE,而APP被挂起的时候rootformbactive被置为FALSE。

    rootform->piactivewidget指向当前topform的piwidget。

2.       pFocus是每个container用来保存其子控件中的focus控件指针的变量。

3.       piwCaptureRootForm用来保存支持触摸操作时当前操作的widget

BUIW的架构和消息流程_第1张图片


你可能感兴趣的:(BUIW的架构和消息流程)