mfc程式最主要的是文檔視圖的架構,現在不要文檔如何建立呢? 雖然網上的資料一大把,但是自己
再寫一個備忘錄。
#include <afxwin.h> // MFC 核心組件和標準組件
#include <afxext.h> // MFC 擴充
// =======================================視圖類===========================================
class CMyView : public CView
{
// 建構函式聲明為protected,就是視只能由架構內部建立
protected:
CMyView()
{
}
// 可以動態建立
DECLARE_DYNCREATE(CMyView)
// 聲明訊息映射
DECLARE_MESSAGE_MAP()
// 自訂背景擦除
afx_msg BOOL OnEraseBkgnd(CDC *pDC)
{
RECT rect;
this->GetClientRect(&rect);
COLORREF color = RGB(200,200,220);
CBrush brush(color);
pDC->FillRect(&rect, &brush);
return TRUE;
}
public:
// 必須實現此函數,這是CView類的純虛函數,CView是抽象類別。
virtual void OnDraw(CDC *pDC)
{
pDC->SetBkMode(TRANSPARENT);
pDC->TextOutW(100,100,CString("This is my view"));
}
// 解構函式是public的
~CMyView()
{
}
};
// 實現動態建立能力
IMPLEMENT_DYNCREATE(CMyView, CView)
// 實現訊息映射
BEGIN_MESSAGE_MAP(CMyView, CView)
ON_WM_ERASEBKGND()
END_MESSAGE_MAP()
// =======================================主架構視窗類別===========================================
class CMainFrame : public CFrameWnd
{
protected:
// 支援動態建立
DECLARE_DYNCREATE(CMainFrame)
// 支援訊息映射
DECLARE_MESSAGE_MAP()
// 視
CMyView *m_pMainView;
// OnCreate方法,在視窗建立完成時才被調用,由WM_CREATE訊息引起被調用
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// 首先完成基類的方法
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// 建立視圖,必須聲明一個上下文視圖結構體
CCreateContext ccx;
ccx.m_pNewViewClass = RUNTIME_CLASS(CMyView);
ccx.m_pCurrentFrame = this;
ccx.m_pCurrentDoc = NULL;
ccx.m_pNewDocTemplate = NULL;
ccx.m_pLastView = NULL;
// 使用結構體建立一個視圖
m_pMainView = DYNAMIC_DOWNCAST( CMyView, this->CreateView(&ccx) );
// 如果建立失敗
if ( !m_pMainView )
{
TRACE0("Creation of view failed");
}
// 主架構重新布局
RecalcLayout();
// 顯示視圖
m_pMainView->ShowWindow(SW_SHOW);
m_pMainView->UpdateWindow();
return 0;
}
public:
CMainFrame()
{
m_pMainView = NULL;
}
~CMainFrame()
{
}
};
//實現動態建立能力
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
//實現訊息映射
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
END_MESSAGE_MAP()
// =======================================主應用程式類===========================================
class CMyApp : public CWinApp
{
public:
CMyApp()
{
}
virtual BOOL InitInstance()
{
CWinApp::InitInstance();
CMainFrame *pFrame = new CMainFrame();
pFrame->Create(NULL,(LPCTSTR)_T("hello"));
this->m_pMainWnd = pFrame;
this->m_pMainWnd->ShowWindow(SW_SHOW);
this->m_pMainWnd->UpdateWindow();
return TRUE;
}
};
CMyApp theApp;