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涉及到的一些模式。我如果我看出来,也会写出来,目前还没看出来什么。