//编者注:串口接收基于多线程任务。

#include <windows.h>
#include <windowsx.h>
#include "main.h"
#include "dialogs.h"
#include "resource.h"
#include "stdio.h"

HANDLE hCom;
DWORD dwError;
DCB LpdcbCom;
OVERLAPPED m_ov;
//Compile error using LPDCB
char ScomBuf[256];

DWORD WINAPI PTRead(LPVOID pParam)
{
 DWORD EV_COMM;
 char str[256];
 char ByteRead[256];
 DWORD BytesSent;
 COMSTAT ComSta;
 DWORD Counter;
 DWORD ErrorNum;
 while(1)
 {
  ( WaitCommEvent(hCom,&EV_COMM,&m_ov));
  if( EV_COMM == EV_RXCHAR )
  {
//   MessageBox(NULL,"RX Event Happened...","",MB_OK);
   EV_COMM = 0;
// sprintf(ByteRead,"\0");
 for(int tmp=0; tmp<256; tmp++)
  ByteRead[tmp]= '\0';

ClearCommError(hCom,&ErrorNum,&ComSta);
   ReadFile(hCom,  // Handle to COMM port
              &ByteRead,   // RX Buffer Pointer
          ComSta.cbInQue,     // Read one byte
          &BytesSent,   // Stores number of bytes read
                 &m_ov);     // pointer to the m_ov structure
 sprintf(ByteRead,"%s\0",ByteRead);
 SetDlgItemText((HWND )(pParam),IDC_TEXT,ByteRead);//Note: HWND is a Pointer...
//MessageBox(NULL,ByteRead,"",MB_OK);
/*
    sprintf(str,"%c",ByteRead);
 if( ByteRead == '\0' )
 {
  MessageBox(NULL,str,NULL,MB_OK);
  break;
  
 }

*/

}
// MessageBox(NULL,"Sub-thread","",MB_OK);
// Sleep(1);
 }
/*
 while(1)
 {
  
   ReadFile(hCom,  // Handle to COMM port
              &ByteRead,   // RX Buffer Pointer
          1,     // Read one byte
          &BytesSent,   // Stores number of bytes read
                 &m_ov);     // pointer to the m_ov structure
          sprintf(str,"%c",ByteRead);
 MessageBox(hwnd,str,NULL,MB_OK);
 if( ByteRead == '\0' ) break;
 
 }

*/
}

void OpenScom()
{
 DWORD Error=0;

CloseHandle(hCom); //Avoid Open Scomm too much time in the same thread.

hCom = CreateFile( "COM7",\
      GENERIC_READ | GENERIC_WRITE,\
      0,\
      NULL,\
      OPEN_EXISTING,
      FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,\
      NULL
     );

if( hCom == INVALID_HANDLE_VALUE)
 {
  
  if( 5 == GetLastError() )
  {
   sprintf(ScomBuf,"%s","串口已被占用");
   MessageBox(NULL,ScomBuf,NULL,MB_OK);
  }
  ClearCommError(hCom,&Error,NULL);  
//  sprintf(ScomBuf,"%u",dwError);
 }

GetCommState(hCom,&LpdcbCom);
 BuildCommDCB("baud=9600 parity=N data=8 stop=1",&LpdcbCom);
 SetCommState(hCom,&LpdcbCom);
 
 
}

void InitScom()
{
 
}

BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        //BEGIN MESSAGE CRACK
        HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
        HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
        HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
        //END MESSAGE CRACK
    }

return FALSE;
}

//  Main_OnInitDialog
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
    // Set app icons
    HICON hIcon = LoadIcon((HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE) ,MAKEINTRESOURCE(IDI_ICONAPP));
    SendMessage(hwnd, WM_SETICON, TRUE,  (LPARAM)hIcon);
    SendMessage(hwnd, WM_SETICON, FALSE, (LPARAM)hIcon);
//    SetDlgItemText(hwnd,IDC_TEXT,"jr");

CreateThread(NULL,0,PTRead,hwnd,0,NULL);   
    //
    // Add initializing code here
    //

return TRUE;
}

//  Main_OnCommand
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
 DWORD BytesSent = 0;
 char ByteRead;
 char str[255];
    switch(id)
    {
     case IDC_SEND:
     //  MessageBox(hwnd,"TEST","TEST",MB_OK);
//    TransmitCommChar(hCom,'J');

WriteFile(hCom, // Handle to COMM Port
        "Hello,world.", // Pointer to message buffer in calling finction
        12,  // Length of message to send
        &BytesSent,  // Where to store the number of bytes sent
        &m_ov );   // Overlapped structure

break;
     
        case IDC_OK:
//            MessageBox(hwnd,TEXT("You clicked OK!"),TEXT("SCOM"),MB_OK);
   OpenScom();
   SetCommMask(hCom,EV_RXCHAR);
//              EndDialog(hwnd, id);
        break;
        case IDC_CANCEL:
//            MessageBox(hwnd,TEXT("You clicked Cancel!"),TEXT("SCOM"),MB_OK);

CloseHandle(hCom);

//        EndDialog(hwnd, id);
        break;
        default:break;
    }

}

