C++ MFC应用程序开发实例

C++ MFC应用程序开发实例

MFC:微软基础类(Microsoft Foundation Classes),同VCL类似,是一种应用程序框架,随微软Visual C++ 开发工具发布。作为Application Framework,MFC的使用只能提高某些情况下的开发效率,只起到辅助作用,而不能替代整个Win32 程序设计。

本次主要以Windows下Visual Studio 2019环境下如何搭建MFC应用开发环境,创建MFC项目以及实例程序来对C++ MFC应用程序开发来做一个归纳整理。

一、搭建开发环境

由于Visual Studio 2019在导入.NET 桌面程序开发工具和依赖的时候默认没有勾选MFC应用程序开发所需的“适用于最新v142 生成工具的C++ MFC(包括用于开发MFC应用程序的标头和库,包含多字节字符集)”,所以在新建项目时无法创建MFC应用程序。如下:

在勾选了“适用于最新v142 生成工具的C++ MFC”之后,重新启动Visual Studio 2019;满足MFC开发的条件,便可新建MFC 应用程序。如下:

至此,Windows下基于Visual Studio 2019的C++ MFC应用开发所需的环境基本配置完毕。

二、创建MFC程序

输入项目名称、选择项目存放位置,点击“确定”按钮。出现“MFC 应用程序 应用程序类型选项”对话框,选择“基于对话框”应用程序类型,这样,一个简单的MFC 对话框应用程序开发项目就已经建好。

三、MFC编程实例

(1)在窗体添加控件

右键点击窗体,选择添加变量,如下:

比如添加一个按钮(Button):

(2)修改属性以及添加对应函数

在添加完一个控件(按钮)之后,右键点击按钮选择属性,便可以编辑它的属性;双击按钮可以自动生成按钮的点击时间处理函数(没有定义按钮点击事件处理函数之前)。如下:

(3)程序文件说明

1)头文件***Dlg.h (***指项目名,下同)

主要定义和声明了对话框ID和主要的函数。

#ifdef AFX_DESIGN_TIME

enum { IDD = IDD_MULTITHREAD_DIALOG };

#endif

public: afx_msg void OnBnClickedButtonS(); afx_msg void OnBnClickedButtonM(); afx_msg void OnBnClickedButton3(); };

2)源文件***Dlg.cpp

主要实现了头文件中定义的函数,以及控件对应的事假处理函数。

void CMultiThreadDlg::OnBnClickedButtonM()

{

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

//DWORD startTime = GetTickCount();//计时开始

GetDlgItem(IDC_BUTTON_S)->EnableWindow(FALSE);

GetDlgItem(IDC_BUTTON_M)->EnableWindow(FALSE);

CDC* dc = GetDC();

CRect rt;

GetClientRect(rt);

dc->FillSolidRect(0, 0, rt.Width(), rt.Height() - 70, RGB(240, 240, 240));//刷新背景

dc->TextOut(97, 290, TEXT("Thread 1"));

dc->TextOut(277, 290, TEXT("Thread 2"));

dc->TextOut(457, 290, TEXT("Thread 3"));

//初始化线程的参数

Info[0].hWnd = Info[1].hWnd = Info[2].hWnd = GetSafeHwnd();

Info[0].nOffset = 10; Info[1].nOffset = 190; Info[2].nOffset = 370;

Info[0].clrRGB = RGB(255, 0, 0); Info[1].clrRGB = RGB(0, 255, 0); Info[2].clrRGB = RGB(0, 0, 255);

//创建线程

for (int i = 0; i < 3; i++)

{

hThead[i] = CreateThread(NULL, 0, ThreadProc, &Info[i], 0, &dwThreadID[i]);

}

ReleaseDC(dc);

//DWORD endTime = GetTickCount();//计时结束

//CString sTime;

//sTime.Format(_T("The run time is: %d 毫秒"), endTime - startTime);

//MessageBox(sTime);

//使能按钮

GetDlgItem(IDC_BUTTON_S)->EnableWindow(TRUE);

GetDlgItem(IDC_BUTTON_M)->EnableWindow(TRUE);

}

void CMultiThreadDlg::OnBnClickedButton3()

{

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

CRect rectDlg;

GetClientRect(rectDlg); // 得到客户区的位置和大小

//GetWindowRect(rectDlg);//获得窗体在屏幕上的位置大小

ScreenToClient(rectDlg);

CRect rectS, rectM;

GetDlgItem(IDC_BUTTON_S)->GetWindowRect(&rectS);//获取控件相对于屏幕的位置

ScreenToClient(rectS);//转化为对话框上的相对位置

GetDlgItem(IDC_BUTTON_M)->GetWindowRect(&rectM);//获取控件相对于屏幕的位置

ScreenToClient(rectM);//转化为对话框上的相对位置

}

3)资源文件***.rc下的Dialog文件夹下的IDD_***_DIALOG,即对话框(关掉对话框后双击这个文件就可以重新打开了)。

(4)运行效果

最后,整个项目我已经打包上传至个人gitlab:https://gitlab.com/JC_peng/mfc-demo;需要的自行下载。

相关推荐

资质的意思、解释和含义
365足球平台是合法的吗

资质的意思、解释和含义

📅 08-29 👁️ 773
网上贷款不还会怎么样
365足球平台是合法的吗

网上贷款不还会怎么样

📅 07-25 👁️ 1908
电脑硬盘连接主板的线怎么插 电脑硬盘线接法图解
365足球平台是合法的吗

电脑硬盘连接主板的线怎么插 电脑硬盘线接法图解

📅 08-15 👁️ 2855