第 65 章
)InBufferCount 属xìng
该属xìng用于设置或返回在接收缓冲区中等待的字符数,该属xìng在端口未打开时不可用。
枫叶文学网www.fywxw.com
第11 章 网络编程
·323·
对应的函数为void SetInBufferCount(short nNewValue)和short GetInBufferCount()。
(7)InBufferSize 属xìng
该属xìng用于设置或返回接收缓冲区大小的字节数, 其对应的函数分别为void
SetInBufferSize(short nNewValue)和short GetInBufferSize()。
(8)Output 属xìng
该属xìng用于向发送缓冲区中写入数据,其对应的函数为void SetOutput(const VARIANT&
newValue)。
(9)OutBufferCount 属xìng
该属xìng用于设置或返回在发送缓冲区中等待的字符数,该属xìng在端口未打开时不可用。
其对应的函数分别为void SetOutBufferCount(short nNewValue)和short GetOutBufferCount()。
(10)OutBufferSize 属xìng
该属xìng用于设置或返回发送缓冲区的字节大小, 对应的函数分别为void
SetOutBufferSize(short nNewValue)和short GetOutBufferSize()。
(11)CommEvent 属xìng
该属xìng用于设置或返回串口事件,其对应的函数分别为void SetCommEvent(short
nNewValue)和short GetCommEvent()。常见的串口事件如表11-13 所示。
表11-13 常见串口事件
常数 取值 描述
ComEvSend 1 发送事件
ComEvReceive 2 接收事件
ComEvCTS 3 clear-to-send 线的状态发生变化
ComEvDSR 4 data-set ready 线的状态发生变化
ComEvCD 5 carrier detect 线的状态发生变化
ComEvRing 6 检测到震铃信号
ComEvEOF 7 收到文件结束字符
(12)RThreshold 属xìng
该属xìng用于设置或返回RThreshold 数值,所谓RThreshold 数值是通过MSComm 控件将
CommEvent 属xìng设置为ComEvReceive,并在产生OnComm 事件之前所接收的字符数。
该属xìng对应的函数为void SetRThreshold(short nNewValue)和short GetRThreshold()。
11.5.2 利用MSComm 控件编程的基本流程
利用MSComm 控件编程的基本流程如下。
? 在当前Project 中chā入MSComm 控件;
? 初始化并打开串口;
? 捕捉串口事项;
? 串口读写;
? 关闭串口。
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·324·
11.5.3 利用MSComm 进行串口通信
实例11-2:MSComm 控件使用实例。源代码在光盘中“\11\实例11-2\MSComm”目录下。
本节通过编写一个小程序来实现利用MSComm 控件进行串口数据传输。
新建一个基于对话框的MFC 工程,取名为MSComm。依次单击菜单栏的“Project”→
“Add To Project”→“Components and Controls”,弹出添加控件对话框,如图11-16 所示。然
后打开“Registered ActiveX Controls”文件夹,选中“Microsoft Communications Control,vision
6.0”控件,将其添加到工程中,如图11-17 所示。
图11-16 添加控件对话框 图11-17 加入MSComm 控件
然后编辑对话框界面,完成后的效果如图11-18 所示(本例中,用于选择串口的控件为
Combo Box 控件,在为对话框添加Combo Box 控件的时候,需要为该Combo Box 控件加入
1 和2 两个数据,分别表示串口1 和串口2),其中控件就是MSComm 控件。
注意:在为Combo Box 控件添加数据的时候,如果数据多于一个,则在添加后面数据的时候,要
按住Ctrl 键,同时按回车键进行换行,而不是直接用回车键进行换行。
图11-18 对话框界面
为对话框添加完控件后,需要设置各控件ID,并为其添加变量。各控件的ID 及其对应
的变量如表11-14 所示。
枫叶文学网www.fywxw.com
第11 章 网络编程
·325·
表11-14 各控件ID 及对应变量
控件 ID 变量
MSComm 控件 IDC_MSCOMM CMSComm m_Comm
接收数据Edit IDC_RECEIVEDATA CString m_Receive
发送数据Edit IDC_SENDDATA CString m_Send
选择串口下拉列表 IDC_COMBOLIST int m_Port(初始化为0)
打开串口按钮 IDC_OPENPORT 无
关闭串口按钮 IDC_CLOSTPORT 无
发送按钮 IDC_SEND 无
在文件“MSCommDlg.h”的头部加入语句#include "mscomm1.h",然后为对话框类加入
成员函数void InitComm(),来初始化MSComm 控件,其代码如下:
void CMSCommDlg::InitComm()
{
//设置串口
m_Comm.SetCommPort(m_Port+1);
// 设置数据读取格式为二进制方式
m_Comm.SetInputMode(1);
// 设置传输参数
m_Comm.SetSettings("9600,n,8,1");
//缓冲区内有一个字符就可以接收
m_Comm.SetRThreshold(1);
// 指定接收缓冲区大小
m_Comm.SetInBufferSize(1024);
//指定发送缓冲区大小
m_Comm.SetOutBufferSize(1024);
// 清空接收缓冲区
m_Comm.SetInBufferCount(0);
// 打开串口
if(!m_Comm.GetPortOpen())
{
m_Comm.SetPortOpen(TRUE);
}
}
当选择下拉列表中的端口时,会激发CBN_SELCHANGE 消息,为其添加响应函数,代
码如下:
void CMSCommDlg::OnSelchangeCombolist()
{
// TODO: Add your control notification handler code here
CString m_str;
//得到下拉列表内容
GetDlgItemText(IDC_COMBOLIST, m_str);
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·326·
//得到串口号
m_Port = atoi(LPCTSTR(m_str))-1;
}
为“打开串口”按钮添加响应函数,代码如下:
void CMSCommDlg::OnOpenport()
{
// TODO: Add your control notification handler code here
InitComm();
}
为“关闭串口”按钮添加响应函数,代码如下:
void CMSCommDlg::OnClostport()
{
// TODO: Add your control notification handler code here
if( m_Comm.GetPortOpen() )
{
// 关闭串口
m_Comm.SetPortOpen(0);
}
}
为“发送”按钮添加响应函数,代码如下:
void CMSCommDlg::OnSend()
{
// TODO: Add your control notification handler code here
//得到发送Edit 控件的数据
UpdateData(TRUE);
int Count=m_Send.GetLength();
//将发送数据传给m_Array
CByteArray m_Array;
m_Array.RemoveAll();
m_Array.SetSize(Count);
for(int i=0;i<Count;i++)
m_Array.SetAt(i,m_Send[i]);
//发送
m_Comm.SetOutput(COleVariant(m_Array));
m_Send = "";
UpdateData(FALSE);
}
对于数据的接收,应该利用MSComm 控件的OnComm 事件来处理。为其添加响应函数,
代码如下:
void CMSCommDlg::OnOnCommMscomm()
枫叶文学网www.fywxw.com
第11 章 网络编程
·327·
{
// TODO: Add your control notification handler code here
int nEvent;
VARIANT m_input;
char *str, *str1;
int k,i;
CString str2;
//得到事件
nEvent = m_Comm.GetCommEvent();
switch(nEvent)
{
//只对接收数据事件进行处理
case 2:
// 接收缓冲区的字符数目
k = m_Comm.GetInBufferCount();
if(k > 0)
{
//得到接收数据
m_input = m_Comm.GetInput();
str = (char*)(unsigned char*)m_input.parray->pvData;
}
//清除字符串中的不必要字符
i = 0;
str1 = str;
while(i < k)
{
i++;
str1++;
}
*str1 =’\0’;
str2 = (const char*)str;
//得到最终数据
m_Receive += (LPCTSTR)str2;
default:
break;
}
// 显示数据
UpdateData(FALSE);
}
至此,程序设计完成。运行两个程序,分别选择串口1 和串口2,然后收发数据,如图
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·328·
11-19 和图11-20 所示。
图11-19 串口发送数据 图11-20 串口接收数据
11.6 本章小结
本章介绍了网络编程的基本知识及基本步骤,并且详细介绍了WinSock 类。接着利用所
讲知识编程实现了一个网络聊天系统,最后利用MSComm 控件实现了简单的串口通信。相
信通过本章的学习,读者可以编写简单的网络应用程序,并会利用MSComm 控件进行简单
的串口数据传输。
枫叶文学网www.fywxw.com
第12 章 数据库开发
随着计算机技术的飞速发展,数据库的应用也越来越广泛。如今,数据库技术已经成为
计算机技术中的核心技术之一。本章首先简单介绍数据库的基本概念及用Visual C++ 6.0 进
行数据库开发的几种相关技术,然后介绍Access 数据库的建立和一些基本的SQL 语句,最
后通过一个具体的实例来详细说明ADO 技术在数据库开发中的应用。本章主要包括以下几
方面的内容:
? 数据库的基本概念及数据库的相关技术;
? Access 数据库的建立;
? 基本的SQL 语句;
? 如何利用ADO 技术进行数据库开发。
12.1 概述
数据库技术产生于20 世纪60 年代中期,是数据管理的最新技术,是计算机科学的重要
分支,它的出现极大的促进了计算机应用向各行业的渗透。本节将对数据库的概念,数据库
的相关技术以及如何开发数据库应用程序作一简单介绍。
12.1.1 数据库的基本概念
所谓数据库(Database,简称DB),就是长期存储在计算机内的、有组织的、可共享的
数据集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度,较高
的数据独立xìng和易扩展xìng,并可为各种用户共享。
有了数据和数据库,还要进行数据库的管理,不仅可以科学地组织这些数据并将其存储
在数据库中,而且还能高效地处理这些数据。数据库管理系统(Database Managcomnt System,
简称DBMS)是位于用户和cāo作系统之间的一层数据管理软件。数据库在建立、运用和维护
时由数据库管理系统统一管理、统一控制。数据库管理系统使用户能方便的定义数据和cāo纵
数据,并能够保证数据的安全xìng、完整xìng、多用户对数据并发使用以及发生故障后的系统恢
复。
在很多情况下,人们所说的数据库实际上指的是数据库系统。数据库系统(Database
System,简称DBS)是指在计算机系统中引入数据库后的系统构成,一般由数据库、数据库
管理系统(及其开发工具)、应用系统、数据库管理员和用户构成。
设计数据库的核心
松语文学免费小说阅读_www.16sy.com
该属xìng用于设置或返回在接收缓冲区中等待的字符数,该属xìng在端口未打开时不可用。
枫叶文学网www.fywxw.com
第11 章 网络编程
·323·
对应的函数为void SetInBufferCount(short nNewValue)和short GetInBufferCount()。
(7)InBufferSize 属xìng
该属xìng用于设置或返回接收缓冲区大小的字节数, 其对应的函数分别为void
SetInBufferSize(short nNewValue)和short GetInBufferSize()。
(8)Output 属xìng
该属xìng用于向发送缓冲区中写入数据,其对应的函数为void SetOutput(const VARIANT&
newValue)。
(9)OutBufferCount 属xìng
该属xìng用于设置或返回在发送缓冲区中等待的字符数,该属xìng在端口未打开时不可用。
其对应的函数分别为void SetOutBufferCount(short nNewValue)和short GetOutBufferCount()。
(10)OutBufferSize 属xìng
该属xìng用于设置或返回发送缓冲区的字节大小, 对应的函数分别为void
SetOutBufferSize(short nNewValue)和short GetOutBufferSize()。
(11)CommEvent 属xìng
该属xìng用于设置或返回串口事件,其对应的函数分别为void SetCommEvent(short
nNewValue)和short GetCommEvent()。常见的串口事件如表11-13 所示。
表11-13 常见串口事件
常数 取值 描述
ComEvSend 1 发送事件
ComEvReceive 2 接收事件
ComEvCTS 3 clear-to-send 线的状态发生变化
ComEvDSR 4 data-set ready 线的状态发生变化
ComEvCD 5 carrier detect 线的状态发生变化
ComEvRing 6 检测到震铃信号
ComEvEOF 7 收到文件结束字符
(12)RThreshold 属xìng
该属xìng用于设置或返回RThreshold 数值,所谓RThreshold 数值是通过MSComm 控件将
CommEvent 属xìng设置为ComEvReceive,并在产生OnComm 事件之前所接收的字符数。
该属xìng对应的函数为void SetRThreshold(short nNewValue)和short GetRThreshold()。
11.5.2 利用MSComm 控件编程的基本流程
利用MSComm 控件编程的基本流程如下。
? 在当前Project 中chā入MSComm 控件;
? 初始化并打开串口;
? 捕捉串口事项;
? 串口读写;
? 关闭串口。
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·324·
11.5.3 利用MSComm 进行串口通信
实例11-2:MSComm 控件使用实例。源代码在光盘中“\11\实例11-2\MSComm”目录下。
本节通过编写一个小程序来实现利用MSComm 控件进行串口数据传输。
新建一个基于对话框的MFC 工程,取名为MSComm。依次单击菜单栏的“Project”→
“Add To Project”→“Components and Controls”,弹出添加控件对话框,如图11-16 所示。然
后打开“Registered ActiveX Controls”文件夹,选中“Microsoft Communications Control,vision
6.0”控件,将其添加到工程中,如图11-17 所示。
图11-16 添加控件对话框 图11-17 加入MSComm 控件
然后编辑对话框界面,完成后的效果如图11-18 所示(本例中,用于选择串口的控件为
Combo Box 控件,在为对话框添加Combo Box 控件的时候,需要为该Combo Box 控件加入
1 和2 两个数据,分别表示串口1 和串口2),其中控件就是MSComm 控件。
注意:在为Combo Box 控件添加数据的时候,如果数据多于一个,则在添加后面数据的时候,要
按住Ctrl 键,同时按回车键进行换行,而不是直接用回车键进行换行。
图11-18 对话框界面
为对话框添加完控件后,需要设置各控件ID,并为其添加变量。各控件的ID 及其对应
的变量如表11-14 所示。
枫叶文学网www.fywxw.com
第11 章 网络编程
·325·
表11-14 各控件ID 及对应变量
控件 ID 变量
MSComm 控件 IDC_MSCOMM CMSComm m_Comm
接收数据Edit IDC_RECEIVEDATA CString m_Receive
发送数据Edit IDC_SENDDATA CString m_Send
选择串口下拉列表 IDC_COMBOLIST int m_Port(初始化为0)
打开串口按钮 IDC_OPENPORT 无
关闭串口按钮 IDC_CLOSTPORT 无
发送按钮 IDC_SEND 无
在文件“MSCommDlg.h”的头部加入语句#include "mscomm1.h",然后为对话框类加入
成员函数void InitComm(),来初始化MSComm 控件,其代码如下:
void CMSCommDlg::InitComm()
{
//设置串口
m_Comm.SetCommPort(m_Port+1);
// 设置数据读取格式为二进制方式
m_Comm.SetInputMode(1);
// 设置传输参数
m_Comm.SetSettings("9600,n,8,1");
//缓冲区内有一个字符就可以接收
m_Comm.SetRThreshold(1);
// 指定接收缓冲区大小
m_Comm.SetInBufferSize(1024);
//指定发送缓冲区大小
m_Comm.SetOutBufferSize(1024);
// 清空接收缓冲区
m_Comm.SetInBufferCount(0);
// 打开串口
if(!m_Comm.GetPortOpen())
{
m_Comm.SetPortOpen(TRUE);
}
}
当选择下拉列表中的端口时,会激发CBN_SELCHANGE 消息,为其添加响应函数,代
码如下:
void CMSCommDlg::OnSelchangeCombolist()
{
// TODO: Add your control notification handler code here
CString m_str;
//得到下拉列表内容
GetDlgItemText(IDC_COMBOLIST, m_str);
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·326·
//得到串口号
m_Port = atoi(LPCTSTR(m_str))-1;
}
为“打开串口”按钮添加响应函数,代码如下:
void CMSCommDlg::OnOpenport()
{
// TODO: Add your control notification handler code here
InitComm();
}
为“关闭串口”按钮添加响应函数,代码如下:
void CMSCommDlg::OnClostport()
{
// TODO: Add your control notification handler code here
if( m_Comm.GetPortOpen() )
{
// 关闭串口
m_Comm.SetPortOpen(0);
}
}
为“发送”按钮添加响应函数,代码如下:
void CMSCommDlg::OnSend()
{
// TODO: Add your control notification handler code here
//得到发送Edit 控件的数据
UpdateData(TRUE);
int Count=m_Send.GetLength();
//将发送数据传给m_Array
CByteArray m_Array;
m_Array.RemoveAll();
m_Array.SetSize(Count);
for(int i=0;i<Count;i++)
m_Array.SetAt(i,m_Send[i]);
//发送
m_Comm.SetOutput(COleVariant(m_Array));
m_Send = "";
UpdateData(FALSE);
}
对于数据的接收,应该利用MSComm 控件的OnComm 事件来处理。为其添加响应函数,
代码如下:
void CMSCommDlg::OnOnCommMscomm()
枫叶文学网www.fywxw.com
第11 章 网络编程
·327·
{
// TODO: Add your control notification handler code here
int nEvent;
VARIANT m_input;
char *str, *str1;
int k,i;
CString str2;
//得到事件
nEvent = m_Comm.GetCommEvent();
switch(nEvent)
{
//只对接收数据事件进行处理
case 2:
// 接收缓冲区的字符数目
k = m_Comm.GetInBufferCount();
if(k > 0)
{
//得到接收数据
m_input = m_Comm.GetInput();
str = (char*)(unsigned char*)m_input.parray->pvData;
}
//清除字符串中的不必要字符
i = 0;
str1 = str;
while(i < k)
{
i++;
str1++;
}
*str1 =’\0’;
str2 = (const char*)str;
//得到最终数据
m_Receive += (LPCTSTR)str2;
default:
break;
}
// 显示数据
UpdateData(FALSE);
}
至此,程序设计完成。运行两个程序,分别选择串口1 和串口2,然后收发数据,如图
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·328·
11-19 和图11-20 所示。
图11-19 串口发送数据 图11-20 串口接收数据
11.6 本章小结
本章介绍了网络编程的基本知识及基本步骤,并且详细介绍了WinSock 类。接着利用所
讲知识编程实现了一个网络聊天系统,最后利用MSComm 控件实现了简单的串口通信。相
信通过本章的学习,读者可以编写简单的网络应用程序,并会利用MSComm 控件进行简单
的串口数据传输。
枫叶文学网www.fywxw.com
第12 章 数据库开发
随着计算机技术的飞速发展,数据库的应用也越来越广泛。如今,数据库技术已经成为
计算机技术中的核心技术之一。本章首先简单介绍数据库的基本概念及用Visual C++ 6.0 进
行数据库开发的几种相关技术,然后介绍Access 数据库的建立和一些基本的SQL 语句,最
后通过一个具体的实例来详细说明ADO 技术在数据库开发中的应用。本章主要包括以下几
方面的内容:
? 数据库的基本概念及数据库的相关技术;
? Access 数据库的建立;
? 基本的SQL 语句;
? 如何利用ADO 技术进行数据库开发。
12.1 概述
数据库技术产生于20 世纪60 年代中期,是数据管理的最新技术,是计算机科学的重要
分支,它的出现极大的促进了计算机应用向各行业的渗透。本节将对数据库的概念,数据库
的相关技术以及如何开发数据库应用程序作一简单介绍。
12.1.1 数据库的基本概念
所谓数据库(Database,简称DB),就是长期存储在计算机内的、有组织的、可共享的
数据集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度,较高
的数据独立xìng和易扩展xìng,并可为各种用户共享。
有了数据和数据库,还要进行数据库的管理,不仅可以科学地组织这些数据并将其存储
在数据库中,而且还能高效地处理这些数据。数据库管理系统(Database Managcomnt System,
简称DBMS)是位于用户和cāo作系统之间的一层数据管理软件。数据库在建立、运用和维护
时由数据库管理系统统一管理、统一控制。数据库管理系统使用户能方便的定义数据和cāo纵
数据,并能够保证数据的安全xìng、完整xìng、多用户对数据并发使用以及发生故障后的系统恢
复。
在很多情况下,人们所说的数据库实际上指的是数据库系统。数据库系统(Database
System,简称DBS)是指在计算机系统中引入数据库后的系统构成,一般由数据库、数据库
管理系统(及其开发工具)、应用系统、数据库管理员和用户构成。
设计数据库的核心
松语文学免费小说阅读_www.16sy.com