MFC學習筆記 基礎

2021-06-16 18:49:12 字數 3444 閱讀 5416

一mfc應用程式

1. mfc 的控制台程式

1.1 包含afx系列的標頭檔案

1.3 afxwininit- mfc初始化函式,將應用程式的資訊初始化。

2. mfc 的動態庫和靜態庫

2.1 靜態庫—— 增加了mfc的支援

2.2 動態庫

2.2.1 mfc規則dll

使用mfc靜態庫的規則dll

使用mfc動態庫的規則dll

2.2.2 mfc擴充套件dll

2.3 不同

2.3.1 mfc相關的afx標頭檔案

3. mfc 應用程式

3.1 單文件檢視應用程式

3.1.2 cwinframe

3.1.3 cview 的子類

3.1.4 cdocument  的子類

3.2 多文件檢視應用程式

3.2.2 cwinframe

3.2.3 cview 的子類

3.2.4 cdocument  的子類

3.2.5 cchildframe 子框架視窗

3.3 對話方塊應用程式

3.3.2 對話方塊類

四 mfc中的類

1. cobject類

mfc類的基礎,大部分mfc類都是它的子類。

cobject封裝了mfc的基礎機制

1.1 new 和delete

1.2 assert

1.3 執行時資訊

1.4 動態建立

1.5 序列化

2. 應用程式框架

應用程式啟動相關資訊,以及mfc訊息對映機制

3. 視窗支援類

封裝了視窗操作的api,各種控制項及視窗的框架。

4. 繪圖類

提供了繪圖api的封裝,以及相關的gdi裝置封裝

5 . mfc 的集合類

提供了陣列、鍊錶、對映的資料結構操作

6. 資料庫支援類 

odbc 支援類和dao的支援類。 dao的類已作廢。

7.同步類

臨界區/事件/互斥/訊號量的封裝

8.socket類

封裝了socket的程式設計

9. 常用資料結構

cstring crect csize

五第乙個mfc程式 

1.環境設定

1.1修改標頭檔案

1.2增加mfc庫的支援

2.2 新增initinstance函式

是在程式啟動過程中,會被呼叫,我盟可以在這個函式中,建立視窗或者各種初始化操作。

3. 視窗

3.1 新增cframewnd的子類cmyframewnd

3.3 建立視窗並顯示

3.5 在cmyframewnd中新增視窗處理函式

windowproc,在windowproc中處理訊息

#include "stdafx.h"

#include "winmfc.h"

#include #include class cmyframewnd : public cframewnd

;lresult cmyframewnd::windowproc(uint message, wparam wparam, lparam lparam)

; hdc dc = ::beginpaint(m_hwnd, &ps) ;

tchar *sztext = _t("aaaaaaa") ;

textout(dc,100,100, sztext, wcslen(sztext)) ;

::endpaint(m_hwnd, &ps) ;

} break;

} return cframewnd::windowproc(message, wparam, lparam) ;};

{ cmyframewnd *pwnd = new cmyframewnd() ;

六mfc應用程式的啟動

mfc程式與win32程式一樣,都需要程式的入口函式。

應用程式類,封裝了應用程式的相關資訊,可以提供初始化,訊息迴圈等處理。

1.1 將this指標儲存的threadstate中。

m_pcruuentwinthread = this

1.2 將this指標儲存到modulestate中。

1.3 各種的成員變數的初始化

2. 程式的入口函式

2.1 winmain函式,與win32程式一致

2.2 在winmain函式中呼叫了afxwinmain函式

2.3 afxwinmain函式

2.3.1 呼叫afxwininit初始化應用程式

2.3.3 嗲用cwinthread的initinstance函式做初始化操作

2.3.4呼叫cwinthread的run函式進行訊息迴圈

2.3.5 呼叫afxwinterm函式做退出處理

3.程式的啟動

3.4 呼叫run函式,進行訊息迴圈。

七視窗建立及視窗處理函式

1. 視窗建立

1.1 視窗的引數初始化,包括視窗類,風格等到。

將defwindowproc註冊成視窗處理函式。

1.2 設定了建立hook。

當視窗建立的時候,呼叫這個hook函式。

wnd-> hook -> wndproc

1.3 建立視窗

createwindowex

1.5解除安裝建立hook

將hook從程式中移除。

2. hook鉤子

2.1 使用afxgetafxwndproc獲取了乙個wndproc.

2.2 將這個wndproc函式設定成當前視窗的處理函式。

乙個wndproc函式指標,也就是afxwndproc函式位址。

2.3 將視窗控制代碼和視窗類的指標儲存到mfc的對映資料中

3. afxwndproc視窗處理函式

3.1 根據視窗的控制代碼獲取了相對應視窗的cwind*型別指標。

從對映資料中根據視窗控制代碼查詢cwnd*指標。

3.2 呼叫afxcallproc函式。

3.3 在afxcllwndproc函式中呼叫cwind的windowproc函式。

4.視窗的建立及處理過程

4.1 將defwindowproc函式註冊為當前視窗的處理函式。

4.2 定義鉤子函式

4.3 建立視窗

4.4 將視窗類指標和視窗控制代碼的對應關係儲存

4.5 在鉤子函式中將afxwndproc函式設定當前視窗的視窗處理函式

4.6 在afxwndproc(base)收到視窗訊息,從視窗對應關係中

4.7 呼叫視窗類windowproc函式處理訊息

八訊息對映

1. 訊息對映的新增

1.1 在framewnd新增巨集定義

1.2 新增訊息巨集實現

1.3 新增訊息處理函式

1.4 新增訊息和處理函式的對應

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...