MFC學習筆記——基礎

 MFC應用程序
	1. MFC 的控制檯程序
		1.1 包含afx系列的頭文件
		1.2 CWinApp theApp- MFC的應用程序類,封裝了應用程序的啓動過程。
		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頭文件
			2.3.2 繼承CWinApp類,並且聲明瞭該類的全局變量

3. MFC 應用程序 3.1 單文檔視圖應用程序 3.1.1 包含一個繼承CWinApp類 3.1.2 CWinFrame 3.1.3 CView 的子類 3.1.4 CDocument  的子類 3.2 多文檔視圖應用程序

3.2.1 包含一個繼承CWinApp類 3.2.2 CWinFrame 3.2.3 CView 的子類 3.2.4 CDocument  的子類 3.2.5 CChildFrame 子框架窗口 3.3 對話框應用程序 3.3.1 包含一個繼承CWinApp類 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.增加應用程序類WinApp 2.1 添加CWinApp的子類 2.2 添加InitInstance函數 是在程序啓動過程中,會被調用,我盟可以在這個函數中,創建窗口或者各種初始化操作。 3. 窗口 3.1 添加CFrameWnd的子類CMyFrameWnd 3.2 在CWinApp的InitInstance函數定義窗口對象 3.3 創建窗口並顯示 3.4 將窗口設置成App的主窗口 m_pMainWnd = pWnd 3.5 在CMyFrameWnd中添加窗口處理函數 WindowProc,在WindowProc中處理消息


#include "stdafx.h"
#include "WinMFC.h"
#include <afx.h>
#include <afxwin.h>

class CMyFrameWnd : public CFrameWnd
{
public:
	virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam) ;
};

LRESULT CMyFrameWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message)
	{
	case WM_CREATE:
		AfxMessageBox(_T("WM_CREATE")) ;

	case WM_PAINT:
		{
			PAINTSTRUCT ps = {0} ;
			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) ;
}

class CMyApp : public CWinApp
{
public:
	virtual BOOL InitInstance() ;
};

CMyApp theApp ;

BOOL CMyApp::InitInstance()
{
	CMyFrameWnd *pWnd  = new CMyFrameWnd() ;
	pWnd->Create(NULL, _T("MyApp")) ;

	MFC應用程序的啓動
	MFC程序與Win32程序一樣,都需要程序的入口函數。
	1. CWinApp
		應用程序類,封裝了應用程序的相關信息,可以提供初始化,消息循環等處理。
		CWinApp的構造
		1.1 將this指針保存的ThreadState中。
				m_pCruuentWinThread = this
		1.2 將this指針保存到ModuleState中。
				m_pCurrentWinApp = this
		1.3 各種的成員變量的初始化
	2. 程序的入口函數
		2.1 WinMain函數,與Win32程序一致
		2.2 在WinMain函數中調用了AfxWinMain函數
		2.3 AfxWinMain函數
			2.3.1 調用AfxWinInit初始化應用程序
			2.3.2 調用App的InitApplication初始化MFC內部數據
			2.3.3 嗲用CWinThread的InitInstance函數做初始化操作
			2.3.4調用CWinThread的Run函數進行消息循環
			2.3.5 調用AfxWinTerm函數做退出處理
	3.程序的啓動
		3.1 CWinApp在構造過程中,將自己的this指針分別保存到全局的變量中,將自己的this指針分別保存在全局變量中。
		3.2 在AfxWinMain執行中,首先從全局變量中將保存CWinapp的地址獲取到。
		3.3 調用CWinApp的InitInstance函數進行初始化。我們在InitInsance函數中,創建窗口等初始化操作。
		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 添加消息和處理函數的對應

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章