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;