使用MFC简单开发一个解析海康rtsp地址的小程序

使用MFC简单开发一个解析海康rtsp地址的小程序,第1张

前言

前天刚学习了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);

新建对话框标题:
在资源视图属性那里更改,很方便。

更改后如图:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/2990423.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-23
下一篇 2022-09-23

发表评论

登录后才能评论

评论列表(0条)

保存