免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 887 | 回复: 1
打印 上一主题 下一主题

如何添加对话框 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-02 15:39 |只看该作者 |倒序浏览
下面是我写的一个简单的串口程序,可以实现串口的读写操作,但老大要求建立一个对话框,能把发送消息和接收消息在对话框上显示出来,我不知道该怎样做,那位大侠能指点一下,最好给点程序,多谢!多谢!多谢!
// wwww.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "stdio.h"
//#include "mscomm.h"


#define  BUFFER_SIZE 1024
//#define MSG(szMsg) MessageBox (NULL, szMsg , TEXT("Error"), MB_OK)



HANDLE hCom;
OVERLAPPED  m_OverlappedRead,m_OverlappedWrite;


BOOL  OpenSerial(LPCTSTR lpszPortNum);
DWORD WriteDataSerial(LPCVOID pdata, DWORD  len);
DWORD ReadDataSerial(TCHAR ReceiveBuf[BUFFER_SIZE]);

void  StrToHex(char *str,char*strhex);
void  CloseSerial(void);


int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
        // TODO: Place code here.

    long  LastError=ERROR_SUCCESS;


   
   LastError=OpenSerial("COM1");
        if(LastError!=TRUE)
        {       
           MessageBox(NULL,TEXT("open failed"),TEXT("error"),MB_OK);
           return  LastError;
        }
  

         BYTE cmd[]={0x02,0x03,0x06,0x30,0x41,0xB3};
              LastError=WriteDataSerial(cmd,6);
       
                 

        if(!LastError)
         {
                 MessageBox(NULL,TEXT("write failed"),TEXT("error"),MB_OK);
                 return 0;

         }
        char  ReceiveBuf[1024];
         memset(ReceiveBuf,0,sizeof(ReceiveBuf));
    LastError=ReadDataSerial(ReceiveBuf);

    if(!LastError)  
                {
                    MessageBox(NULL,TEXT("ReadDataSerial:read data failed"),TEXT("Error"), MB_OK);
                    return 0;
                }
   
           char strhex[1024]={0};
       


        StrToHex(ReceiveBuf,strhex);

        CloseSerial();
        return TRUE;
       
}
BOOL OpenSerial(LPCTSTR lpszPortNum)
{
        DCB  dcb;     
        BOOL bSuccess;
   
       
        hCom = CreateFile( lpszPortNum,               
                            GENERIC_READ|GENERIC_WRITE,
                            0,                          
                            NULL,                       
                            OPEN_EXISTING,              
                            FILE_ATTRIBUTE_NORMAL,     
                            NULL);                     


        if (hCom ==INVALID_HANDLE_VALUE)
        {
               
                MessageBox (NULL, TEXT("OpenSerial():CreateFile() failed, invalid handle value!"), TEXT("Error"), MB_OK);
                       
                return FALSE;
        }
       

        bSuccess = GetCommState(hCom, &dcb);

        if ( !bSuccess )
        {
       
                MessageBox (NULL, TEXT("OpenSerial(): GetCommState() failed!"), TEXT("Error"), MB_OK);
               

                return FALSE;
        }


   

        dcb.BaudRate = CBR_9600   ;
        dcb.ByteSize = 8;
        dcb.Parity   = NOPARITY   ;
        dcb.StopBits = ONESTOPBIT ;
       
        bSuccess = SetCommState(hCom, &dcb);

        if ( ! bSuccess )
        {
               
                MessageBox (NULL, TEXT("OpenSerial(): SetCommState() failed!"), TEXT("Error"), MB_OK);
               
       

                return FALSE;
        }


          
       COMMTIMEOUTS  CommTimeouts;
       GetCommTimeouts(hCom, &CommTimeouts);
       CommTimeouts.ReadIntervalTimeout = 500;  
       CommTimeouts.ReadTotalTimeoutMultiplier = 10;  
       CommTimeouts.ReadTotalTimeoutConstant = 10;   
       CommTimeouts.WriteTotalTimeoutMultiplier = 50;  
       CommTimeouts.WriteTotalTimeoutConstant = 100;   
       if (!SetCommTimeouts(hCom, &CommTimeouts))
       {
              //L"不能设置超时参数";
              return FALSE;
       }                 

        return TRUE ;
}

DWORD WriteDataSerial(LPCVOID pdata, DWORD  len)
{   
        DWORD  dwBytesWritten;
        DWORD  result;
  
        if(hCom==INVALID_HANDLE_VALUE ) return FALSE;
   
        result=WriteFile(hCom,pdata,len,&dwBytesWritten,NULL);
        if (!result)
        {

            MessageBox (NULL, TEXT("WriteDataSerial(): WriteFile() failed\n"), TEXT("Error"), MB_OK);  
        return 0;
        }

        return  dwBytesWritten;
}


  
DWORD ReadDataSerial(TCHAR ReceiveBuf[BUFFER_SIZE])

{      
     
      COMSTAT CommStat;
      DWORD dwError,dwBytesRead;
          DWORD bReadStatus;
          
      if(hCom==INVALID_HANDLE_VALUE) return FALSE;
         
      ClearCommError(hCom,&dwError,&CommStat);
         
          bReadStatus=ReadFile(hCom,ReceiveBuf,128,&dwBytesRead,NULL);
       

          if(!bReadStatus)
          {  
                  MessageBox(NULL,TEXT("read failed"),TEXT("error"),MB_OK);
                  return 0;
      }
          return dwBytesRead;
         

}

                   
void  StrToHex(char *str,char *strhex)
{   
        int i;
       
        for(i=0;i<6;i++)
    //for(i=0;*(str+i)!='\0';i++)
        {
          sprintf(strhex+i*3,"%02X ",(unsigned char)*(str+i));
        }
}
void CloseSerial(void)
{

        CloseHandle(hCom);
       
       
}

论坛徽章:
0
2 [报告]
发表于 2005-11-02 15:42 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP