MFC 使用巨集將訊息對應至成員函數,優點:
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);void CMyView::OnLButtonDown(...) { ... }BEGIN_MESSAGE_MAP(CMyView, CView)
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()CMyApp01View → Go to Definition 或 Alt+F12。CObject → CCmdTarget → CWnd → CView → CMyApp01View。應用程式架構在需重繪時呼叫 virtual void OnDraw(CDC* pDC)。
pDC:裝置環境指標,封裝 HDC,提供 TextOut, Ellipse, Rectangle, BitBlt 等繪圖函數。OnDraw 服務螢幕、列印預覽、實際列印 (傳入不同 CDC 衍生物件)。MyApp01,單文件。CMyApp01View::OnDraw。void CMyApp01View::OnDraw(CDC* pDC)
{
CMyApp01Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->TextOut(10, 10, _T("雷神願意和所有學 VC 的朋友共同進步!"));
pDC->SelectStockObject(DKGRAY_BRUSH);
pDC->Ellipse(CRect(20, 40, 120, 140)); // 圓
pDC->Rectangle(CRect(220, 40, 320, 140)); // 矩形
}
| 檔案 | 用途 |
|---|---|
MyApp01.dsp/.dsw | 專案/工作區檔案 |
MyApp01.rc | 資源描述檔 |
MyApp01View.h/.cpp | 視圖類別核心 (重點) |
MyApp01Doc.h/.cpp | 文件類別 |
StdAfx.h/.cpp | 預編譯標頭 |
resource.h | 資源 ID 定義 |
ReadMe.txt | 專案說明 |
OnDraw 代碼,體驗 CDC 繪圖函數。CView 繼承鏈,理解 MFC 類別庫架構。VC98\MFC\SRC\view.cpp) 看 OnDraw 如何被架構呼叫。掌握訊息映射、文件/視圖分離與 OnDraw 繪圖流程,即掌握 MFC 應用程式開發的心臟部位。