ImageVerifierCode 换一换
格式:DOCX , 页数:38 ,大小:31.50KB ,
资源ID:17731068      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17731068.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VC编写串口调试助手含VC工程源文件Word下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

VC编写串口调试助手含VC工程源文件Word下载.docx

1、点击OK。项目创建完毕,进入项目。删除界面上确定和取消按钮以及静态文字。创建界面保存后便可以开始创建界面了。参考界面仿照设计的界面,具体添加按钮或编辑框等的布局步骤就不用细说了。图标修改在资源视图中选择Icon右键InsertIcon加入打开和关闭的Icon图标或自行绘制,如下图IDR_MAINFRAME原为MFC提供的图标,这里我直接改成自己的,生成EXE后将会显示这个图标。下面将帮助页面图标也改为自绘图标。在打开按钮旁边加入自绘的打开和关闭图标:先加入工具条中的Picture,然后选中右键看属性,并如图将Image选为默认的IDI_ICON_CLOSE。如下图基本设置下面对各个按钮及编辑框

2、设置进行描述右键串口对应的ComboBox,ID设置为IDC_COMLIST,Type设置为DropList,Sort不选择(我系统是WIN764位,不选中反而自动排序,至于XP得试试看了,以下的选择相同)。右键波特率对应的ComboBox,ID设置为IDC_BAUD,Type及Sort同上。右键数据位对应的ComboBox,ID设置为IDC_BDATA,Type及Sort同上。右键停止位对应的ComboBox,ID设置为IDC_BSTOP,Type及Sort同上。右键校验位对应的ComboBox,ID设置为IDC_CAL,Type及Sort同上。每个下拉框要点击右边的小箭头,然后将其拉长,不

3、然显示不出内容。接收EDIT框ID设置为IDC_EDIT_RX。发送EDIT框ID设置为IDC_EDIT_TX。自动发送时间间隔的EDIT框ID设置为IDC_EDIT_TIMER。选择文件后面的EDIT框ID设置为IDC_EDIT_FILEPATH。接收区的十六进制显示的CheckBox复选框ID设置为IDC_CHECK_HEXRX。发送区的十六进制发送的CheckBox复选框ID设置为IDC_CHECK_HEXTX。按钮“打开串口”ID设置为IDC_COMCONTROL。按钮“清空显示区”ID设置为IDC_BTN_CLRRX。按钮“手动发送”ID设置为IDC_BTN_HANDSEND。按钮“

4、清空发送区”ID设置为IDC_BTN_CLRTX。按钮“自动发送”ID设置为IDC_BTN_AUTOSEND。按钮“选择文件”ID设置为IDC_BTN_SELCTFILE。按钮“发送文件”ID设置为IDC_BTN_SENDFILE。开始写代码1.1. 基本思路:因为串口通信部分代码我可能用在以后的单片机上位机上,因此考虑单独形成CPP和H文件,定义为comm.cpp和comm.h。在comm.cpp中编写串口创建、打开、关闭以及串口监听线程(用于自动接收)的代码,同时加入进制转换或显示的函数,这些在comm.h文件中申明,在主对话框中包含comm.h即可。想修改按钮样式,在网上搜了一圈,结果不

5、轻松,最后确定创建新类来实现。1.2. 创建自定义按钮类:View-ClassWizard选择AddClass-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;/背景颜色 COLO

6、RREF m_LockForeColor;/锁定按钮的文字颜色 CRect m_ButRect; /按钮尺寸 CFont* p_Font;/字体 voidDrawButton(CDC*pDC); /画正常按钮/接口函数public: MyButton(); voidSetText(CStringstr); /设置文字 voidSetForeColor(COLORREFcolor); /设置文本颜色 voidSetBkColor(COLORREFcolor); /设置背景颜色 voidSetTextFont(intFontHight,LPCTSTRFontName); /设置字体在MyButto

7、n.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); /锁定按钮的文字颜色

8、p_Font=NULL; /字体指针用ClassWizard添加下列消息函数:PreSubclassWindow();DrawItem();onMouseMove();OnLButtonDown();OnLButtonUp();在各函数内加入代码:voidMyButton:PreSubclassWindow() /TODO:Addyourspecializedcodehereand/orcallthebaseclass ModifyStyle(0,BS_OWNERDRAW);/设置按钮属性为自画式 /PreSubclassWindow()在按钮创建前自动执行,所以我们可以在其中做一些初始工作。

