第一范文网 - 专业文章范例文档资料分享平台

纯业余者用VC(MFC)编写串口调试助手(含VC6工程源文件)

来源:用户分享 时间:2025/5/21 4:56:17 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

} } CButton::OnMouseMove(nFlags, point); }

//onMouseMove()函数是鼠标移动消息函数,用于判定当前鼠标指针是否在按钮上。b_InRect是个标志,为true表示鼠标指针进入了按钮区域, //此时要捕获鼠标,让鼠标命令传送给按钮。当鼠标指针离开按钮时,要清除b_InRect标志,并且释放捕获的鼠标,让其它窗口可以接收鼠标命令。

//Invalidate()函数用于更新按钮,它会自动调用DrawItem()函数重新绘制按钮。

//设置条件的目的是仅在鼠标指针进入按钮和离开按钮时更新按钮,这样可以防止鼠标在按钮上移动时发生闪烁。

void MyButton::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default m_Style = 1;

Invalidate(); //重绘按钮 CButton::OnLButtonUp(nFlags, point); }

//OnLButtonUp()函数是单击鼠标左键后弹起时的消息函数。这里也只是重绘按钮,这样能使按钮在按下和弹起时有所不同,使按钮看上去有动态效果。

//接口函数是用 CMyButton类 定义的按钮修改颜色、字体和按钮文字的接口,由以下函数组成:

//设置按钮文本

void MyButton::SetText(CString str) {

m_strText = _T(\ SetWindowText(str); }

//设置文本颜色

void MyButton::SetForeColor(COLORREF color) {

m_ForeColor = color; Invalidate(); }

//设置背景颜色

void MyButton::SetBkColor(COLORREF color) {

第 13 页 共 39 页

m_BackColor = color; Invalidate(); }

//设置字体(字体高度、字体名)

void MyButton::SetTextFont(int FontHight,LPCTSTR FontName) {

if ( p_Font ) delete p_Font; //删除旧字体 p_Font = new CFont;

p_Font->CreatePointFont( FontHight, FontName ); //创建新字体 SetFont( p_Font ); //设置字体 }

///由于新字体由 new 生成,必须显式回收,这项工作可以在 CMyButton类 的析构函数中进行:

/*CMyButton::~CMyButton() {

if ( p_Font ) delete p_Font; //删除字体 } */

//这样一个可设置颜色、字体的按钮类就做好了。使用时,先在对话框中放置好按钮,再用 ClassWizard 为按钮添加控制变量,

//并且将变量的类型设置为 CMyButton。之后,可以用该变量调用接口函数设置按钮颜色和字体。

OK,自定义按钮完成。

6.3. 实现过程及代码:

现在可以对按钮,EDIT框等控件添加变量,文字描述麻烦,上图。

第 14 页 共 39 页

comm.cpp编写内容如下 #include \

#include \#include \#include \

char ConvertHexChar(char ch); HANDLE hCom; //串口句柄 CString strcomname; //串口名,如\bool ComIsOK; //串口打开状态标识,为真表示已打开,否则未打开 //============自动寻找串口函数================================= //函数功能:通过扫描注册表来找出当前所有物理串口 //输入参数:无 //返回类型:无

//说 明:若搜索成功,则每搜到一个串口便发送消息通知主对话框,并将串口号以WPARAM传递 void FindComm() { //枚举当前系统中的串口 LONG result = 0; HKEY key = NULL; result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, //需要打开的主键的名称 \ARE\\\\DEVICEMAP\\\\SERIALCOMM\//需要打开的子键的名称,设备串口 0, //保留,必须设置为0 KEY_READ, //安全访问标记,也就是权限 &key); //得到的将要打开键的句柄,当不再需要句柄, //必须调用 RegCloseKey 关闭它 if( result ) { AfxMessageBox(\无法获取串口,请确认是否安装并连接串口!\

第 15 页 共 39 页

return; } TCHAR portname[250]; //串口名 TCHAR data[250]; DWORD portnamelen = 0; //串口名长度 DWORD datalen = 0; int index = 0; while(1) //找完COM后跳出 { portnamelen = 255; datalen = 255; result = RegEnumValue(key, //Long,一个已打开项的句柄,或者指定一个标准项名 index++, //Long,欲获取值的索引。注意第一个值的索引编号为零 portname, //String,用于装载位于指定索引处值名的一个缓冲区 &portnamelen, //Long,用于装载lpValueName缓冲区长度的一个变量。 //一旦返回,它会设为实际载入缓冲区的字符数量 NULL, //Long,未用;设为零 NULL, //Long,用于装载值的类型代码的变量 (LPBYTE)data, //Byte,用于装载值数据的一个缓冲区 &datalen); //Long,用于装载lpData缓冲区长度的一个变量。 //一旦返回,它会设为实际载入缓冲区的字符数量 if( result ) break; //发送消息,WM_USER+1为自定义消息,即找到串口的,并将串口号\通过WPARAM参数传送给主对话框窗口 //::AfxGetMainWnd()->m_hWnd,获得主对话框句柄 //(WPARAM)(LPCTSTR)data,类型转换 ::SendMessage(::AfxGetMainWnd()->m_hWnd,WM_FOUNDCOMM,(WPARAM)(LPCTSTR)data,0); } RegCloseKey(key); //调用 RegCloseKey 关闭打开键的句柄 }

//============自动寻找串口函数结束==================

//==========串口打开函数===========================

//功 能:打开串口,将已打开的串口句柄赋值给hCom,给出串口打开状态ComIsOK,完成串口状态设置

第 16 页 共 39 页

纯业余者用VC(MFC)编写串口调试助手(含VC6工程源文件).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c1n1nn3aocx55mbv22qnx_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top