我是基于对话框的mfc。在主对话框里添加菜单,单击一个菜单项弹出对应功能的对画框,在其中一个对话框添加的MSComm控件,编写了串口通信命令。现在想在其他对话框里也使用串口通信,要如何做呢?(每一个对话框新生一个类)
1条回答
关注 不知道你这个问题是否已经解决, 如果还没有解决的话:- 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/268140
- 你也可以参考下这篇文章:基于MFC的简单串口通信(针对单片机简单通信)
- 除此之外, 这篇博客: MFC串口操作一:显示串口输入信息中的 1、添加MFC相应消息事件:为了方便得到外面的信息:(因为我没有找到类向导之类直接导入这个事件的方法,直接填写代码也可以实现同样的功能) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
①注意:如果报错
则:将LONG改为LRESULT
①头文件中:
afx_msg LONG OnComm(WPARAM ch,LPARAM port);//自己手动添加的一个消息处理函数:为了有消息给MFC发送后,MFC有变化 //afx_msg LRESULT OnComm(WPARAM ch,LPARAM port);//LONG报错就使用LRESULT,自己手动添加的一个消息处理函数,为了有消息给MFC发送后,MFC有变化
②源文件中:
ON_MESSAGE(WM_COMM_RXCHAR,OnComm)
//使用配置文件中的:自定义输入串口信息长度 //LRESULT CFlashAndVideoDlg::OnComm(WPARAM ch,LPARAM port)//LONG报错就使用LRESULT,自己手动添加的一个消息处理函数,为了有消息给MFC发送后,MFC有变化 LONG CFlashAndVideoDlg::OnComm(WPARAM ch,LPARAM port) { int length=comMessageLength; str += ch; if (str.length()>=length) { int index= str.length() - length; if (str[index] == 0x55 && str[index+1] == ( char )0xaa ) { std::string pp = str.substr(index, length); m_SerialPortsend.WriteToPort((char *)pp.c_str(),length); char * tempstr = const_cast<char*>(pp.c_str()); std::string showstr; for (unsigned int i = 0; i<length;i++) { char buf[10] = {0}; unsigned char tempchar = tempstr[i]; sprintf_s(buf, 10,"%02x ",tempchar); showstr += buf; showstr += " "; } SetDlgItemText(IDC_EDIT1, (CString)showstr.c_str()); str.clear(); } } return 0; }
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报
悬赏问题
- ¥15 关于#hadoop#的问题
- ¥15 (标签-Python|关键词-socket)
- ¥15 keil里为什么main.c定义的函数在it.c调用不了
- ¥50 切换TabTip键盘的输入法
- ¥15 可否在不同线程中调用封装数据库操作的类
- ¥15 微带串馈天线阵列每个阵元宽度计算
- ¥15 keil的map文件中Image component sizes各项意思
- ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
- ¥15 划分vlan后,链路不通了?
- ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据