第109篇
極客時(shí)間《許式偉的架構(gòu)課》課程筆記。
事件
- 任何桌面操作系統(tǒng)每個(gè)進(jìn)程都有一個(gè)全局的事件隊(duì)列Event Queue
- 所有輸入動(dòng)作都會(huì)產(chǎn)生一個(gè)事件Event郊霎,并且操作系統(tǒng)負(fù)責(zé)將它放入進(jìn)程的時(shí)間隊(duì)列
- 過(guò)程如下:硬件中斷-->收到對(duì)應(yīng)事件-->確定事件的目標(biāo)進(jìn)程-->將事件放入目標(biāo)進(jìn)程的事件隊(duì)列
窗口與事件響應(yīng)
- 窗口Window最蕾,也叫視圖View,是一個(gè)獨(dú)立可復(fù)用的界面元素UI Element
- 窗口響應(yīng)發(fā)送給它的事件Event,修改內(nèi)部狀態(tài),然后調(diào)用GDI更新界面顯示
- 響應(yīng)事件的兩種常見(jiàn)機(jī)制:一種是事件處理類(EventHandler堤如,在 iOS 中叫 Responder);另一種是用委托(delegate)
- 不只是窗口可以響應(yīng)事件窒朋,應(yīng)用程序(Application)也可以
事件分派
- 事件分派(Event Dispatch)通常由事件分派循環(huán)完成煤惩,實(shí)現(xiàn)全局的事件隊(duì)列到窗口
- 事件處理鏈(EventHandler Chain)負(fù)責(zé)指派響應(yīng)事件的目標(biāo)窗口
- 不同事件分派過(guò)程不同,鼠標(biāo)和觸摸屏的事件一般是事件發(fā)生所在窗口炼邀,例外是拖放
- 鍵盤(pán)事件通常是焦點(diǎn)窗口先響應(yīng),如果不感興趣再逐層上升剪侮,直到頂層窗口
窗口內(nèi)容繪制
- 收到繪制消息時(shí)拭宁,需要操作系統(tǒng)的GDI子系統(tǒng)進(jìn)行窗口內(nèi)容繪制
- 繪制內(nèi)容分為兩大類:2D和3D
- 2D內(nèi)容一般由操作系統(tǒng)GDI支持
- 3D內(nèi)容一般由OpenGL或Vulkan跨平臺(tái)方案實(shí)現(xiàn)
- GDI是操作系統(tǒng)性能要求最高最耗電的子系統(tǒng),一般通過(guò)硬件加速完成
通用控件
- 操作系統(tǒng)提供的通用界面元素瓣俯,一般稱為控件(Control)
- 常見(jiàn)控件:靜態(tài)文本 (Label)杰标、按鈕 (Button)、單選框 (RadioBox)彩匕、復(fù)選框 (CheckBox)腔剂、輸入框 (Input,也叫 EditBox/EditText)驼仪、進(jìn)度條 (ProgressBar)等
總結(jié)
- 桌面應(yīng)用程序通常由用戶交互驅(qū)動(dòng)
- 在操作系統(tǒng)的所有子系統(tǒng)中掸犬,交互相關(guān)的子系統(tǒng)是毫無(wú)疑問(wèn)的差異性最大的子系統(tǒng)