事件驅動

所謂事件驅動,簡單地說就是你點什么按鈕(即產生什么事件),電腦執(zhí)行什么操作(即調用什么函數(shù)).當然事件不僅限于用戶的操作. 事件驅動的核心自然是事件镜悉。從事件角度說,事件驅動程序的基本結構是由一個事件收集器医瘫、一個事件發(fā)送器和一個事件處理器組成侣肄。事件收集器專門負責收集所有事件,包括來自用戶的(如鼠標醇份、鍵盤事件等)稼锅、來自硬件的(如時鐘事件等)和來自軟件的(如操作系統(tǒng)叮喳、應用程序本身等)。事件發(fā)送器負責將收集器收集到的事件分發(fā)到目標對象中缰贝。事件處理器做具體的事件響應工作馍悟,它往往要到實現(xiàn)階段才完全確定,因而需要運用虛函數(shù)機制(函數(shù)名往往取為類似于HandleMsg的一個名字)剩晴。對于框架的使用者來說锣咒,他們唯一能夠看到的是事件處理器。這也是他們所關心的內容赞弥。

視圖(即我們通常所說的“窗口”)是“事件驅動”應用程序的另一個要元毅整。它是我們所說的事件發(fā)送器的目標對象。視圖接受事件并能夠對其進行處理绽左。當我們將事件發(fā)送到具體的視圖時悼嫉,實際上我們完成了一個根本性的變化:從傳統(tǒng)的流線型程序結構到事件觸發(fā)方式的轉變。這樣應用程序具備相當?shù)娜嵝云纯梢詰斗N種離散的戏蔑、隨機的事件。

由于Windows本身是基于“事件驅動”模型的鲁纠。因而在Windows操作系統(tǒng)下實現(xiàn)應用程序框架有相當?shù)谋憷芸谩T谑录寗映绦虻?a target="_blank" rel="nofollow">基本單元中,事件收集器已經(jīng)由Windows系統(tǒng)完成改含;事件發(fā)送器也已經(jīng)由Windows完成了部分內容情龄。之所以是部分而非完全是因為Windows是用C語言實現(xiàn)的,而不是C++捍壤。由于沒有對象骤视,Windows將事件發(fā)送到所謂的“窗口函數(shù)”中(盡管不是發(fā)送到具體的對象,但應該說這是面向對象方式實現(xiàn)的一個變體)鹃觉。要感謝Windows做了這件事专酗。確定事件的目標所要做的工作的復雜可能要超出我們的想象。

wxWidgets的中所有可以處理事件的類都繼承自wxEvtHandler帜慢,其中包含frames,buttons,menus,even documents笼裳,所有的窗體類(即從wxWindow繼承的類)和程序類(application class).

這些類可以有一個事件表,用來綁定事件和被調用的函數(shù)(handler functions).

過程 3.2. 建立一個靜態(tài)事件表(即編譯時生成的事件表)的操作步驟

建立一個新類(直接或間接從wxEvtHandler繼承)

為每個要處理的事件聲明被調用的函數(shù)

在被處理的事件所在的類的聲明中加入宏DECLARE_EVENT_TABLE

在宏BEGIN_EVENT_TABLE... END_EVENT_TABLE(就是事件表)中將函數(shù)與枚舉的數(shù)字綁定(因為產生該類型的事件的按鈕不唯一粱玲,要用枚舉數(shù)來區(qū)分)躬柬;有些事件不必與枚舉數(shù)綁定,因為產生該類型的事件的對象可以確定(比如就是this).

例 3.1. 一個事件表

BEGIN_EVENT_TABLE(MyFrame,wxFrame)

EVT_MENU (wxID_ABOUT,MyFrame::OnAbout)

EVT_MENU (wxID_EⅪT,MyFrame::OnQuit)

EVT_SIZE (MyFrame::OnSize)

//不必與枚舉數(shù)綁定抽减,因為產生該類型的事件的對象是this

EVT_BUTTON (wxID_OK,MyFrame::OnButtonOK)

END_EVENT_TABLE()

在事件中指定被綁定的數(shù)字允青,wxWidgets會將其映射到對應的函數(shù),并調用函數(shù)

所有在事件表中被綁定的函數(shù)有相似的形式:返回值都是void卵沉,不是virtual函數(shù)颠锉,參數(shù)為wxCommandEvent類型

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末法牲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子琼掠,更是在濱河造成了極大的恐慌拒垃,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓷蛙,死亡現(xiàn)場離奇詭異悼瓮,居然都是意外死亡,警方通過查閱死者的電腦和手機艰猬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門横堡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人冠桃,你說我怎么就攤上這事命贴。” “怎么了食听?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵胸蛛,是天一觀的道長。 經(jīng)常有香客問我碳蛋,道長胚泌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任肃弟,我火速辦了婚禮,結果婚禮上零蓉,老公的妹妹穿的比我還像新娘笤受。我一直安慰自己,他們只是感情好敌蜂,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布箩兽。 她就那樣靜靜地躺著,像睡著了一般章喉。 火紅的嫁衣襯著肌膚如雪汗贫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天秸脱,我揣著相機與錄音落包,去河邊找鬼。 笑死摊唇,一個胖子當著我的面吹牛咐蝇,可吹牛的內容都是我干的。 我是一名探鬼主播巷查,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼有序,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了旭寿?” 一聲冷哼從身側響起盅称,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤搭幻,失蹤者是張志新(化名)和其女友劉穎逞盆,沒想到半個月后云芦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舅逸,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡琉历,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年旗笔,在試婚紗的時候發(fā)現(xiàn)自己被綠了蝇恶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撮弧。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡贿衍,死狀恐怖舌厨,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情躏哩,我是刑警寧澤扫尺,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布弊攘,位于F島的核電站姑曙,受9級特大地震影響伤靠,放射性物質發(fā)生泄漏。R本人自食惡果不足惜焕梅,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望阀蒂。 院中可真熱鬧脂新,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽醉锅。三九已至,卻和暖如春垄琐,著一層夾襖步出監(jiān)牢的瞬間狸窘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留劳吠,地道東北人痒玩。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像褒脯,于是被迫代替她去往敵國和親番川。 傳聞我的和親對象是個殘疾皇子颁督,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容