MFC以C++形式封裝了Windows API
//實踐
撰寫MFC需要的頭檔案#include <afxwin.h>
程式執行流程:
1.實體化應用程式物件(有且只有一個)
2.執行程式入口函式 InitInstance
3.給框架類MyFrame物件動態分配空間(自動呼叫他的建構式),在其建構式內部,通過CWnd::Create 創建視窗
4.框架類物件顯示視窗 CWnd::ShowWindow
5.框架類物件更新視窗 CWnd::UpdateWindow
6.保存框架類物件指標 CWinThread::m_pMainWnd
檔案名:mfc.h
#include <afxwin.h>//mfc頭檔案 //應用程式類CWinApp,派生類 Class MyApp: public CWinApp{ public: virtual BOOL InitInstance(); //基類的虛函式,派生類只是重寫,MFC程式的入口地址 }; //框架類CFrameWnd ,派生類MyFrame Class MyFrame: public CFrameWnd{ public: MyFrame();//建構式 DECLARE_MESSAGE_MAP()//訊息映射宏,宣告必須用在類宣告中,即 .h 檔案中 afx_msg void OnLButtonDown(UINT,CPoint)//滑鼠宣告,value afx_msg void OnChar(UINT,UINT,UINT)//鍵盤宣告 afx_msg void OnPaint()//繪畫 };
檔案名:mfc.cpp
#include "mfc.h"//對應類宣告的頭檔案 MyApp app;//有且僅有一個全域的應用程式類物件 BOOL MyApp::InitInstance(){//程式入口地址 MyFrame *frame=new MyFrame;//1.創建框架類物件 frame->ShowWindow(SW_SHOWNORMAL);//2.顯示視窗 frame->UpdateWindow();//3.更新視窗 m_pMainWnd=frame;//4.保存指向應用程式主視窗的指標,實作自動管理 return TRUE;//初始化正常則回傳true } //分界宏 BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd) ON_WM_LBUTTONDOWN()//滑鼠左鍵按下 key ON_WM_CHAR()//鍵盤按下 END_MESSAGE_MAP() MyFrame::MyFrame(){ Create(NULL,TEXT("mfc"));//創建視窗 } void MyFrame::OnLButtonDwon(UNIT,CPoint point){//滑鼠按下 /* TCHAR buf[1024];//TCHAR 是MFC中的字符陣列 wsprintf(buf,TEXT("x=%d,y=%d"),point.x,point.y);//轉譯 MessageBox(buf);//區別于底層的MessageBox,MFC中實則是MessageBox method 在MSDN中可查 */ //mfc中的字串 CString CString str; str.Format(TEXT("x=%d,,,y=%d"),point.x,point.y);//格式化 MessageBox(str); } void MyFrame::OnChar(UNIT key,UNIT,UNIT){//鍵盤按下 CString str; str.Format(TEXT("按下了 %c 鍵"),key); MessageBox(str); } void MyFrame::OnPaint(){//繪畫 CPaintDC dc(this);//this指定繪圖設備 //幫助檔案,在CDC里找其他能畫的圖形 dc.TextOutW(100,100,TEXT("為了部落")); dc.Ellipse(10,10,100,100);//畫橢圓,兩點鎖定矩形內切圓 }
幫助檔案:《VC++之MFC類別庫中文手冊》,最上面是層次結構;最下面是訊息映射宏,
查找Create要搜索 :CFrameWnd::Create
ps:右鍵專案->屬性->常規->MFC的使用->在共享DLL中使用MFC
//理論
- 訊息映射機制
即將訊息和成員函式互相關聯的表,MFC中沒有事件和信號橋的概念,只有每個訊息映射一個函式
ps:訊息映射宏查找,在中文手冊最下面,
宣告宏:
DECLARE_MESSAGE_MAP()
分界宏:
BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)
END_MESSAGE_MAP()
程式執行流程:
- 宣告宏 寫到 .h 中
- 分界宏 寫到 .cpp 中
- 找訊息宏 寫到 分界宏 中
- 把函式原型宣告 寫到 .h 中
- 函式實作 寫到 .cpp 中
- windows 字符集
MessageBox(TEXT(“aaa”));
TEXT 自適應編碼轉換(即,定義里可定制多位元組和寬位元組):
右鍵專案->屬性->常規->字符集->使用多位元組字符集/使用Unicode字符集
Ps:TCHAR 也有自適應編碼轉換
“aaa” 多位元組:一個字符對應一個位元組
L“aaa” 寬位元組:一個字符對應多個位元組 Unicode:UTF-8 3個;GBK 2個;
多位元組轉為寬位元組:MessageBox(L “aaa”);
//統計字串長度
int num=0; char *p="aaa"; num=strlen(p); wchar_t *p2="bbbb"; num=wcslen(p2);
//char* 與 CString 之間的轉換
C++ string 與 MFC CString 不可直接轉換,要通過 char * .c_str();
//char*->CString char *p3="ccc"; CString str=CString(p3); //CString->char* CStringA tmp=str; char *pp=tmp.GetBuffer();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/10402.html
標籤:其他