9、 /这里只做了一项工作,就是为按钮设置属性为“自绘”式,这样,用户在添加按钮后,就不需设置“Ownerdraw”属性了。 CButton:DrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct)Addyourcodetodrawthespecifieditem CDC*pDC=CDC:FromHandle(lpDrawItemStruct-hDC);m_ButRect=lpDrawItemStruct-rcItem;/获取按钮尺寸if(m_strText.IsEmpty()GetWindowText(m_strText);/获取按钮文本intnSavedDC=pDC

10、-SaveDC();VERIFY(pDC);DrawButton(pDC);/绘制按钮pDC-RestoreDC(nSavedDC); /DrawItem()函数是一个关键函数,按钮的绘制工作就在这里进行,它的作用相当于对话框中的OnPaint()函数和视图中的OnDraw()函数。/这里我做了三项工作:获取按钮尺寸、获取按钮文本、绘制按钮。其中绘制工作在自定义函数DrawButton()中完成。以下就是绘制过程:DrawButton(CDC*pDC)/调整状态if(m_Style=3)m_Style=0;if(GetStyle()&WS_DISABLED)m_Style=3;/禁止状态/根据

11、状态调整边框颜色和文字颜色COLORREFbColor,fColor;/bColor为边框颜色,fColor为文字颜色switch(m_Style)case0:bColor=RGB(192,192,192);fColor=m_ForeColor;break;/正常按钮case1:bColor=RGB(255,255,255);/鼠标进入时按钮case2:fColor=m_MouseInColor;/按下的按钮case3:bColor=m_BackColor;fColor=m_LockForeColor;/锁定的按钮/绘制按钮背景CBrushBrush;Brush.CreateSolidBrus

12、h(m_BackColor);/背景刷SelectObject(&Brush);CPenPen;Pen.CreatePen(PS_SOLID,3,bColor);Pen);RoundRect(&m_ButRect,CPoint(10,10);/画圆角矩形/绘制按钮按下时的边框if(m_Style!=2)CRectRect;Rect.SetRect(m_ButRect.left+1,m_ButRect.top+1,m_ButRect.right,m_ButRect.bottom);DrawEdge(&Rect,BDR_RAISEDINNER,BF_RECT);/画边框/绘制按钮文字SetText

13、Color(fColor);/画文字SetBkMode(TRANSPARENT);DrawText(m_strText,&m_ButRect,DT_SINGLELINE|DT_CENTER|DT_VCENTER|DT_END_ELLIPSIS);/绘制拥有焦点按钮的虚线框if(GetFocus()=this)Rect.SetRect(m_ButRect.left+3,m_ButRect.top+2,m_ButRect.right-3,m_ButRect.bottom-2);DrawFocusRect(&Rect);/画拥有焦点的虚线框/变量m_Style表征当前按钮状态,它的取值为:0-正常,

14、1-当前,2-按下,3-锁定。不同状态下按钮的边框颜色和文字颜色有所不同。/m_Style的值在鼠标响应函数中进行修改。/绘制工作主要利用CDC类的绘图函数完成,主要注意在m_Style不同取值下表现出来的差别。OnLButtonDown(UINTnFlags,CPointpoint)Addyourmessagehandlercodehereand/orcalldefault m_Style=2;Invalidate();/重绘按钮OnLButtonDown(nFlags,point);/OnLButtonDown()函数是单击鼠标左键时的消息函数。这里只是重新绘制按钮,具体的单击响应应该在拥

15、有按钮的对话框或视图中进行。OnMouseMove(UINTnFlags,CPointpoint) if(!b_InRect|GetCapture()!=this)/鼠标进入按钮b_InRect=true;/设置进入标志SetCapture();/捕获鼠标m_Style=2; /m_Style=1;/设置按钮状态elseif(!m_ButRect.PtInRect(point)/鼠标离开按钮b_InRect=false;/清除进入标志ReleaseCapture();/释放捕获的鼠标m_Style=1;OnMouseMove(nFlags,point);/onMouseMove()函数是鼠标移

16、动消息函数,用于判定当前鼠标指针是否在按钮上。b_InRect是个标志,为true表示鼠标指针进入了按钮区域,/此时要捕获鼠标,让鼠标命令传送给按钮。当鼠标指针离开按钮时,要清除b_InRect标志,并且释放捕获的鼠标,让其它窗口可以接收鼠标命令。/Invalidate()函数用于更新按钮,它会自动调用DrawItem()函数重新绘制按钮。/设置条件的目的是仅在鼠标指针进入按钮和离开按钮时更新按钮,这样可以防止鼠标在按钮上移动时发生闪烁。OnLButtonUp(UINTnFlags,CPointpoint)OnLButtonUp(nFlags,point);/OnLButtonUp()函数是单

17、击鼠标左键后弹起时的消息函数。这里也只是重绘按钮,这样能使按钮在按下和弹起时有所不同,使按钮看上去有动态效果。/接口函数是用CMyButton类定义的按钮修改颜色、字体和按钮文字的接口,由以下函数组成:/设置按钮文本SetText(CStringstr)m_strText=_T(SetWindowText(str);/设置文本颜色SetForeColor(COLORREFcolor)m_ForeColor=color;/设置背景颜色SetBkColor(COLORREFcolor)m_BackColor=color;/设置字体(字体高度、字体名)SetTextFont(intFontHight

18、,LPCTSTRFontName)if(p_Font)deletep_Font;/删除旧字体p_Font=newCFont;p_Font-CreatePointFont(FontHight,FontName);/创建新字体SetFont(p_Font);/设置字体/由于新字体由new生成,必须显式回收,这项工作可以在CMyButton类的析构函数中进行:/*CMyButton:CMyButton()/删除字体*/这样一个可设置颜色、字体的按钮类就做好了。使用时,先在对话框中放置好按钮,再用ClassWizard为按钮添加控制变量,/并且将变量的类型设置为CMyButton。之后,可以用该变量调

19、用接口函数设置按钮颜色和字体。OK,自定义按钮完成。1.3. 实现过程及代码:现在可以对按钮,EDIT框等控件添加变量,文字描述麻烦,上图。comm.cpp编写内容如下#includestdafx.hcommassist.hcommassistDlg.hcomm.hcharConvertHexChar(charch);HANDLEhCom; /串口句柄CStringstrcomname; /串口名,如COM1boolComIsOK; /串口打开状态标识,为真表示已打开,否则未打开/=自动寻找串口函数=/函数功能:通过扫描注册表来找出当前所有物理串口/输入参数:无/返回类型:/说明:若搜索成功,

20、则每搜到一个串口便发送消息通知主对话框,并将串口号以WPARAM传递voidFindComm() /枚举当前系统中的串口 LONGresult=0; HKEYkey=NULL; result=RegOpenKeyEx(HKEY_LOCAL_MACHINE, /需要打开的主键的名称 HARDWAREDEVICEMAPSERIALCOMM, /需要打开的子键的名称,设备串口 0, /保留,必须设置为0 KEY_READ, /安全访问标记,也就是权限 &key); /得到的将要打开键的句柄,当不再需要句柄, /必须调用RegCloseKey关闭它 if(result) AfxMessageBox(无

21、法获取串口,请确认是否安装并连接串口! return; TCHARportname250; /串口名 TCHARdata250; DWORDportnamelen=0; /串口名长度 DWORDdatalen=0; intindex=0; while(1) /找完COM后跳出 portnamelen=255; datalen=255; result=RegEnumValue(key, /Long,一个已打开项的句柄,或者指定一个标准项名 index+, /Long,欲获取值的索引。注意第一个值的索引编号为零 portname, /String,用于装载位于指定索引处值名的一个缓冲区 &port

22、namelen, /Long,用于装载lpValueName缓冲区长度的一个变量。 /一旦返回,它会设为实际载入缓冲区的字符数量 NULL, /Long,未用;设为零 NULL, /Long,用于装载值的类型代码的变量 (LPBYTE)data, /Byte,用于装载值数据的一个缓冲区datalen); /Long,用于装载lpData缓冲区长度的一个变量。 if(result)break; /发送消息,WM_USER+1为自定义消息,即找到串口的,并将串口号COMx通过WPARAM参数传送给主对话框窗口 /:AfxGetMainWnd()-m_hWnd,获得主对话框句柄 /(WPARAM)(

23、LPCTSTR)data,类型转换 :SendMessage(:m_hWnd,WM_FOUNDCOMM,(WPARAM)(LPCTSTR)data,0); RegCloseKey(key); /调用RegCloseKey关闭打开键的句柄/=自动寻找串口函数结束=/=串口打开函数=/功能:打开串口,将已打开的串口句柄赋值给hCom,给出串口打开状态ComIsOK,完成串口状态设置波特率,数据位,停止位,校验位voidOpenComm(intnBaud,intnData,intnStop,intnCal) hCom=CreateFile(strcomname, /串口号 GENERIC_READ|GENERIC_WRITE, /允许读或写 0, /独占方式 NULL, OPEN_EXISTING, /打开而不是创建 FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,/重叠方式,用于异步通信 NULL); if(hCom=INVALID_HANDLE_VALUE)打开COM失败,串口不存在或已被占用! ComIsOK=false; ComIsOK=tru

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1