第一个MFC

 

转:https://www.ttin.top/2017/12/11/TT0008/

 

万事开头难!

步骤一:新建MFC项目

打开Visual Studio,文件–>新建–>项目,如图1所示:

第一个MFC_第1张图片图1
进入新建项目窗口后,左侧选择已安装–>模板–>Visual C++–>MFC,中间选择MFC应用程序,下方自由命名名称和选择新建项目位置,最后点击确定,如图2所示:

图2图2
确定后,选择MFC应用程序向导按如下图操作:

第一个MFC_第2张图片图3
图4图4
第一个MFC_第3张图片图5
图6图6
第一个MFC_第4张图片图7
图8图8
以上步骤完成后,进入图8的界面,至此,项目建立完成!

步骤二:对话框编辑

打开左侧工具箱–>对话框编辑器,如图9所示,

第一个MFC_第5张图片图9
删除对话框中确定按钮,从对话框编辑中拖一个Button和一个Edit Control到对话框中,将Button复制四份,Edit Control复制两份,如图10所示:

第一个MFC_第6张图片图10
调整好大小,放好位置,鼠标放在Button右键–>属性,在右下角属性栏的Caption修改按钮名,如图11所示:

第一个MFC_第7张图片图11

步骤三:设置变量与编程

鼠标放在Edit Control右键–>添加变量,设置前两个Edit Control变量为E1、E2,设置后一个Edit Control变量为E3,类型:Value,变量类型:float,变量名:E1,如图12所示:

第一个MFC_第8张图片图12

双击每一个控件,就进入主程序中,输入以下代码,运行(本地Windows调试器):

// MFConeDlg.cpp : 实现文件

//

#include "stdafx.h"

#include "MFCone.h"

#include "MFConeDlg.h"

#include "afxdialogex.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialogEx

{

public:

CAboutDlg();

// 对话框数据

#ifdef AFX_DESIGN_TIME

enum { IDD = IDD_ABOUTBOX };

#endif

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

// 实现

protected:

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)

{

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)

END_MESSAGE_MAP()

// CMFConeDlg 对话框

CMFConeDlg::CMFConeDlg(CWnd* pParent /*=NULL*/)

: CDialogEx(IDD_MFCONE_DIALOG, pParent)

, E2(0)

, E3(0)

, E1(0)

{

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CMFConeDlg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

DDX_Text(pDX, IDC_EDIT2, E2);

DDX_Text(pDX, IDC_EDIT3, E3);

DDX_Text(pDX, IDC_EDIT1, E1);

}

BEGIN_MESSAGE_MAP(CMFConeDlg, CDialogEx)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_BUTTON1, &CMFConeDlg::OnBnClickedButton1)

ON_BN_CLICKED(IDC_BUTTON2, &CMFConeDlg::OnBnClickedButton2)

ON_BN_CLICKED(IDC_BUTTON3, &CMFConeDlg::OnBnClickedButton3)

ON_BN_CLICKED(IDC_BUTTON4, &CMFConeDlg::OnBnClickedButton4)

ON_BN_CLICKED(IDC_BUTTON5, &CMFConeDlg::OnBnClickedButton5)

ON_EN_CHANGE(IDC_EDIT2, &CMFConeDlg::OnEnChangeEdit2)

ON_EN_CHANGE(IDC_EDIT1, &CMFConeDlg::OnEnChangeEdit1)

ON_EN_CHANGE(IDC_EDIT3, &CMFConeDlg::OnEnChangeEdit3)

ON_BN_CLICKED(IDCANCEL, &CMFConeDlg::OnBnClickedCancel)

END_MESSAGE_MAP()

// CMFConeDlg 消息处理程序

BOOL CMFConeDlg::OnInitDialog()

{

CDialogEx::OnInitDialog();

// 将“关于...”菜单项添加到系统菜单中。

// IDM_ABOUTBOX 必须在系统命令范围内。

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != NULL)

{

BOOL bNameValid;

CString strAboutMenu;

bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);

