📜  MFC教程(1)

📅  最后修改于: 2023-12-03 14:44:16.065000             🧑  作者: Mango

MFC教程

MFC (Microsoft Foundation Class) 是一个C++框架,它为Windows应用程序的开发提供了很多类和库。本教程将向您介绍MFC的基本概念和使用方法。

MFC的基本结构

MFC框架包含以下几个核心类:

  • CWinApp类:是应用程序的主类,该类派生自CObject类;
  • CWnd类:是窗口类,该类派生自CObject类;
  • CDocument类:是文档类,该类派生自CObject类;
  • CView类:是视图类,该类派生自CWnd类。

最终的应用程序是由这些类和其他类共同构成的。

创建MFC程序

下面是一个非常简单的MFC程序示例:

#include <afxwin.h>

class CMyApp : public CWinApp
{
public:
    virtual BOOL InitInstance();
};

class CMyFrame : public CFrameWnd
{
    DECLARE_MESSAGE_MAP()
};

BEGIN_MESSAGE_MAP(CMyFrame, CFrameWnd)
END_MESSAGE_MAP()

BOOL CMyApp::InitInstance()
{
    CMyFrame* pFrame = new CMyFrame;
    m_pMainWnd = pFrame;
    pFrame->Create(NULL, "Hello MFC");
    pFrame->ShowWindow(SW_SHOW);
    pFrame->UpdateWindow();
    return TRUE;
}

CMyApp theApp;

在上述代码中,我们定义了一个 CMyApp 类作为MFC程序的主类,它继承了 CWinApp 类。然后我们定义了一个 CMyFrame 类作为程序的主窗口,它继承了 CFrameWnd 类,同时也使用了宏 DECLARE_MESSAGE_MAP()BEGIN_MESSAGE_MAP() 宏定义了该类的消息映射表。

CMyApp 类的 InitInstance() 函数中,我们创建了一个 CMyFrame 对象,并将其作为主窗口。最后,我们通过调用 CFrameWnd::Create()CWnd::ShowWindow()CWnd::UpdateWindow() 函数来显示窗口。

MFC窗口和控件

MFC中,窗口和控件的创建和管理非常方便。在MFC中,CWnd 类和其派生类的对象都可以成为一个窗口或控件。以 CFrameWnd 为例,我们可以使用如下方法创建一个主窗口:

CMyFrame* pFrame = new CMyFrame;
m_pMainWnd = pFrame;
pFrame->Create(NULL, "Hello MFC");
pFrame->ShowWindow(SW_SHOW);
pFrame->UpdateWindow();

然后,我们可以在 CMyFrame 类中添加诸如按钮、文本框等控件:

class CMyFrame : public CFrameWnd
{
public:
    DECLARE_MESSAGE_MAP()

private:
    CButton m_btn;
    CEdit m_edit;
};

BEGIN_MESSAGE_MAP(CMyFrame, CFrameWnd)
END_MESSAGE_MAP()

BOOL CMyFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (!CFrameWnd::OnCreate(lpCreateStruct))
        return FALSE;

    m_btn.Create("Button", WS_CHILD | WS_VISIBLE, CRect(10, 10, 100, 30), this, 1000);
    m_edit.Create(WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT,
        CRect(10, 40, 100, 60), this, 1001);

    return TRUE;
}

上述代码中,我们使用了 CButton 类和 CEdit 类分别实例化了一个按钮控件和一个文本框控件,并使用 CWnd::Create() 方法创建了它们。

MFC消息处理

在MFC中,窗口和控件可以通过消息进行响应。当用户操作时,Windows会向窗口或控件发送消息,响应这些消息即可实现各种功能。

在MFC中,可以使用消息映射表(Message Map)实现消息处理。消息映射表是一个以 BEGIN_MESSAGE_MAP() 开始、 END_MESSAGE_MAP() 结束的代码块,通过向其中添加消息处理函数,即可响应各种消息。

下面是一个消息处理函数的示例:

class CMyFrame : public CFrameWnd
{
public:
    DECLARE_MESSAGE_MAP()

private:
    CButton m_btn;
    CEdit m_edit;

protected:
    afx_msg void OnButtonClick();
};

BEGIN_MESSAGE_MAP(CMyFrame, CFrameWnd)
    ON_BN_CLICKED(1000, OnButtonClick)
END_MESSAGE_MAP()

void CMyFrame::OnButtonClick()
{
    CString strText;
    m_edit.GetWindowText(strText);
    strText.MakeUpper();
    m_edit.SetWindowText(strText);
}

在上述代码中,我们使用 ON_BN_CLICKED 宏将按钮点击事件与一个成员函数 OnButtonClick() 绑定起来。当按钮被点击时,系统会向窗口发送一个 WM_COMMAND 消息,该消息被映射到 OnButtonClick() 函数中进行处理。

OnButtonClick() 函数中,我们使用 CEdit::GetWindowText() 方法获取文本框的内容,然后使用 CString::MakeUpper() 方法将内容转换为大写形式,最后再使用 CEdit::SetWindowText() 方法重新设置文本框的内容。

总结

本教程介绍了MFC的基本概念和使用方法。MFC框架提供了方便易用的窗口和控件创建方法,同时也支持消息处理,可以非常方便地实现各种功能。希望本教程对您有所帮助。