//  Main_OnClose
void Main_OnClose(HWND hwnd)
{
    EndDialog(hwnd, 0);
}

转载于:https://www.cnblogs.com/techstone/archive/2012/07/10/2661216.html

VC菜菜鸟-创建一个即时串口通信程序相关推荐

  1. VC菜菜鸟-创建一个简单的多线程任务

    在学习编程的过程中,经典的"HelloWorld"给我最大的启示就是,一切从简,简而明理. 写一个连"白痴"都看得懂的代码,是编程的最高境界. 想要学一个知识点 ...

  2. VC菜菜鸟:基于CFree的HelloWorld程序

    //原文链接:http://blog.csdn.net/it1988888 故事发生在很久很多久以前,有一只菜菜鸟,领略到Windows系统及其应用软件的强大,令其折服,遂生自行编写软件的念头. 网上 ...

  3. VC控件MSComm编写串口通信程序

    转载:http://blog.csdn.net/liangzhao_jay/article/details/45647229 在众多网友的支持下,串口调试助手从2001年5月21日发布至今,短短一个月 ...

  4. java调用c 串口_基于C语言的java串口通信程序

    目录 1.前言 2.windows  串口通信API 3.C/C++封装  动态运行库 4.JAVA-JNI  java程序调用C++程序 一.前言 &ensp ;写这个博客主要是因为自己想用 ...

  5. qt linux 串口eventdriven,详解 Qt 串口通信程序全程图文 (1)

    Qt 串口通信程序全程图文 是本文介绍的内容,在Qt中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类.我们可以去 http://sourc ...

  6. 创建一个Windows Service应用程序

    创建一个Windows Service应用程序 下载本文代码 见资源 正是由于.NET Framework的出现,才使你能够构建出在系统重新启动时自动运行的.无人参与的(unattended)应用程序 ...

  7. 详解 Qt 串口通信程序全程图文 (5)

    Qt 串口通信程序全程图文是本文介绍的内容,本节也是最后一节,本节主要讲述的是解决一下重要问题的说明: (下面所说的第一个程序是指第一节中写的那个程序,第二个程序是指第三节更改完后的程序,第三个程序是 ...

  8. 详解 Qt 串口通信程序全程图文 (4)

    Qt 串口通信程序全程图文是本文介绍的内容,本文一开始先讲解对程序的改进,在文章最后将要讲解一些重要问题. 1.在窗口中加入一些组合框Combo Box,它们的名称及条目如下: 串口:portName ...

  9. 详解 Qt 串口通信程序全程图文 (3)

    Qt 串口通信程序全程图文是本文要介绍的内容,下面的程序在第一部分中所写的程序上进行了一些改进.加入打开和关闭串口,发送数据等功能. 1.加入了"打开串口","关闭串口& ...

最新文章

  1. iOS 9应用开发教程之iOS 9新特性
  2. qt creator报错处理积累
  3. 文件夹目录结构导出工具及下载
  4. docker网络原理
  5. [Java基础] Java中List.remove报错UnsupportedOperationException
  6. voting设计模式
  7. JavaSE学习之IO流使用技巧
  8. java实现输出字符串中的数字字符
  9. 2000年考研英语阅读理解文章四
  10. Algs4-2.3.25切换到插入排序的试验
  11. Ubuntu服务器宕机排查记录
  12. 自制导纳信号发生器 [原创cnblogs.com/helesheng]
  13. 计算机如何做材料的应力应变曲线,常用材料应力应变曲线.xlsx
  14. 大数据处理与开发课程设计——纽约出租车大数据分析
  15. Sql面试50题 详解 持续更新
  16. 接入阿里云OSS--公有云分布式存储
  17. 于娟的忠告----生命只有一次,活着才是王道啊!!!
  18. 笃行杂记之Zookeeper SessionTimeOut分析
  19. 微信发朋友圈测试用例
  20. 大数据模型交易平台案例:消费贷款客户营销分析解决方案

热门文章

  1. 导致SEO优化排名不理想的三大因素,你踩雷了没?
  2. 数据通信技术_华为数据通信创新峰会在长春圆满举行
  3. Flutter retrofit:only “package“ and “asset“ schemes supported
  4. pyspark minHash LSH 查找相似度
  5. HBase单机环境搭建
  6. webvr动画函数requestAnimationFrame
  7. 西里尔字 - 俄罗斯
  8. Altium Designer 使用小结
  9. Oracle之数据操作__分组统计查询
  10. 百度前端技术学院Task20 笔记