博文

用VC 6.0实现串行通信的三种方法(2006-09-24 11:07:00)

摘要:
用VC 6.0实现串行通信的三种方法 
 
中国科学院 王颖
---- 摘要: 本文介绍了在Windows平台下串行通信的实现机制,讨论了根据不同的条件用Visual C++ 设计串行通信程序的三种方法,并结合实际,实现对温度数据的接收监控。
---- 在实验室和工业应用中,串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。依据不同的条件实现对串口的灵活编程控制是我们所需要的。
---- 在光学镜片镀膜工艺中,用单片机进行多路温度数据采集控制,采集结果以串行方式进入主机,每隔10S向主机发送一次采样数据,主机向单片机发送相关的控制命令,实现串行数据接收,处理,记录,显示,实时绘制曲线。串行通信程序开发环境为 VC++ 6.0。
---- Windows下串行通信
---- 与以往DOS下串行通信程序不同的是,Windows不提倡应用程序直接控制硬件,而是通过Windows操作系统提供的设备驱动程序来进行数据传递。串行口在Win 32中是作为文件来进行处理的,而不是直接对端口进行操作,对于串行通信,Win 32 提供了相应的文件I/O函数与通信函数,通过了解这些函数的使用,可以编制出符合不同需要的通信程序。与通信设备相关的结构有COMMCONFIG ,COMMPROP,COMMTIMEOUTS,COMSTAT,DCB,MODEMDEVCAPS,MODEMSETTINGS共7个,与通信有关的Windows API函数共有26个,详细说明可参考MSDN帮助文件。以下将结合实例,给出实现串行通信的三种方法。
---- 实现串行通信的三种方法
---- 方法一:使用VC++提供的串行通信控件MSComm 首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project --> Add to Project --> Components and Control插入即可,再将该控件从工具箱中拉到对话框中。此时,你只需要关心控件提供的对 Windows 通讯驱动程序的 API 函数的接口。换句话说,只需要设置和监视MSComm控件的属性和事件。
---- 在ClassWizard中为新......

阅读全文(149) | 评论:0

Windows API函数大全二(2006-09-24 11:04:00)

摘要:7. API之位图、图标和光栅运算函数
BitBlt 将一幅位图从一个设备场景复制到另一个
CopyIcon 制作指定图标或鼠标指针的一个副本。这个副本从属于发出调用的应用程序
CopyImage 复制位图、图标或指针,同时在复制过程中进行一些转换工作
CreateBitmap 按照规定的格式创建一幅与设备有关位图
CreateBitmapIndirect 创建一幅与设备有关位图
CreateCompatibleBitmap 创建一幅与设备有关位图,它与指定的设备场景兼容
CreateCursor 创建一个鼠标指针
CreateDIBitmap 根据一幅与设备无关的位图创建一幅与设备有关的位图
CreateDIBSection 创建一个DIBSection
CreateIcon 创建一个图标
CreateIconIndirect 创建一个图标
DestroyCursor 清除指定的鼠标指针,并释放它占用的所有系统资源
DestroyIcon 清除图标
DrawIcon 在指定的位置画一个图标
DrawIconEx 描绘一个图标或鼠标指针。与DrawIcon相比,这个函数提供了更多的功能
ExtractAssociatedIcon 判断一个可执行程序或DLL中是否存在图标,或是否有图标与系统注册表中指定的文件存在关联并提取之
ExtractIcon 判断一个可执行文件或DLL中是否有图标存在,并将其提取出来
GetBitmapBits 将来自位图的二进制位复制到一个缓冲区
GetBitmapDimensionEx 取得一幅位图的宽度和高度
GetDIBColorTable 从选入设备场景的DIBSection中取得颜色表信息
GetDIBits 将来自一幅位图的二进制位复制到一幅与设备无关的位图里
GetIconInfo 取得与图标有关的信息
GetStretchBltMode 判断StretchBlt 和 StretchDIBits函数采用的伸缩模式
LoadBitmap 从指定的模块或应用程序实例中载入一幅位图
LoadCursor 从指定的模块或应用程序实例中载入一......

阅读全文(324) | 评论:0

