这是一个串口通讯的程序(网上下的),可是我不知道她从串口接受的数据方在哪里的?我要想串口写数据,该怎么写?请哪位大侠帮一下小弟。说的越详细越好!!!非常感谢了。急急急啊!!!!!!
#include <windows.h> 
#include <stdio.h> 
#include <iostream> 
using namespace std;
#include <stdlib.h> 
#include <fstream>
using namespace std;
#include <io.h> 
#include <string.h>   
#include <process.h>

HANDLE  hCom  ;  //  准备打开的串口的句柄 
HANDLE      hCommWatchThread  ;  //辅助线程的全局函数 

LRESULT  CALLBACK  WndProc(HWND,UINT,WPARAM,LPARAM); 

UINT  CommWatchProc(HWND  hSendWnd) 

DWORD  dwEvtMask=0  ; 
COMSTAT  ComStat  ; 
DWORD  dwErrorFlags,dwLength,dwError;   
BOOL  fReadStat = FALSE; 
LPSTR  lpBuffer = NULL;   
   
SetCommMask(  hCom,  EV_RXCHAR &brvbarEV_TXEMPTY  );//有哪些串口事件需要监视? 
WaitCommEvent(  hCom,  &dwEvtMask,  NULL  );//  等待串口通信事件的发生 
//检测返回的dwEvtMask,知道发生了什么串口事件 
if  ((dwEvtMask  &  EV_RXCHAR)  ==  EV_RXCHAR)  //  缓冲区中有数据到达 

ClearCommError(hCom,  &dwErrorFlags,  &ComStat  )  ; 
dwLength  =  ComStat.cbInQue  ;  //输入缓冲区有多少数据? 
if  (dwLength  >  0) 

fReadStat  =  ReadFile(hCom,  lpBuffer,  dwLength,  &dwLength  ,NULL);  //读数据 
if  (!fReadStat) 

if  (GetLastError()  ==  ERROR_IO_PENDING) 

while(!GetOverlappedResult(hCom,NULL,  &  dwLength,  TRUE))   

dwError  =  GetLastError(); 
if(dwError  ==  ERROR_IO_INCOMPLETE)  continue; 


}
  //::PostMessage((HWND)hSendWnd,WM_NOTIFYPROCESS,0,0);//通知主线程,串口收到数据 


}
return  0; 

int    SerialInit(  )  ;      //串口初始化 

int  WINAPI  WinMain(HINSTANCE  hInstance,HINSTANCE  hPrevInstance, 
  LPSTR  lpCmdLine,int  nCmdShow) 

static  TCHAR  szAppName[]=TEXT("HelloWorld"); 
static  TCHAR  szClassName[]=TEXT("HelloWorldClass"); 
HWND  hwnd; 
MSG  msg; 
WNDCLASS  wndclass; 
unsigned  long  *  p=NULL; 
   
wndclass.style  =  CS_HREDRAW  &brvbar  CS_VREDRAW; 
wndclass.lpfnWndProc  =  WndProc; 
wndclass.cbClsExtra  =  0; 
wndclass.cbWndExtra  =  0; 
wndclass.hInstance  =  hInstance; 
wndclass.hIcon  =  LoadIcon(NULL,IDI_APPLICATION); 
wndclass.hCursor  =  LoadCursor(NULL,IDC_ARROW); 
wndclass.hbrBackground  =  (HBRUSH)GetStockObject(WHITE_BRUSH); 
wndclass.lpszMenuName  =  NULL; 
wndclass.lpszClassName  =  szClassName; 

  if(!RegisterClass(&wndclass)) 

MessageBox(NULL,TEXT("This  program  requires  Windows  NT  !"), 
"szAppName",MB_ICONERROR); 
return  0; 

   
hwnd  =  CreateWindow(szClassName, 
TEXT("My  Input  Program"), 
WS_OVERLAPPEDWINDOW, 
CW_USEDEFAULT, 
CW_USEDEFAULT, 
CW_USEDEFAULT, 
CW_USEDEFAULT, 
NULL, 
NULL, 
hInstance, 
NULL  ); 
ShowWindow(hwnd,nCmdShow); 
UpdateWindow(hwnd); 
   
SerialInit(  );//串口初始化 

//*****************开辟新线程******************************************** 
hCommWatchThread=CreateThread((LPSECURITY_ATTRIBUTES)  NULL,//安全属性 
0,  //初始化线程栈大小,却省为与主线程大小相同 
        (LPTHREAD_START_ROUTINE)CommWatchProc,  //线程的全局函数 
        NULL,  //此处传入了主框架的句柄 
        0,p); 
