概述
关于mfc实现串口通信学习过程
1.总体分析
- 如何打开串口
- 如何枚举可用串口
- mfc的基本对话框的设计
- 相关控件关联的函数
1.打开串口需要使用achive插件“Microsoft communication control",事先预习好mscomm控件的用法和函数的相关说明。
void CserialDlg::OnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
if(m_Comm1.get_PortOpen())
m_Comm1.put_PortOpen(FALSE);
m_Comm1.put_CommPort(com);
m_Comm1.put_InBufferSize(1024);
m_Comm1.put_OutBufferSize(1024);
m_Comm1.put_Settings(_T("9600,n,8,1"));
m_Comm1.put_InputMode(1);
m_Comm1.put_RThreshold(1);
m_Comm1.put_InputLen(0);
if(!m_Comm1.get_PortOpen())
m_Comm1.put_PortOpen(TRUE);
else
MessageBox(_T("cannot open serial port"),_T("提示"));
m_Comm1.get_Input();
UpdateData(false);
}
注意:vc++中mscomm的方法名和vs2010中的不同。
2.通过注册表枚举出电脑里可用的串口号。
BOOL CserialDlg::GetSystemSerialComport() //获取计算机中的所有串口
{
HKEY hKey=NULL;
CArray<CString,CString> comarray;
comarray.RemoveAll();
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("HARDWARE\DEVICEMAP\SERIALCOMM"),0,KEY_READ,&hKey)!=ERROR_SUCCESS)
{
return FALSE;
}
CString valuename=_T("");
CString databuffer=_T("");
DWORD valuenamebufferlength=200;
DWORD valuetype=0;
DWORD databuddersize=200;
int i=0;
while(RegEnumValue(hKey,i++,valuename.GetBuffer(200),&valuenamebufferlength,NULL,&valuetype,(BYTE*)databuffer.GetBuffer(200),&databuddersize)!= ERROR_NO_MORE_ITEMS)
{
comarray.Add(CString(databuffer));
databuddersize=200;
valuenamebufferlength=200;
}
if(comarray.GetSize()==0)
{
MessageBox(_T("本计算机中没有可用的串口"),_T("提示"));
return FALSE;
}
for(int i=0;i<comarray.GetSize();i++)
{
((CComboBox *)GetDlgItem(IDC_COMBO1))->InsertString(i,comarray[i]);
}
((CComboBox *)GetDlgItem(IDC_COMBO1))->SetCurSel(0);//默认选择第一个串口
RegCloseKey(hKey);
return TRUE;
}
注意:该函数里的如何操作注册表进行枚举串口的过程自行百度了解(RegEnumValue()和RegOpenKeyEx())
3.有关其他插件的消息函数比较简单就不列出
注意:
*在combox的消息处理函数中要注意变量的类型,以及传递的过程中的类型的转换
*设置全局变量进行传递串口号
*枚举产生的类型是CString
效果图:
文章表达不全,多多指正
最后
以上就是飘逸毛巾为你收集整理的MScomm关于mfc实现串口通信学习过程的全部内容,希望文章能够帮你解决MScomm关于mfc实现串口通信学习过程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复