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


    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;

  • 相关阅读:
    Linux C++ 处理 Kill 信号、Ctrl+C信号,便于安全退出
    静态链接libcurl的步骤
    编译器如何C++的函数重载
    单链表逆序 也叫反转
    VC 创建拨号连接A
    强大的vim配置,让编程更随意
    已知二叉树后序遍历序列是DBCEFGHA,中序遍历序列EDCBAHFG,它的前序遍历的序列是?麻烦再画下这二叉树.
    怎样使用IPV6编程
    全面详细介绍libcurl的使用
    ZeroMQ全面介绍
  • 原文地址:https://www.cnblogs.com/worldreason/p/1241912.html
Copyright © 2020-2023  润新知