//*****************开辟新线程******************************************** 
   
while(GetMessage(&msg,NULL,0,0)) 

TranslateMessage(&msg); 
DispatchMessage(&msg); 

return  msg.wParam; 

int    SerialInit(  )    //初始化串口 

//      DWORD  dwError; 
DCB  dcb; 
COMMTIMEOUTS  to; 
BOOL  fSuccess; 
//**************************打开串口*************************** 
hCom  =  CreateFile("COM1",  GENERIC_READ  &brvbar  GENERIC_WRITE,  0, 
NULL,  OPEN_EXISTING,  FILE_FLAG_OVERLAPPED,  NULL); 
if  (hCom  ==  INVALID_HANDLE_VALUE)   

MessageBox(NULL,TEXT("打开串口错误!"), 
"ok",MB_ICONERROR); 

   
//***************************打开串口**************************** 
   
   
//***************************配置串口****************************   
GetCommState(hCom,&dcb); 
dcb.BaudRate  =  9600;  //波特率为9600 
dcb.ByteSize  =  8;  //数据位数为8位 
dcb.Parity  =  NOPARITY;  //无校验 
dcb.StopBits  =  ONESTOPBIT;  //一个停止位 
dcb.fBinary  =  FALSE; 
    if(!SetCommState(hCom,&dcb)) 

MessageBox(NULL,  TEXT("设置错误"),  "OK",  MB_ICONERROR); 

   
SetupComm(hCom,  1024,  1024); 
//PurgeComm(hCom,  PURGE_TXCLEAR); 
PurgeComm(  hCom,  PURGE_TXABORT  &brvbar  PURGE_RXABORT  &brvbar  PURGE_TXCLEAR  &brvbar  PURGE_RXCLEAR  );  //清干净输入、输出缓冲区 
//***************************配置串口****************************   
   
   
    //******************将串口读操作的超时设定为10  毫秒************** 
memset(&to,  0,  sizeof(to)); 
to.ReadIntervalTimeout  =  10000; 
SetCommTimeouts(hCom,  &to); 
//******************将串口读操作的超时设定为10  毫秒************** 
   
   
//******************设置事件掩模来监视指定通信端口上的事件(监视串口的错误和接收到字符两种事件)********       
fSuccess=SetCommMask(hCom,  EV_RXCHAR &brvbarEV_TXEMPTY  );//设置事件驱动的类型 
if  (!fSuccess)   

MessageBox(NULL,  TEXT("SetCommMask  错误"),  "OK",  MB_ICONERROR); 

//******************设置事件掩模来监视指定通信端口上的事件(监视串口的错误和接收到字符两种事件)******** 

   
return  0; 
   

LRESULT  CALLBACK  WndProc(HWND  hwnd,UINT  message,WPARAM  wParam, 
LPARAM  lParam) 

HDC  hdc; 
PAINTSTRUCT  ps; 
RECT  rect; 
char  temp[128]; 
   
switch(message) 

case  WM_CREATE: 

return  0; 

//获取键盘输入 
case  WM_KEYDOWN: 
switch(wParam) 

//按Esc键推出 
case  VK_ESCAPE: 
PostQuitMessage(0); 
return  0; 

//其余按键发声 
MessageBeep(MB_OK); 
return  0; 

//按下鼠标左键发声 
case  WM_LBUTTONDOWN: 
MessageBeep(MB_OK);
return  0; 

//按下鼠标右键退出 
case  WM_RBUTTONDOWN: 
PostQuitMessage(0); 
return  0; 

//鼠标位置改变,显示坐标 
case  WM_MOUSEMOVE: 
hdc  =  GetDC(hwnd); 
sprintf(temp,"x:  %d  ,  y:  %d",LOWORD(lParam),HIWORD(lParam)); 
TextOut(hdc,10,10,temp,strlen(temp)); 
ReleaseDC(hwnd,hdc); 
return  0; 

case  WM_PAINT: 
hdc=BeginPaint(hwnd,&ps); 
GetClientRect(hwnd,&rect); 
EndPaint(hwnd,&ps); 
return  0; 
case  WM_DESTROY: 
PostQuitMessage(0); 
return  0; 

   
return  DefWindowProc(hwnd,message,wParam,lParam); 

我给你个例子,你自己看看

发过去了

非常感谢,还有哪些大哥能帮我啊?请快点吧。。
小弟非常着急啊。。。

请哪位帮我分析一下这个程序。。。
不胜感激!!!

怎么没有人说话呢????