MFC學習筆記

2021-08-14 17:03:27 字數 1454 閱讀 4835

什麼是訊息對映機制

mfc使用一種訊息對映機制來處理訊息,在應用程式框架中的表現就是乙個訊息與訊息處理函式一一對應的訊息對映表,以及訊息處理函式的宣告和實現等**。當視窗接收到訊息時,會到訊息對映表中查詢該訊息對應的訊息處理函式,然後由訊息處理函式進行相應的處理。sdk程式設計時需要在視窗過程中一一判斷訊息值進行相應的處理,相比之下mfc的訊息對映機制要方便好用的多。

windows訊息分類

先講下windows訊息的分類。windows訊息分為系統訊息和使用者自定義訊息。windows系統訊息有三種:

1.標準windows訊息。除wm_command外以wm_開頭的訊息是標準訊息。例如,wm_create、wm_close。

2.命令訊息。訊息名為wm_command,訊息中附帶了識別符號id來區分是來自哪個選單、工具欄按鈕或加速鍵的訊息。

3.通知訊息。通知訊息一般由列表框等子視窗傳送給父視窗,訊息名也是wm_command,其中附帶了控制項通知碼來區分控制項。

cwnd的派生類都可以接收到標準windows訊息、通知訊息和命令訊息。命令訊息還可以由文件類等接收。

使用者自定義訊息是實際上就是使用者定義乙個巨集作為訊息,此巨集的值應該大於等於wm_user,然後此巨集就可以跟系統訊息一樣使用,視窗類中可以定義它的處理函式。

新增訊息處理函式

如何新增訊息處理函式呢?不管是自動還是手動新增都有三個步驟:

1.在類定義中加入訊息處理函式的函式宣告,注意要以afx_msg打頭。例如mainfrm.h中wm_create的訊息處理函式的函式宣告:afx_msg int oncreate(lpcreatestruct lpcreatestruct);。

2.在類的訊息對映表中新增該訊息的訊息對映入口項。例如wm_create的訊息對映入口項:on_wm_create()。

3.在類實現中新增訊息處理函式的函式實現。例如,mainfrm.cpp中wm_create的訊息處理函式的實現:

int cmainframe::oncreate(lpcreatestruct lpcreatestruct)

通過以上三個步驟以後,wm_create等訊息就可以在視窗類中被訊息處理函式處理了。

一.模態對話方塊和非模態對話方塊

windows對話方塊分為兩類:模態對話方塊和非模態對話方塊。

模態對話方塊是這樣的對話方塊,當它彈出後,本應用程式其他視窗將不再接受使用者輸入,只有該對話方塊響應使用者輸入,在對它進行相應操作退出後,其他視窗才能繼續與使用者互動。

非模態對話方塊則是,它彈出後,本程式其他視窗仍能響應使用者輸入。非模態對話方塊一般用來顯示提示資訊等。

實際上,模態對話方塊和非模態對話方塊在建立對話方塊資源和生成對話方塊類上是沒有區別的

屬性頁對話方塊就是包含一般屬性頁對話方塊和嚮導對話方塊兩類。它將多個對話方塊整合於一身,通過標籤或按鈕來切換頁面。

我們使用屬性頁對話方塊時,用到的類主要有兩個:cpropertypage類和cpropertysheet類。

屬性頁對話方塊包括嚮導對話方塊和一般屬性頁對話方塊兩類

MFC學習筆記( )

選單響應順序 view類 文件類 框架類 應用程式類 訊息分類 標準訊息 除wm command之外,所有以wm 開頭的訊息。從cwnd派生的類,都可以接收到這類訊息。命令訊息 來自選單 加速鍵或工具欄按鈕的訊息。這類訊息都以wm command呈現。在mfc中,通過選單項的標識 id 來區分不同的...

MFC學習筆記

1.oncreate函式目前來看只執行了一次 2.對於隱藏的this指標,不是類中的函式成員。當在類的非靜態成員函式中訪問類的非靜態成員的時候,編譯器會自動將物件本身的位址作為乙個隱含引數傳遞給函式 也就是說,即使你沒有寫上this指標,編譯器在編譯的時候也是加上this的,它作為非靜態成員函式的隱...

MFC 學習筆記

作業 用單文件檢視完成左鍵使圓圈變小,右鍵使圓圈變大,按住ctrl的同時移動滑鼠使圓圈跟著移動。document處理頁面的資料 view呈現和互動。on wm lbuttonup等滑鼠訊息帶著uint nflags 掩碼 引數,記錄滑鼠訊息的同時的附加資訊 比如ctrl或shift鍵 在initin...