ASSERT(bNameValid);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动

// 执行此操作

SetIcon(m_hIcon, TRUE); // 设置大图标

SetIcon(m_hIcon, FALSE); // 设置小图标

ShowWindow(SW_MINIMIZE);

// TODO: 在此添加额外的初始化代码

return TRUE; // 除非将焦点设置到控件,否则返回 TRUE

}

void CMFConeDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout.DoModal();

}

else

{

CDialogEx::OnSysCommand(nID, lParam);

}

}

// 如果向对话框添加最小化按钮,则需要下面的代码

// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,

// 这将由框架自动完成。

void CMFConeDlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); // 用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0);

// 使图标在工作区矩形中居中

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;

// 绘制图标

dc.DrawIcon(x, y, m_hIcon);

}

else

{

CDialogEx::OnPaint();

}

}

//当用户拖动最小化窗口时系统调用此函数取得光标

//显示。

HCURSOR CMFConeDlg::OnQueryDragIcon()

{

return static_cast(m_hIcon);

}

void CMFConeDlg::OnBnClickedButton1()

{

// TODO: 在此添加控件通知处理程序代码

UpdateData(true);//从控件获得数据赋给变量

E3 = E1 + E2;

UpdateData(false);//输出变量的值到控件

}

void CMFConeDlg::OnBnClickedButton2()

{

// TODO: 在此添加控件通知处理程序代码

UpdateData(true);//从控件获得数据赋给变量

E3 = E1 - E2;

UpdateData(false);//输出变量的值到控件

}

void CMFConeDlg::OnBnClickedButton3()

{

// TODO: 在此添加控件通知处理程序代码

UpdateData(true);//从控件获得数据赋给变量

E3 = E1 * E2;

UpdateData(false);//输出变量的值到控件

}

void CMFConeDlg::OnBnClickedButton4()

{

// TODO: 在此添加控件通知处理程序代码

UpdateData(true);

if (E2 == 0)

{

MessageBox(_T("除数不能为零!"));

return;

}

E3 = E1 / E2;

UpdateData(false);

}

void CMFConeDlg::OnBnClickedButton5()

{

// TODO: 在此添加控件通知处理程序代码

E1 = 0;

E2 = 0;

E3 = 0;

UpdateData(false);

GotoDlgCtrl((CEdit*)GetDlgItem(IDC_EDIT1));//设置焦点在第一个编辑框

}

void CMFConeDlg::OnEnChangeEdit2()

{

// TODO: 如果该控件是 RICHEDIT 控件,它将不

// 发送此通知,除非重写 CDialogEx::OnInitDialog()

// 函数并调用 CRichEditCtrl().SetEventMask(),

// 同时将 ENM_CHANGE 标志“或”运算到掩码中。

// TODO: 在此添加控件通知处理程序代码

}

void CMFConeDlg::OnEnChangeEdit1()

{

// TODO: 如果该控件是 RICHEDIT 控件,它将不

// 发送此通知,除非重写 CDialogEx::OnInitDialog()

// 函数并调用 CRichEditCtrl().SetEventMask(),

// 同时将 ENM_CHANGE 标志“或”运算到掩码中。

// TODO: 在此添加控件通知处理程序代码

}

void CMFConeDlg::OnEnChangeEdit3()

{

// TODO: 如果该控件是 RICHEDIT 控件,它将不

// 发送此通知,除非重写 CDialogEx::OnInitDialog()

// 函数并调用 CRichEditCtrl().SetEventMask(),

// 同时将 ENM_CHANGE 标志“或”运算到掩码中。

// TODO: 在此添加控件通知处理程序代码

}

void CMFConeDlg::OnBnClickedCancel()

{

// TODO: 在此添加控件通知处理程序代码

CDialogEx::OnCancel();

}

打开刚刚的新建项目目录:MFCone/Debug里就有个MFCone.exe,点击运行就成功了,如图13

图13图13
完成喽!

 

你可能感兴趣的:(第一个MFC)