Windows API函数大全一(2006-09-24 11:00:00)

摘要:1. API之网络函数
WNetAddConnection 创建同一个网络资源的永久性连接
WNetAddConnection2 创建同一个网络资源的连接
WNetAddConnection3 创建同一个网络资源的连接
WNetCancelConnection 结束一个网络连接
WNetCancelConnection2 结束一个网络连接
WNetCloseEnum 结束一次枚举操作
WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接
WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接
WNetEnumResource 枚举网络资源
WNetGetConnection 获取本地或已连接的一个资源的网络名称
WNetGetLastError 获取网络错误的扩展错误信息
WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC(统一命名规范)名称
WNetGetUser 获取一个网络资源用以连接的名字
WNetOpenEnum 启动对网络资源进行枚举的过程

2. API之消息函数
BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口
GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置
GetMessageTime 取得消息队列中上一条消息处理完毕时的时间
PostMessage 将一条消息投递到指定窗口的消息队列
PostThreadMessage 将一条消息投递给应用程序
RegisterWindowMessage 获取分配给一个字串标识符的消息编号
ReplyMessage 答复一个消息
SendMessage 调用一个窗口的窗口函数,将一条消息发给那个窗口
SendMessageCallback 将一条消息发给窗口
SendMessageTimeout 向窗口发送一条消息
SendNotifyMessage 向窗口发送一条消息
3. API之文件处理函数
CloseHa......

阅读全文(182) | 评论:0

VC网络数据库开发 zz(2006-09-24 10:35:00)

摘要:VC网络数据库开发  
典型网络数据库系统软件设计


一、概述 本系统为内部系统,帐户由管理员添加、管理; 分为两个组,User组和Boss组。Boss组的帐户可以发广播通知; 任意两个用户间可以互相通信; 数据库接口用DAO,网络通信用 CSocket+CSocketFile; 二、详细设计

1、数据库设计

本系统只是一个消息通信模型,这里的数据库设计比较简单。

