前天刚学习了MFC开发,就按网上的教程写了一个解析海康rtsp地址的小程序,解析的信息主要是用户名、密码、端口号以及管道号。开发工具是VS2019,下面我会详细介绍如何一步步开发MFC,真纯小白教学,因为俺也是刚学哈哈哈。所以会尽量一步步教大家,希望能对你们有所帮助。
开发MFC前准备开发MFC程序前需要对MFC有了大致的了解,首先是怎样新建一个MFC项目,以及对开发MFC一些其他知识有一个了解。下面是需要做的一些准备知识。
新建一个MFC项目1.打开VS2019,创建新项目----》 选择MFC应用—》输入项目名称—》
创建
2.选择 基于对话框—》一直选择下一步直到完成
3.创建完成来到该界面
下面认识一下开发MFC需要的几种视图。分别是类视图(方便开发过程中寻找类)、资源视图(方便绘制MFC界面以及调整界面)以及我们大家熟悉默认的解决方案资源管理视图。
如果没出现可以按以下方法调出类视图。
下面讲解如何在资源视图下搭建一个MFC界面,讲解工具箱以及一些控件。首先进入资源视图,打开Dialog文件夹,点击DD_MFC10_DIALOG,出现以下界面
鼠标点击出现的对话框,右击属性会出现该对话框的一些信息。
鼠标选中对话框后,可以点击最左面的工具箱,调出MFC控件。
然后就可以拖动这些控件到对话框中,我就拖动了Button、Edit Control、以及Static Text三个常用的控件。
下面就开始进入一个实际开发。
首先搭建两个界面,一个是解析界面,一个是解析完成输出界面。
首先是解析界面:
按上面的流程走,先拖进来三个常用的控件Button、Edit Control、以及Static Text。
然后更改控件的名字。点击拖进来的Static Text,右击属性更改描述文字为URL,也可点击直接修改。
点击Edit Control,右击属性,更改ID为IDC_EDIT_URL,右击示例编辑框—》添加变量,按下图设置。
更改Button1为解析。
点击TODO:XXXX,属性可见选为false.
下面添加第二个界面即显示界面:
打开资源视图,右击Dialog,插入Dialog。在出现的对话框右击属性,更改ID为IDD_DIALOG_PARSE,如图
然后为该对话框添加类,右击对话框,添加类,类名为CDlgParse。如下图:
然后就是添加界面的信息如下:
分别修改对应实例编辑器ID为IDC_EDIT_IP、IDC_EDIT_PORT、IDC_EDIT_USER、IDC_EDIT_PSD,同时添加相应的变量如下图
下面就是关联这两个界面,在解决方案视图找到MFCXXXDlg.cpp,在头文件中添加我们刚才新建对话框的头文件。
#include "CDlgParse.h"
如下图:
在资源视图找到我们的解析界面,双击 解析 按钮,会转到点击该按钮会发生的 *** 作,我们加入如下代码:
CDlgParse dlg;
dlg.DoModal();
重新生成解决方案然后运行。可以出现以下界面:
点击解析跳到如下界面,说明咱们MFC框架搭好了,下面是如何实现功能。
在MFC10Dlg.cpp文件内添加如下头文件和代码:
#include
#include
using namespace std;
//匹配用户名,密码,IP,端口
const std::string strHKCameraReg = "rtsp://(.*):(.*)@(\d{1,3}).(\d{1,3}).(\d{1,3}).(\d{1,3}):(\d+)";
//匹配用户名,密码,IP,端口默认554
const std::string strHKCameraRegNoPort = "rtsp://(.*):(.*)@(\d{1,3}).(\d{1,3}).(\d{1,3}).(\d{1,3})";
//匹配IP,端口
const std::string strCarReg = "(\d{1,3}).(\d{1,3}).(\d{1,3}).(\d{1,3}):(\d+)";
添加后效果如图:
在OnBnClickedButton1()函数内添加下列代码:
void CMFC10Dlg::OnBnClickedButton1()
{
CString strUrl;
// TODO: 在此添加控件通知处理程序代码
string user, psd, ip;
int port;
GetDlgItem(IDC_EDIT_URL)->GetWindowText(strUrl);//获取URL输入框内的信息存入strUrl,类型是CString.
string url = strUrl.GetBuffer();//CString转为string
port = 554;
smatch result;
regex reg_HKCameraReg(strHKCameraReg);//正则表达式
//regex reg_CarReg(strCarReg);
regex reg_HKCameraRegNoPort(strHKCameraRegNoPort);
if (regex_search(url, result, reg_HKCameraReg))
{
//包含用户名,密码,IP,端口
user = result[1].str();
psd = result[2].str();
//IP
ip = result[3].str() + "." + result[4].str() + "." + result[5].str() + "." + result[6].str();
//Port
port = atoi(result[7].str().c_str());
CDlgParse dlg;//新建一个窗口对象
dlg.m_ip = psd.c_str();//string转化为CString
dlg.m_user = user.c_str();
dlg.m_psd = psd.c_str();
dlg.m_port.Format(_T("%d"), port);
dlg.DoModal();//打开一个新的窗口
}
if (regex_search(url, result, reg_HKCameraRegNoPort))
{
//包含用户名,密码,IP,端口
user = result[1].str();
psd = result[2].str();
//IP
ip = result[3].str() + "." + result[4].str() + "." + result[5].str() + "." + result[6].str();
//Port
port = 554;
CDlgParse dlg;
dlg.m_ip = psd.c_str();
dlg.m_user = user.c_str();
dlg.m_psd = psd.c_str();
dlg.m_port.Format(_T("%d"), port);
dlg.DoModal();
}
}
其中:
GetDlgItem(IDC_EDIT_URL)->GetWindowText(strUrl);
是从输入的URL里面获取数据,获取到的数据存入strUrl中,strUrl类型是CString.
完成!!
主页面对话框:
在对应对话框的初始化函数OnInitDialog()中添加如下代码:
CString title;
title.Format("%s", "解析");//在这里更改标题
this->SetWindowTextA(title);
新建对话框标题:
在资源视图属性那里更改,很方便。
更改后如图:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)