好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

vc(mfc)编写串口调试助手.doc

37页
  • 卖家[上传人]:第***
  • 文档编号:34019394
  • 上传时间:2018-02-20
  • 文档格式:DOC
  • 文档大小:879KB
  • / 37 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第 1 页 共 37 页VC(MFC)编写串口调试助手1. 序确定基本功能:1.自动寻找串口,并自动添加到下拉框中共选择;2.有波特率、数据位、停止位、校验位的选择设置;3.串口打开控制按钮;4.发送、清除按钮;5.接收是自动实现的;6.有定时自动发送功能;7.有传送文件功能;8.有状态栏显示,指示串口状态,设置参数和发送接收显示下面就一步步实现,本人纯业余,只是记录下来这个学习过程,请勿拍砖开发平台 Visual C++6.0 英文版,电脑是 i7-2670Q 四核 8G 内存 1G 独显的笔记本,装的 win7 64 位旗舰版,因此 VC6 兼容不是太好,有些小毛病,不过不影响编写2. 创建 MFC 项目File -> New -> Projects 选择 MFC AppWizard(exe),项目名称 commassist第 2 页 共 37 页选择 OK选中 Dialog based,点击 Next> 第 3 页 共 37 页默认选项,点击 Next> ,继续默认选项,点击 Next> ,如果选中 As a statically linked library,生产的 EXE 可直接在第 4 页 共 37 页没装 VC 的机器上运行。

      可以在项目中进行更改选择第二个 CCommassistDlg,点击 Finish第 5 页 共 37 页点击 OK项目创建完毕,进入项目删除界面上确定和取消按钮以及静态文字第 6 页 共 37 页3. 创建界面保存后便可以开始创建界面了参考界面仿照设计的界面,具体添加按钮或编辑框等的布局步骤就不用细说了4. 图标修改在资源视图中选择 Icon 右键 InsertIcon 加入打开和关闭的 Icon 图标或自行绘制,如下图第 7 页 共 37 页IDR_MAINFRAME 原为 MFC 提供的图标,这里我直接改成自己的,生成 EXE 后将会显示这个图标下面将帮助页面图标也改为自绘图标在打开按钮旁边加入自绘的打开和关闭图标:先加入工具条中的 Picture,然后选中右键看属性,并如图将 Image 选为默认的 IDI_ICON_CLOSE如下图第 8 页 共 37 页5. 基本设置下面对各个按钮及编辑框设置进行描述右键串口对应的 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,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_COMCONTROL按钮“清空显示区”ID 设置为 IDC_BTN_CLRRX。

      按钮“手动发送”ID 设置为 IDC_BTN_HANDSEND按钮“清空发送区”ID 设置为 IDC_BTN_CLRTX按钮“自动发送”ID 设置为 IDC_BTN_AUTOSEND按钮“选择文件”ID 设置为 IDC_BTN_SELCTFILE按钮“发送文件”ID 设置为 IDC_BTN_SENDFILE6. 开始写代码6.1. 基本思路:因为串口通信部分代码我可能用在以后的单片机上位机上,因此考虑单独形成 CPP 和 H 文件,定义为 comm.cpp 和 comm.h在 comm.cpp 中编写串口创建、打开、关闭以及串口监听线程(用于自动接收)的代码,同时加入进制转换或显示的函数,这些在 comm.h 文件中申明,在主对话框中包含 comm.h 即可想修改按钮样式,在网上搜了一圈,结果不轻松,最后确定创建新类来实现第 9 页 共 37 页6.2. 创建自定义按钮类:View -> Class Wizard 选择 Add Class -> New,名字 MyButton,基类选择 CButton在头文件 MyButton.h 中加入以下变量和函数定义:private:int m_Style; //按钮形状(0-正常,1- 当前,2-按下, 3-锁定) bool b_InRect;//鼠标进入标志CString m_strText; //按钮文字COLORREF m_ForeColor;//文本颜色COLORREF m_MouseInColor;//鼠标进入时文本颜色COLORREF m_BackColor;//背景颜色COLORREF m_LockForeColor; //锁定按钮的文字颜色CRect m_ButRect; //按钮尺寸CFont* p_Font; //字体void DrawButton(CDC *pDC); //画正常按钮// 接口函数public:MyButton();void SetText(CString str); //设置文字void SetForeColor(COLORREF color);//设置文本颜色void SetBkColor(COLORREF color); //设置背景颜色void SetTextFont(int FontHight,LPCTSTR FontName); //设置字体在 MyButton.cpp 的构造函数中初始化变量:m_Style = 1; //m_Style = 0; //按钮形状风格b_InRect = false; //鼠标进入标志m_strText = _T(""); //按钮文字(使用默认文字)m_ForeColor = RGB(0,0,0); //文字颜色(黑色)m_MouseInColor = RGB(0,0,255); //鼠标进入时文字颜色 (蓝色)m_BackColor = RGB(230,230,230); //m_BackColor = RGB(243,243,243); //背景色(灰白色)m_LockForeColor = GetSysColor(COLOR_GRAYTEXT);//锁定按钮的文字颜色p_Font = NULL; //字体指针用 ClassWizard 添加下列消息函数:PreSubclassWindow();DrawItem();onMouseMove();OnLButtonDown();OnLButtonUp();在各函数内加入代码:第 10 页 共 37 页void MyButton::PreSubclassWindow() {// TODO: Add your specialized code here and/or call the base classModifyStyle( 0, BS_OWNERDRAW ); //设置按钮属性为自画式//PreSubclassWindow()在按钮创建前自动执行,所以我们可以在其中做一些初始工作。

      //这里只做了一项工作,就是为按钮设置属性为“自绘 ”式,这样,用户在添加按钮后,就不需设置“Owner draw”属性了CButton::PreSubclassWindow();}void MyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) {// TODO: Add your code to draw the specified itemCDC *pDC = CDC::FromHandle( lpDrawItemStruct->hDC );m_ButRect = lpDrawItemStruct->rcItem; //获取按钮尺寸if( m_strText.IsEmpty() )GetWindowText( m_strText ); //获取按钮文本int nSavedDC = pDC->SaveDC();VERIFY( pDC );DrawButton( pDC ); //绘制按钮pDC->RestoreDC( nSavedDC );}//DrawItem()函数是一个关键函数,按钮的绘制工作就在这里进行,它的作用相当于对话框中的 OnPaint()函数和视图中的 OnDraw()函数。

      //这里我做了三项工作:获取按钮尺寸、获取按钮文本、绘制按钮其中绘制工作在自定义函数 DrawButton()中完成以下就是绘制过程:void MyButton::DrawButton(CDC *pDC){//调整状态if( m_Style==3 ) m_Style = 0;if( GetStyle() & WS_DISABLED )m_Style = 3; //禁止状态//根据状态调整边框颜色和文字颜色COLORREF bColor, fColor; //bColor 为边框颜色, fColor 为文字颜色switch( m_Style ){case 0: bColor = RGB(192,192,192); fColor = m_ForeColor; break; //正常按钮case 1: bColor = RGB(255,255,255); fColor = m_ForeColor; break; //鼠标进入时按钮case 2: bColor = RGB(192,192,192); fColor = m_MouseInColor; break; //按下的按钮case 3: bColor = m_BackColor; fColor = m_LockForeColor; break; //锁定的按钮第 11 页 共 37 页}//绘制按钮背景CBrush Brush;Brush.CreateSolidBrush( m_BackColor ); //背景刷pDC->SelectObject( CPen Pen;Pen.CreatePen(PS_SOLID, 3, bColor );pDC->SelectObject( pDC->RoundRect( //画圆角矩形//绘制按钮按下时的边框if( m_Style!=2 ){CRect Rect;Rect.SetRect( m_ButRect.left+1, m_ButRect.top+1, m_ButRect.right, m_ButRect.bottom );pDC->DrawEdge( //画边框}//绘制按钮文字pDC->SetTextColor( fColor ); //画文字pDC->SetBkMode( TRANSPARENT );pDC->DrawText( m_strText, &m_ButRect, DT_SINGLELINE | DT_CENTER| DT_VCENTER | DT_END_ELLIPSIS);//绘制拥有焦点按钮的虚线框if( GetF。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.