ER图:



 把ER模型转为关系模型,共两个表: User (No , Name ,Password ,G#) 候选键:No 外键:G# Group (G# , GroupName ,Demo ) 主键 :G# 2、消息格式设计

<1>、传送的消息共有5类------登录消息,验证返回消息,普通消息,用户列表消息,通知消息。定义一个枚举类型:enum MSGTYPE {LOGIN , LOGINResponse , CHATTING , USERList , NOTICE}; <2>、定义消息类 class CMsg : public CObject { public: int m_eType; //枚举类型,记录消息类型 CString m_strMsg; //消息 CMsg(); virtual ~CMsg(); void Serialize(CArchive &ar); //消息类系列化函数,发送和接受消息时用。 }; <3>、m_strMsg 为消息类中存放消息的成员,它的具体格式随着消息类型m_eType不同而不同。
  m_eType m_strMsg LOGIN 呢称|密码 LOGINResponse GOOD|欢迎!(BOSS) 或 FAILED|验证失败! CHATTING 发给(来自)的用户名|消息内容 USERList 呢称1|呢称2|…|呢称n|END NOTICE ALL|消息内容 或 来自的用户|消息内容 m_st......

阅读全文(209) | 评论:0

直接通过ADO操作Access数据库 zz(2006-09-24 10:33:00)

摘要:直接通过ADO操作Access数据库
作者/徐景周

    我在《VC知识库在线杂志》第十四期和第十五期上曾发表了两篇文章——“直接通过ODBC读、写Excel表格文件”和“直接通过DAO读、写Access文件”,先后给大家介绍了ODBC和DAO两种数据库访问技术的基本使用方法,这次要给大家介绍的是ADO数据库访问技术的使用方法。ADO(Active Data Object,活动数据对象)实际上是一种基于COM(组件对象模型)的自动化接口(IDispatch)技术,并以OLE DB(对象连接和镶入的数据库)为基础,经过OLE DB精心包装后的数据库访问技术,利用它可以快速的创建数据库应用程序。 ADO提供了一组非常简单,将一般通用的数据访问细节进行封装的对象。由于ODBC数据源也提供了一般的OLE DB Privider,所以ADO不仅可以应用自身的OLE DB Privider,而且还可以应用所有的ODBC驱动程序。关于OLE DB和ADO的其它详细情况,读者可以自行查阅相关书籍或MSDN,这里就不一一说明了。让我们直接步入主题:如何掌握ADO这种数据库访问技术。ADO的操作方法和前面讲过的DAO的操作在很多方面存在相似之处,在这里,笔者为了更有效的说明它的使用方法,用VC6.0做了一个示例程序——AdoRWAccess,这个示例程序可以直接通过ADO来操作Access数据库,示例程序的运行效果如下图所示:



在示例程序中我们仍采用原库结构,数据库名Demo.mdb,库内表名DemoTable,表内字段名为Name(姓名)和Age(年龄)的两个字段,来构造示例程序操作所需的Access数据库,这也和上两篇文章的示例源码中的库结构相兼容。
下面让我们看看ADO数据库访问技术使用的基本步骤及方法:
    首先,要用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序(DLL、EXE等)的一部分被定位在其自身程序中的附属资源里,如:被定位在msado15.dll的附属资源中,只需要直接用#import引用它既可。可以直接在Stdafx.h文件中加入下面语句来实现: #import "c:\program fi......

阅读全文(160) | 评论:0

VC++实用技巧(2006-09-24 10:31:00)

摘要:VC++实用技巧     1.检测程序中的括号是否匹配
把光标移动到需要检测的括号(如大括号{}、方括号[]、圆括号()和尖括号<>)前面,键入快捷键“Ctrl+]”。如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告声。
2.查看一个宏(或变量、函数)的宏定义
把光标移动到你想知道的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的Go To Defition Of …),如果没有建立Browse files,会出现提示对话框,确定,然后就会跳到定义那些东西的地方。
相当可喜的是,它也可以看到Microsoft定义的系统宏,非常good. 3.格式化一段乱七八糟的源代码
选中那段源代码,按ATL+F8。
4.在编辑状态下发现成员变量或函数不能显示
删除该项目扩展名为.ncb文件,重新打开该项目。
5.如何整理ClassView视图中大量的类
可以在classview 视图中右键新建文件夹(new folder),再把具有相近性质的类拖到对应的文件夹中,使整个视图看上去清晰明了.
6.定位预处理指定
在源文件中定位光标到对称的#if, #endif,使用Ctrl+K.
7.如何添加系统中Lib到当前项目
在Project | Settings | Link | Object/library modules:输入Lib名称,不同的Lib之间用空格格开.
8.如何添加系统中的头文件(.h)到当前项目.
#include <FileName.h>,告诉编译到VC系统目录去找;使用#include "FileName.h",告诉编译在当前目录找.
9.如何在Studio使用汇编调试
在WorkBench的Debugger状态下按CTRL+F7.
10.怎样处理ClassZiard找不到的系统消息
如果要在ClassWizard中处理WM_NCHITTEST等系统消息,请在ClassWizard中Class Info页中将Message filter改为Window就有了.
1......

阅读全文(172) | 评论:0

随机发牌程序(c) zz(2006-09-24 10:26:00)

摘要:#define N 52
#include <graphics.h>
#include <stdlib.h>
void Init(void);/*图形驱动*/
void Close(void);/*图形关闭*/
void Play(void);/*发牌的具体过程*/
void Rand(int i,int j);/*随机发牌函数*/
void Sort();
void DrawPuke(int kind,int x,int y,char num);/*画牌*/
char p[4][13]=
      {{'2','3','4','5','6','7','8','9','0','J','Q','K','A'},
       {'2','3','4','5','6','7','8','9','0','J','Q','K','A'},
       {'2','3','4','5','6','7','8','9','0','J','Q','K','A'},
       {'2','3','4','5','6','7','8','9','0','J','Q','K','A'}};
