MFC小项目:串口工具

项目1. 发送和接收器

//写简单的串发器
在这里插入图片描述
三个Button书写如下:

void CUartToolDlg::OnClickedButtonCreceive()
{
	// TODO: 在此添加控件通知处理程序代码
	m_receive.Empty();      
	UpdateData(FALSE);
}


void CUartToolDlg::OnClickedButtonCsend()
{
	// TODO: 在此添加控件通知处理程序代码
	m_send.Empty();  
	UpdateData(FALSE);
}


void CUartToolDlg::OnClickedButtonSend()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	m_receive += m_send;
	m_receive += "\r\n";
	UpdateData(FALSE);
}

关于UpdateData()函数

UpdateData(TRUE); 就是将控件相应数据保存到变量中,然后进行中间操作,然后UpdateData(FALSE); 就是将变量更新到控件中,控件就是edit control.

关于编辑框换行:

修改edit编辑框属性:
Auto HScroll 改为 False
MultiLine 改为 True
Want Return 改为True
然后字符串传入"\r\n"

// 生成模态对话框和非模态对话框

  1. 右键Source View资源视图的Dialog,点击插入Dialog,然后编辑你要弹出的对话框。我的编辑如下,就改了确认和取消。还有修改一下对话框的ID(我修改为IDD_TIP_DIALOG),我修改为CTipDlg.
    在这里插入图片描述

  2. 右键对话框,点击添加类,我命名为CTipDlg.

//下面是模态对话框的生成:

模板对话框就是那种你必须在此对话框进行操作,然后才能继续和其他对话框交互的一种对话框

  1. 打开UartToolDlg.cpp,在前面预编译引用CtipDlg头文件,然后在发送键的消息处理函数里编写如下代码
void CUartToolDlg::OnClickedButtonSend()
{
	// TODO: 在此添加控件通知处理程序代码
	CTipDlg tipDlg;			//生成一个CTipDlg对象tipDlg
	INT_PTR nRes;			// nRes用来保存DoModal()返回值
	nRes = tipDlg.DoModal();		//此步骤打开对话框
	if (nRes == IDCANCEL)      //如果对话框返回IDCANCEL,既对话框关闭
		return;
	UpdateData(TRUE);			//控件内容发送到变量
	m_receive += m_send;		
	m_receive += "\r\n";			//此步换行,
	UpdateData(FALSE);			//变量传回控件
}

效果:(点击发送之后)
在这里插入图片描述
点击确定之后(两次):
在这里插入图片描述
关于DoModal()函数

扫描二维码关注公众号,回复: 11934101 查看本文章

弹出对话框比较关键的一个函数,就是对话框类的DoModal()函数。CDialog::DoModal()函数的原型为:virtual INT_PTR DoModal();  
返回值: 整数值,指定了传递给CDialog::EndDialog(该函数用于关闭对话框)的nResult参数值。如果函数不能创建对话框,则返回-1;如果出现其它错误,则返回IDABORT。
调用了它对话框就会弹出,返回值是退出对话框时所点的按钮的ID,比如,我们点了“退出”按钮,那么DoModal返回值为IDCANCEL。

内部函数:
在这里插入图片描述

//下面是非模态对话框(把project关掉了…手写)

  1. 把之前在.cpp的预编译引进的头文件和消息处理函数里写的代码删掉或注释掉。
  2. UartToolDlg.h引入CTipDlg.h头文件,在构造函数里声明一个private: CTipDlg* tipDlg;指向类对象的指针,
    然后在CUartToolDlg.cpp的构造函数里初始化tipDlg(nullptr)
  3. 在消息处理函数里写入
void CUartToolDlg::OnClickedButtonSend()
{
	// TODO: 在此添加控件通知处理程序代码
	if(tipDlg == nullptr)			//判断有无有打开对话框
	{
		tipDlg = new CTipDlg;			//动态创建
		tipDlg->Create(IDD_TIP_DIALOG,this);  //生成对话框
	}
	tipDlg->ShowWindow(SW_SHOW); 		
	UpdateData(TRUE);			//控件内容发送到变量
	m_receive += m_send;		
	m_receive += "\r\n";			//此步换行,
	UpdateData(FALSE);			//变量传回控件
}

然后因为动态创建了CTipDlg对象,所以写一个析构函数

CTipDlg::~CTipDlg()   
{   
    // 如果非模态对话框已经创建则删除它   
    if (nullptr != tipDlg)   
    {   
        // 删除非模态对话框对象   
        delete tipDlg;   
    }   
}  

猜你喜欢

转载自blog.csdn.net/ZmJ6666/article/details/108859559