訊息的捕獲流程:
標準訊息:除wm_command之外,所有wm_開頭的訊息,從cwnd派生的類,都可以接收到該類訊息;
命令訊息:來自選單、加速鍵或工具欄按鈕的訊息,這類訊息都以wm_command呈現。在mfc中,通過選單項的標識(id)來區分不同的命令訊息;在sdk中,通過訊息的wparam引數識別。從ccmdtarget派生的類,都可以接收到這類訊息。
通告訊息:由控制項產生的訊息,比如按鈕的單擊,列表框的選擇等均產生該類訊息,為的是向其父視窗(通常是對話方塊)通知事件的發生,這類訊息也是以wm_command呈現的。從ccmdtarget派生的類,都可以接收到該類訊息。
標準訊息和命令訊息是向本視窗傳送的訊息;通告訊息是由子視窗向父視窗傳送的訊息,如按鈕等本身也是乙個視窗,當本身狀態改變時向其父類傳送訊息。
下面,我們以menu這個程式為例,來看看
響應選單項命令的順序依次是:視類、文件類、框架類,最後才是應用程式類。
選單命令訊息路由的具體過程:當單擊某個選單項時,最先接收到這個選單命令訊息的是框架類。框架類將把接收到的這個訊息交給它的子視窗。即視類,由視類首先進行處理。視類首先格局命令訊息對映機制查詢自身是否對此訊息進行了響應,如果響應了,就呼叫相應響應函式對這個訊息進行處理,訊息路由過程結束;如果視類沒有對此命令訊息做出響應,就交由文件類,文件類同樣查詢自身是否對這個選單命令進行了響應,如果響應了,就有文件類的命令訊息響應函式進行處理,路由過程結束。如果文件類也未做響應,就把這個命令訊息交還給視類,後者又把該訊息交還給框架類。框架類檢視自己是否對這個命令訊息進行了響應,如果它也沒有做出響應,就把這個選單命令訊息交給應用程式類,由後者來進行處理。
訪問子選單只能夠通過索引進行訪問,訪問子選單項可以通過子選單項的索引或者它的標識進行訪問。
getmenu():返回框架視窗的選單欄cmenu的指標。
cmenu有乙個函式getsubmenu()返回乙個指向子選單的cmenu指標。
getmenu()->getsubmenu(0)->checkmenuitem(0,mf_byposition|mf_checked);
getmenu獲取選單欄,getsubmenu獲取子選單,checkmenuitem對子選單項進行操作,建立乙個標記選單。
設定乙個圖形標記選單:setmenuitembitmaps()。
設定預設選單:setdefaultitem(),乙個子選單中只能有乙個預設選單項。
選單項狀態的維護是依賴於cn_update_command_ui訊息,誰捕獲cn_update_command訊息,mfc就在其中建立乙個ccmdui物件,我們可以通過手工活利用class wizard在訊息對映中新增on_update_command_ui巨集來捕獲cn_update_command_ui訊息。
在後台所做的工作是:作業系統發出wm_initmenepopup訊息,然後由mfc的基類如cframewnd接管,它建立乙個ccmdui物件,並與第乙個選單項相關聯,呼叫物件的乙個函式doupdate(),這個函式發出cn_update_command_ui訊息,這個訊息帶有指向ccmdui物件的指標。同乙個ccmdui物件就設定為與第二個選單項相關聯,這樣順序執行,直到完成所有選單項。
從第乙個選單項開始更新,一直更新到最後乙個,如果該選單項捕獲了該訊息,就對該選單項進行更新。
更新命令ui處理程式僅應用於彈出式選單項上的專案,不能應用於永久顯示的頂級選單專案。
第六講 if 語句
格式 單分支if 條件測試命令 then 命令序列 fi 多分支 if then 命令序列 else 命令序列 fi bin bash data new create if f file then echo exist file cat file wc l rm file else touch fi...
第六講感悟
方法是處理業務邏輯的 滿足使用者需求,有開發者設計的具有一定邏輯的 鄙人認為可以把方法看作是數學中的方程式,帶入因變數進行計算,得到所要求得的值 方法應盡可能單 一 簡單 容易理解。因此關於方法的返回值 有return語句的方法有可能還需被呼叫到其他方法中去使用 類似於三元一次方程兩兩相消後再求一次...
第六講 堆疊操作
本節中的例子其結構和例1一樣,僅改變mydisplay和myreshape。例4 利用堆疊繪製三個物體 乙個綠色的茶壺,乙個藍色的茶壺,乙個紅色的立方體 部分 void mydisplay void void myreshape glsizei w,glsizei h 執行後,我們可以看到左邊為乙個...