/*10用0来表示*/
struct Pai
{
   char num;
   char kind;
   int realnum;
   int link;
}newp[52];
/****主函数*****/
void main(void)
{
   Init();/*初始化*/
   Play();
   getch();
   cleardevice(); /*清屏*/
   Sort(......

阅读全文(194) | 评论:0

VC的数据类型(2006-09-23 17:58:00)

摘要:VC的数据类型
    刚接触VC编程的朋友往往对许多数据类型的转换感到迷惑不解,本文将介绍一些常用数据类型的使用。
我们先定义一些常见类型变量借以说明
int i = 100;
long l = 2001;
float f=300.2;
double d=12345.119;
char username[]="女侠程佩君";
char temp[200];
char *buf;
CString str;
_variant_t v1;
_bstr_t v2;
一、其它数据类型转换为字符串
短整型(int)
itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制
itoa(i,temp,2); ///按二进制方式转换
长整型(long)
ltoa(l,temp,10);
二、从其它包含字符串的变量中获取指向该字符串的指针
CString变量
str = "2008北京奥运";
buf = (LPSTR)(LPCTSTR)str;
BSTR类型的_variant_t变量
v1 = (_bstr_t)"程序员";
buf = _com_util::ConvertBSTRToString((_bstr_t)v1);
三、字符串转换为其它数据类型
strcpy(temp,"123");
短整型(int)
i = atoi(temp);
长整型(long)
l = atol(temp);
浮点(double)
d = atof(temp);
四、其它数据类型转换到CString
使用CString的成员函数Format来转换,例如:
整数(int)
str.Format("%d",i);
浮点数(float)
str.Format("%f",i);
字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值
str = username;
五、BSTR、_b......

阅读全文(1150) | 评论:0

百度C语言吧-问题资料大全 ZZ(2006-09-23 17:56:00)

摘要:百度C语言吧-问题资料大全
  1 【 C 语言吧 · 问题资料大全 】 
 注意:
1.这里会尽量搜集所有问题,定时更新,有问题请先查阅这里.
2.为方便查阅,请不要在此问问题,此类贴将被删除,不另通知.
3.希望这里成为大家学习 C 的好帮手. 2 ■■■■■■■____本吧相关____■■■■■■■ 
★本吧推荐的几个C编译器:http://post.baidu.com/f?kz=2769360
◆本吧代码格式编辑器:http://post.baidu.com/f?kz=9364381
◆本吧代码中显示?:http://post.baidu.com/f?kz=5054984
4 ■■■■■■■____学习资料____■■■■■■■ 
◆搜索答案与提问的秘诀:http://post.baidu.com/f?kz=6602487
◆C 语言学习看什么书:http://post.baidu.com/f?kz=5728013
◆如何学好c语言:http://post.baidu.com/f?kz=8642778 
◆学 C 容易出错的地方: http://post.baidu.com/f?kz=4275539 
◆C程序易犯错误:http://post.baidu.com/f?kz=12428951
◆几种排序算法:http://post.baidu.com/f?kz=5633380
◆几个经典字符串Hash函数:http://post.baidu.com/f?kz=5662514 
◆100,000素数表:http://post.baidu.com/f?kz=5663116
◆C99 的语言新特性:http://post.baidu.com/f?kz=4784366
◆深入理解C语言指针的奥秘:http://post.baidu.com/f?kz=5932198
◆ISO-c99标准英文全文(pdf格式):http://www.nirvani.net/docs/
◆C 的文件操作:http://pos......

阅读全文(225) | 评论:0

五 字 棋 游 戏(C++) zz(2006-09-23 17:50:00)

摘要:#include <iostream>
#include <stdlib.h>
using namespace std;
class fivegame
{ char m,n;
int h,l;
 char z;
 char list[20][20];
public:
 int kk;
 int init();
 int enterchar(char q);
 int print();
 int pk();
 int ifwin();
 bool ison;
 bool test();
 char list1[5];
 int puout(); 
}; 



int fivegame::puout()
{ cout<<" 这 是 个 五 字 棋 游 戏 "<<endl;
 cout<<" 制作--elva6401-- "<<endl;
 cout<<" (注:行列都要用大写字母)"<<endl;
return 0;
}
 bool fivegame::test()
{
 int i;
for (i=0;i<=4;i++)
{if (list1[i]!=z)
return false;}
return true......

阅读全文(268) | 评论:0