第109篇
极客时间《许式伟的架构课》课程笔记。
事件
- 任何桌面操作系统每个进程都有一个全局的事件队列Event Queue
- 所有输入动作都会产生一个事件Event,并且操作系统负责将它放入进程的时间队列
- 过程如下:硬件中断-->收到对应事件-->确定事件的目标进程-->将事件放入目标进程的事件队列
窗口与事件响应
- 窗口Window,也叫视图View,是一个独立可复用的界面元素UI Element
- 窗口响应发送给它的事件Event,修改内部状态,然后调用GDI更新界面显示
- 响应事件的两种常见机制:一种是事件处理类(EventHandler,在 iOS 中叫 Responder);另一种是用委托(delegate)
- 不只是窗口可以响应事件,应用程序(Application)也可以
事件分派
- 事件分派(Event Dispatch)通常由事件分派循环完成,实现全局的事件队列到窗口
- 事件处理链(EventHandler Chain)负责指派响应事件的目标窗口
- 不同事件分派过程不同,鼠标和触摸屏的事件一般是事件发生所在窗口,例外是拖放
- 键盘事件通常是焦点窗口先响应,如果不感兴趣再逐层上升,直到顶层窗口
窗口内容绘制
- 收到绘制消息时,需要操作系统的GDI子系统进行窗口内容绘制
- 绘制内容分为两大类:2D和3D
- 2D内容一般由操作系统GDI支持
- 3D内容一般由OpenGL或Vulkan跨平台方案实现
- GDI是操作系统性能要求最高最耗电的子系统,一般通过硬件加速完成
通用控件
- 操作系统提供的通用界面元素,一般称为控件(Control)
- 常见控件:静态文本 (Label)、按钮 (Button)、单选框 (RadioBox)、复选框 (CheckBox)、输入框 (Input,也叫 EditBox/EditText)、进度条 (ProgressBar)等
总结
- 桌面应用程序通常由用户交互驱动
- 在操作系统的所有子系统中,交互相关的子系统是毫无疑问的差异性最大的子系统