现在的位置: 首页 > 综合 > 正文

mfc创建一个没有文档类的视图程序

2012年07月28日 ⁄ 综合 ⁄ 共 2661字 ⁄ 字号 评论关闭
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;

【上篇】
【下篇】

抱歉!评论已关闭.