项目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"
// 生成模态对话框和非模态对话框
-
右键
Source View
资源视图的Dialog
,点击插入Dialog
,然后编辑你要弹出的对话框。我的编辑如下,就改了确认和取消。还有修改一下对话框的ID(我修改为IDD_TIP_DIALOG),我修改为CTipDlg
.
-
右键对话框,点击
添加类
,我命名为CTipDlg
.
//下面是模态对话框的生成:
模板对话框就是那种你必须在此对话框进行操作,然后才能继续和其他对话框交互的一种对话框
- 打开
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()
函数
弹出对话框比较关键的一个函数,就是对话框类的DoModal()函数。CDialog::DoModal()函数的原型为:
virtual INT_PTR DoModal();
返回值: 整数值,指定了传递给CDialog::EndDialog(该函数用于关闭对话框)的nResult参数值。如果函数不能创建对话框,则返回-1;如果出现其它错误,则返回IDABORT。
调用了它对话框就会弹出,返回值是退出对话框时所点的按钮的ID,比如,我们点了“退出”按钮,那么DoModal返回值为IDCANCEL。
内部函数:
//下面是非模态对话框(把project关掉了…手写)
- 把之前在.cpp的预编译引进的头文件和消息处理函数里写的代码删掉或注释掉。
- 在
UartToolDlg.h
引入CTipDlg.h
头文件,在构造函数里声明一个private: CTipDlg* tipDlg;
指向类对象的指针,
然后在CUartToolDlg.cpp的构造函数里初始化tipDlg(nullptr)
- 在消息处理函数里写入
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;
}
}