《VCMFC编写串口调试助手.pdf》由会员分享,可在线阅读,更多相关《VCMFC编写串口调试助手.pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 VCMFC 编写串口调试助手 集团标准化工作小组 Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN VC(MFC)编写串口调试助手 1.序 确定基本功能:1.自动寻找串口,并自动添加到下拉框中共选择;2.有波特率、数据位、停止位、校验位的选择设置;3.串口打开控制按钮;4.发送、清除按钮;5.接收是自动实现的;6.有定时自动发送功能;7.有传送文件功能;8.有状态栏显示,指示串口状态,设置参数和发送接收显示。下面就一步步实现,本人纯业余,只是记录下来这个学习过程,请勿拍砖。开发平台 Visual C+英文版,电脑是 i7-2670Q 四核 8G 内存 1G 独显的笔记本,装的 wi
2、n7 64 位旗舰版,因此 VC6 兼容不是太好,有些小毛病,不过不影响编写。2.创建 MFC 项目 File-New-Projects 选择 MFC AppWizard(exe),项目名称 commassist 选择 OK 选中 Dialog based,点击 Next。默认选项,点击 Next,继续默认选项,点击 Next,如果选中 As a statically linked library,生产的 EXE 可直接在没装 VC 的机器上运行。可以在项目中进行更改。选择第二个 CCommassistDlg,点击 Finish 点击 OK。项目创建完毕,进入项目。删除界面上确定和取消按钮以及
3、静态文字。3.创建界面 保存后便可以开始创建界面了。参考界面 仿照设计的界面,具体添加按钮或编辑框等的布局步骤就不用细说了。4.图标修改 在资源视图中选择 Icon 右键 InsertIcon 加入打开和关闭的 Icon 图标或自行绘制,如下图 IDR_MAINFRAME 原为 MFC 提供的图标,这里我直接改成自己的,生成 EXE 后将会显示这个图标。下面将帮助页面图标也改为自绘图标。在打开按钮旁边加入自绘的打开和关闭图标:先加入工具条中的 Picture,然后选中右键看属性,并如图将 Image 选为默认的 IDI_ICON_CLOSE。如下图 5.基本设置 下面对各个按钮及编辑框设置进行
4、描述 右键串口对应的 Combo Box,ID 设置为 IDC_COMLIST,Type 设置为 Drop List,Sort 不选择(我系统是 WIN7 64 位,不选中反而自动排序,至于 XP 得试试看了,以下的选择相同)。右键波特率对应的 Combo Box,ID 设置为 IDC_BAUD,Type 及 Sort 同上。右键数据位对应的 Combo Box,ID 设置为 IDC_BDATA,Type 及 Sort 同上。右键停止位对应的 Combo Box,ID 设置为 IDC_BSTOP,Type 及 Sort 同上。右键校验位对应的 Combo Box,ID 设置为 IDC_CAL,
5、Type 及 Sort 同上。每个下拉框要点击右边的小箭头,然后将其拉长,不然显示不出内容。接收 EDIT 框 ID 设置为 IDC_EDIT_RX。发送 EDIT 框 ID 设置为 IDC_EDIT_TX。自动发送时间间隔的 EDIT 框 ID 设置为 IDC_EDIT_TIMER。选择文件后面的 EDIT 框 ID 设置为 IDC_EDIT_FILEPATH。接收区的十六进制显示的 Check Box 复选框 ID 设置为 IDC_CHECK_HEXRX。发送区的十六进制发送的 Check Box 复选框 ID 设置为 IDC_CHECK_HEXTX。按钮“打开串口”ID 设置为 IDC_
6、COMCONTROL。按钮“清空显示区”ID 设置为 IDC_BTN_CLRRX。按钮“手动发送”ID 设置为 IDC_BTN_HANDSEND。按钮“清空发送区”ID 设置为 IDC_BTN_CLRTX。按钮“自动发送”ID 设置为 IDC_BTN_AUTOSEND。按钮“选择文件”ID 设置为 IDC_BTN_SELCTFILE。按钮“发送文件”ID 设置为 IDC_BTN_SENDFILE。6.开始写代码 6.1.基本思路:因为串口通信部分代码我可能用在以后的单片机上位机上,因此考虑单独形成 CPP和 H 文件,定义为和。在中编写串口创建、打开、关闭以及串口监听线程(用于自动接收)的代码
7、,同时加入进制转换或显示的函数,这些在文件中申明,在主对话框中包含即可。想修改按钮样式,在网上搜了一圈,结果不轻松,最后确定创建新类来实现。6.2.创建自定义按钮类:View-Class Wizard 选择 Add Class-New,名字 MyButton,基类选择CButton。在头文件 中加入以下变量和函数定义:private:int m_Style;xt)|*.txt|);if()=IDOK)/打开文件对话框 m_strFilePath=();/得到文件路经 else return;(m_strFilePath,CFile:modeRead|CFile:typeBinary);/打开这
8、个文件 (),();/读文件 ();if()=2048)AfxMessageBox(文件的长度超过 2k 字节!,MB_ICONINFORMATION);else m_strOut+=m_strFile;/文件内容加入发送框变量内 UpdateData(false);/更新发送框内容 ();双击“发送文件”按钮,编辑代码如下:void CCommassistDlg:OnBtnSendfile()/TODO:Add your control notification handler code here COMSTAT state;DWORD errors;CString sTemp;int iT
9、emp;ClearCommError(hCom,&errors,&state);/清除串口错误、得到当前状态 iTemp=();/写入串口的字符串长度,由 EDIT 控件内字符串数决定 iTemp+=iTemp;OnBtnHandsend();/调用发送函数 GetDlgItem(IDC_EDIT_FILEPATH)-SetDlgItemText(IDC_EDIT_FILEPATH,);UpdateData(false);/更新发送框内容;最后修改一下程序框的背景色或编辑框的文字颜色等,需要用到 OnCtlColor 函数,用 Class Wizard 添加函数 编辑代码如下:HBRUSH C
10、CommassistDlg:OnCtlColor(CDC*pDC,CWnd*pWnd,UINT nCtlColor)HBRUSH hbr=CDialog:OnCtlColor(pDC,pWnd,nCtlColor);/TODO:Change any attributes of the DC here if(nCtlColor=CTLCOLOR_DLG)/所有对话框 HBRUSH brush=CreateSolidBrush(RGB(220,250,250);return brush;if(nCtlColor=CTLCOLOR_STATIC)pDC-SetTextColor(RGB(50,50,
11、50);/pDC-SetBkColor(RGB(128,128,128);/设置文本背景色 /pDC-SetTextColor(RGB(55,55,66);pDC-SetBkMode(TRANSPARENT);/设置背景透明 switch(pWnd-GetDlgCtrlID()/针对 ID 为 IDC_CTL1、IDC_CTL2 和 IDC_CTL3 的控件进行同样的设置 case IDC_EDIT_RX:pDC-SetBkMode(TRANSPARENT);/背景色透明 pDC-SetTextColor(RGB(250,0,0);/设置字体颜色为红色 break;case IDC_EDIT_TX:pDC-SetBkMode(TRANSPARENT);/背景色透明 pDC-SetTextColor(RGB(0,0,255);/设置字体颜色为红色 /TODO:Return a different brush if the default is not desired return hbr;至此,大功告成。6.3.运行效果果
限制150内