MFC单文档和多文档框架

原文地址:李浩的博客 lihaohello.top


MFC曾在Windows桌面开发领域大放异彩,但随着时间的推移,如今相比各种流行的GUI开发技术(QT、WPF、Flutter、Web技术等),MFC被贴上“古老”、“落后”的标签。

但有大量工业软件采用MFC进行开发,且在AutoCAD二次开发领域,MFC是官方指定的ObjectARX界面开发方式,掌握MFC技术具有一定的现实需求。

本文从整体上介绍MFC单文档和多文档应用程序的整体框架。

核心类

CWinApp - 程序类

  • 定义一个全局CWinApp对象,作为程序爆破点
  • 重写InitInstance()虚函数,在其中创建框架类对象
#include<afxwin.h>
// 自定义程序类
class CMyWinApp :public CWinApp {
   
public:
    virtual BOOL InitInstance() override;
};
BOOL CMyWinApp::InitInstance() {
   
    CMyFrameWnd* pFrame = new CMyFrameWnd;
    pFrame->Create(NULL, "MFCView");
    m_pMainWnd = pFrame;
    pFrame->ShowWindow(SW_SHOW);
    pFrame->UpdateWindow();
    return TRUE;
}
// 程序爆破点
CMyWinApp theApp;

CFrameWnd - 框架类

  • 作为容纳菜单、工具条、状态条、视口等元素的容器
  • 在其WM_CREATE事件处理函数中创建视图类的对象等

CView - 视图类

使用步骤:

  • 自定义程序类和框架类
  • 自定义视图类,派生自CView,重写纯虚函数OnDraw(),用于绘制视图
  • 在自定义框架类中的WM_CREATE消息处理函数中,调用Create()创建视图窗口,如果指定窗口ID为AFX_IDW_PANE_FIRST,则按照框架窗口大小确定视图大小
  • OnDraw()虚函数由父类的WM_PAINT事件处理函数来调用,优先使用该方法来实现视图的绘制
// 1、自定义视图类
class CMyView :public CView {
   
    virtual void OnDraw(CDC* pDC) override;
};
// 如果重新重新处理WM_PAINT消息,那么就使用OnDraw绘图!
void CMyView::OnDraw(CDC* pDC) {
   
    pDC->TextOut(50, 50, "我是CMyView", strlen("我是CMyView"));
}
// 自定义框架类
class CMyFrameWnd :public CFrameWnd {
   
private:
    CMyView* pView;
    DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnPaint();
    afx_msg int OnCreate(LPCREATESTRUCT pcs);
};
BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)
    ON_WM_PAINT()
    ON_WM_CREATE()
END_MESSAGE_MAP()
void CMyFrameWnd::OnPaint() {
   
    PAINTSTRUCT ps = {
    0 };
    HDC hdc = ::Be
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值