VC(MFC)编写串口调试助手.doc
《VC(MFC)编写串口调试助手.doc》由会员分享,可在线阅读,更多相关《VC(MFC)编写串口调试助手.doc(37页珍藏版)》请在咨信网上搜索。
1、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 - Pro
2、jects选择MFC AppWizard(exe),项目名称commassist选择OK选中Dialog based,点击Next 。默认选项,点击Next ,继续默认选项,点击Next ,如果选中As a statically linked library,生产的EXE可直接在没装VC的机器上运行。可以在项目中进行更改。选择第二个CCommassistDlg,点击Finish点击OK。项目创建完毕,进入项目。删除界面上确定和取消按钮以及静态文字。3. 创建界面保存后便可以开始创建界面了。参考界面仿照设计的界面,具体添加按钮或编辑框等的布局步骤就不用细说了。4. 图标修改在资源视图中选择Ico
3、n右键InsertIcon加入打开和关闭的Icon图标或自行绘制,如下图IDR_MAINFRAME原为MFC提供的图标,这里我直接改成自己的,生成EXE后将会显示这个图标。下面将帮助页面图标也改为自绘图标。在打开按钮旁边加入自绘的打开和关闭图标:先加入工具条中的Picture,然后选中右键看属性,并如图将Image选为默认的IDI_ICON_CLOSE。如下图5. 基本设置下面对各个按钮及编辑框设置进行描述右键串口对应的Combo Box,ID设置为IDC_COMLIST,Type设置为Drop List,Sort不选择(我系统是WIN7 64位,不选中反而自动排序,至于XP得试试看了,以下的
4、选择相同)。右键波特率对应的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。选择文件
5、后面的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。按钮“发送文
6、件”ID设置为IDC_BTN_SENDFILE。6. 开始写代码6.1. 基本思路:因为串口通信部分代码我可能用在以后的单片机上位机上,因此考虑单独形成CPP和H文件,定义为comm.cpp和comm.h。在comm.cpp中编写串口创建、打开、关闭以及串口监听线程(用于自动接收)的代码,同时加入进制转换或显示的函数,这些在comm.h文件中申明,在主对话框中包含comm.h即可。想修改按钮样式,在网上搜了一圈,结果不轻松,最后确定创建新类来实现。6.2. 创建自定义按钮类:View - Class Wizard选择Add Class - New,名字MyButton,基类选择CButton。
7、在头文件 MyButton.h 中加入以下变量和函数定义:private:intm_Style;/按钮形状(0-正常,1-当前,2-按下,3-锁定) boolb_InRect;/鼠标进入标志CStringm_strText;/按钮文字COLORREFm_ForeColor;/文本颜色COLORREFm_MouseInColor;/鼠标进入时文本颜色COLORREFm_BackColor;/背景颜色COLORREFm_LockForeColor; /锁定按钮的文字颜色CRectm_ButRect;/按钮尺寸CFont*p_Font; /字体void DrawButton(CDC *pDC);/画
8、正常按钮/ 接口函数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();/按钮文字(使
9、用默认文字)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();OnL
10、ButtonDown();OnLButtonUp();在各函数内加入代码:void MyButton:PreSubclassWindow() / TODO: Add your specialized code here and/or call the base classModifyStyle( 0, BS_OWNERDRAW ); /设置按钮属性为自画式/PreSubclassWindow()在按钮创建前自动执行,所以我们可以在其中做一些初始工作。/这里只做了一项工作,就是为按钮设置属性为“自绘”式,这样,用户在添加按钮后,就不需设置“Owner draw”属性了。CButton:PreSu
11、bclassWindow();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-Sa
12、veDC(); 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()
13、& 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); fC
14、olor = m_MouseInColor; break; /按下的按钮 case 3: bColor = m_BackColor; fColor = m_LockForeColor; break; /锁定的按钮 /绘制按钮背景 CBrush Brush; Brush.CreateSolidBrush( m_BackColor ); /背景刷 pDC-SelectObject( &Brush ); CPen Pen; Pen.CreatePen(PS_SOLID, 3, bColor ); pDC-SelectObject( &Pen ); pDC-RoundRect(&m_ButRect,C
15、Point(10,10); /画圆角矩形 /绘制按钮按下时的边框 if( m_Style!=2 ) CRect Rect; Rect.SetRect( m_ButRect.left+1, m_ButRect.top+1, m_ButRect.right, m_ButRect.bottom ); pDC-DrawEdge( &Rect, BDR_RAISEDINNER, BF_RECT ); /画边框 /绘制按钮文字 pDC-SetTextColor( fColor ); /画文字 pDC-SetBkMode( TRANSPARENT ); pDC-DrawText( m_strText, &m
16、_ButRect, DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_END_ELLIPSIS); /绘制拥有焦点按钮的虚线框 if( GetFocus()=this ) CRect Rect; Rect.SetRect( m_ButRect.left+3, m_ButRect.top+2, m_ButRect.right-3, m_ButRect.bottom-2 ); pDC-DrawFocusRect( &Rect ); /画拥有焦点的虚线框 /变量 m_Style 表征当前按钮状态,它的取值为:0-正常,1-当前,2-按下,3-锁定。不同状态下按钮
17、的边框颜色和文字颜色有所不同。/m_Style 的值在鼠标响应函数中进行修改。/绘制工作主要利用CDC类的绘图函数完成,主要注意在 m_Style 不同取值下表现出来的差别。void MyButton:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultm_Style = 2; Invalidate(); /重绘按钮CButton:OnLButtonDown(nFlags, point);/OnLButtonDown()函数是单击鼠标左键时的
18、消息函数。这里只是重新绘制按钮,具体的单击响应应该在拥有按钮的对话框或视图中进行。void MyButton:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultif( !b_InRect | GetCapture()!=this ) /鼠标进入按钮 b_InRect = true; /设置进入标志 SetCapture(); /捕获鼠标 m_Style = 2;/m_Style = 1; /设置按钮状态 Invalidate(); /重绘按钮
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC MFC 编写 串口 调试 助手
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。