面向小白的C语言教程(005)-创建MFC界面程序
创建MFC界面程序
1、创建MFC程序:
直接搜索MFC
030.png
如果搜索不到,那就是没安装,连上网络,找到你的Visual Studio Installer并打开,点击【修改】 —【使用C++的桌面开发】 — 【C++MFC for v142生成工具】,安装就可以了。
031.png
然后创建MFC程序,在【应用程序类型】里选择【基于对话框】,点击【完成】,这样就创建好了一个MFC程序,你可能还是看不到界面,进行以下操作:找到右边的文件目录,点开【资源文件】—找到以.rc结尾的文件,双击打开,打开Dialog,双击文件IDD_MFCAPPLICATION1_DIALOG:
032.gif
对其进行调试,会弹出一个空对话框, 只有确定和取消两个。
我们现在要实现一个功能,点击一个按钮打开Windows系统的计算器。
点击试图—工具箱—将button拖入到对话框中,点击button1按钮—找到右下角属性—外观—caption设置为【计算器】,我们调试一下,此时点击计算器是没有反应的:
033.gif
我们双击【计算器】按钮,会打开一个.cpp并定位到一行函数上,这个文件里的代码就是MFC对话框的实现代码,具体怎么实现的,现在不需要理解。定位到的那一行函数就是你点击那个按钮将会触发执行的函数,可以看到函数体是空的,所以刚才点击的时候没有反应。此时我们需要在函数体中添加一些代码:
void CMFCApplicationDlg::OnBnClickedButton1()
{
#include<stdlib.h>
system("calc");
// TODO: 在此添加控件通知处理程序代码
}
再次调试:
034.gif
这意味着一个按钮可以触发任何DOS命令。
例如我想打开QQ,关闭QQ:
035.png
void CMFCApplicationDlg::OnBnClickedButton2()
{
system("E:\\QQ\\Bin\\QQScLauncher.exe");//
// TODO: 在此添加控件通知处理程序代码
}
void CMFCApplicationDlg::OnBnClickedButton3()
{
system("taskkill /f /im QQ.exe");
// TODO: 在此添加控件通知处理程序代码
}
调试结果:
036.gif
还可以打开浏览器并指定网址(此例打开火狐指定百度地址):
void CMFCApplicationDlg::OnBnClickedButton4()
{
system("E:\\Firefox\\firefox.exe https://www.baidu.com");
// TODO: 在此添加控件通知处理程序代码
}
037.gif
介绍一个符号:&,此符号可用于指令并行。
如果我们设置一个查看进程的按钮,即
void CMFCApplicationDlg::OnBnClickedButton5()
{
system("tasklist");
// TODO: 在此添加控件通知处理程序代码
}
会发现窗口一闪而过,这是指令执行完自动关闭了。你可能会觉得在后面接一行system(“pause”)
就可以了,但你调试之后会发现,加了暂停指令,执行完查看进程的指令后窗口仍然会关掉,然后再打开一个新的窗口执行system(“pause”)
,此时程序暂停,等待手动关闭。
我们要这样写才可以,
void CMFCApplicationDlg::OnBnClickedButton5()
{
system("tasklist & pause");
// TODO: 在此添加控件通知处理程序代码
}
这意味着&(and)两边的指令在一个窗口中并行。我们还可以用此方式将进程信息导入到文本文件中并打开文件,还可以查看这个程序本身的源代码,改变CMD窗口的标题和颜色等一切可以用DOS命令实现的功能都可以实现。
这里不一一演示。
讲一下什么是同步(阻塞)状态什么是异步状态:
我们写以下代码:
#include<stdlib.h>
void main(){
system("notepad");
system("notepad");
system("notepad");
}
调试的时候你不会看到三个被同时打开的记事本,而是关掉一个,才会打开下一个,这件同步状态,也叫阻塞状态。我们改一下代码:
#include<stdlib.h>
void main(){
system("start notepad");
system("start notepad");
system("start notepad");
}
再次调试就会看到三个同时打开的记事本,这叫异步状态,即不需要关闭前一个就可以直接打开下一个。
关注微信公众号axxd_lz回复【C语言】获取视频教程和电子书。