VS2019MFC开发全指南

发布时间:2023-05-18

一、简介

VS2019MFC是一种Windows桌面应用程序开发框架。它提供了一组可重用的C类库,可以快速开发功能强大的GUI应用程序,包括对话框、菜单、工具条、多文档接口等。 VS2019MFC是一种适用于C程序员的框架,但是它也可以通过集成开发环境Visual Studio(以下简称VS)的设计工具进行开发。这种方式可以提高开发效率,让开发过程更加直观。

二、创建VS2019MFC应用程序

1、使用VS的向导创建一个新的MFC应用程序。 2、在新项目向导中,选择MFC Application类型,命名应用程序,然后选择文档/视图集成模式。 3、选择所需的特性,例如多文档视图(MDI)或单文档视图(SDI)。

三、MFC应用程序的结构

1、CWinApp类:控制应用程序的整体行为。它是应用程序的入口点。 2、CMainFrame类:主窗口,控制应用程序的主要界面。 3、CDocument类:文档类,管理应用程序的数据。每个文档都有一个相关联的视图。 4、CView类:视图类,处理显示文档数据的窗口。 5、CDialog类:对话框类,提供一个用于显示和收集用户信息的窗口。

四、MFC控件和类

1、CButton:按钮控件。 2、CEdit:文本框控件。 3、CListCtrl:列表控件。 4、CComboBox:组合框控件。 5、CScrollBar:滚动条控件。

五、实现一个简单的VS2019MFC应用程序

下面是一个简单的VS2019MFC程序的代码。这个程序使用一个CButton控件和一个CEdit控件。用户点击按钮后,文本框中的内容将被清除。

// MyMfcAppDlg.h file
class CMyMfcAppDlg : public CDialogEx
{
public:
    CMyMfcAppDlg(CWnd* pParent = nullptr);
// Dialog Data
#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_MYMFCA_APP_DIALOG };
#endif
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
// Implementation
protected:
    HICON m_hIcon;
    CButton m_btnClearText;
    CEdit m_editText;
    virtual BOOL OnInitDialog();
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnClickedBtnClearText();
};
// MyMfcAppDlg.cpp file
CMyMfcAppDlg::CMyMfcAppDlg(CWnd* pParent /*=nullptr*/)
    : CDialogEx(IDD_MYMFCA_APP_DIALOG, pParent)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMyMfcAppDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_BUTTON1, m_btnClearText);
    DDX_Control(pDX, IDC_EDIT1, m_editText);
}
BOOL CMyMfcAppDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();
    SetIcon(m_hIcon, TRUE);             // Set big icon
    SetIcon(m_hIcon, FALSE);            // Set small icon
    // Connect the clear button to an event handler.
    m_btnClearText.SetWindowText(_T("Clear"));
    m_btnClearText.SetFont(GetFont());
    m_btnClearText.ShowWindow(SW_SHOW);
    m_btnClearText.EnableWindow(TRUE);
    m_btnClearText.SetDlgCtrlID(IDOK);
    m_btnClearText.SetFocus();
    m_btnClearText.SetDefault(TRUE);
    return TRUE;
}
void CMyMfcAppDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // device context for painting
        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
        // Center icon in client rectangle
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;
        // Draw the icon
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialogEx::OnPaint();
    }
}
HCURSOR CMyMfcAppDlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
}
BEGIN_MESSAGE_MAP(CMyMfcAppDlg, CDialogEx)
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDOK, &CMyMfcAppDlg::OnClickedBtnClearText)
END_MESSAGE_MAP()
void CMyMfcAppDlg::OnClickedBtnClearText()
{
    m_editText.SetWindowText(_T(""));
}

六、总结

VS2019MFC是一种强大的桌面应用程序开发框架,它提供了一组可重用的C类库和开发工具,可以快速开发Windows应用程序。本文对VS2019MFC的结构、控件和实现方法进行了详细介绍,希望对C程序员们有所帮助。