SWT源码分析 (七)

通过前面这些文章,对SWT程序执行的流程作了一些解释。

分析SWT的源码,实际上并不困难,只要了解了windows 程序执行的基本步骤。前面对程序的分析,可以分为2部分,一是寻找RegisterClass,CreateWindowEx这些windows api,寻找窗口创建的一系列流程,分析的是如何实现。

二是分析SWT对消息处理的封装,因为我们是在写Java程序,Java是OO的,我们不会再去写窗口过程函数了,分析的是“架构”,“模式”。

 

 

总结一下SWT程序的流程:

 

1.  Display display = new Display();

没有创建窗口,作了一些初始化、准备操作。一个程序往往只有一个Display对象,display对象持有很多程序其他对象的引用。

 

2. Shell shell = new Shell(display);

创建主窗口。

 

3. 类似Button b1 = new Button(shell,SWT.NONE); Text  text = new Text(shell,SWT.NONE);

创建控件,控件其实也是窗口。

 

4. 控件.addXXXListener();

监听控件的具体事件,实际上往控件上绑定了事件类型和监听器。

 

5. shell.open();

显示窗口。

 

6.

 

 

            while (!shell.isDisposed()) { // 如果主窗体没有关闭则一直循环

                        if (!display.readAndDispatch()) { // 如果display不忙

                                display.sleep(); // 休眠

                        }

                }

                display.dispose(); // 销毁display

 

进入消息循环,因为windows程序是“基于消息,事件驱动”的,所以程序时异步运行的,当发生了一个事件,

就会进入Display内部的窗口过程函数。Display中接收的是windows消息,将windows消息转换为SWT自己的事件,再交由具体的控件做处理。

就这样一直循环到程序退出。

 

 

至于SWT涉及到的一些模式。我如果我看出来,也会写出来,目前还没看出来什么。

你可能感兴趣的:(windows,OO)