// Rs232Dlg.cpp : implementation file

//

 

#include "stdafx.h"

#include "Rs232.h"

#include "Rs232Dlg.h"

 

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

 

// Window Definition For CommThread Message

HWND hCommWnd;                                      // (2)

 

/////////////////////////////////////////////////////////////////////////////

// CAboutDlg dialog used for App About

 

class CAboutDlg : public CDialog

{

public:

                   CAboutDlg();

 

// Dialog Data

                   //{{AFX_DATA(CAboutDlg)

                   enum { IDD = IDD_ABOUTBOX };

                   //}}AFX_DATA

 

                   // ClassWizard generated virtual function overrides

                   //{{AFX_VIRTUAL(CAboutDlg)

                   protected:

                   virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

                   //}}AFX_VIRTUAL

 

// Implementation

protected:

                   //{{AFX_MSG(CAboutDlg)

                   //}}AFX_MSG

                   DECLARE_MESSAGE_MAP()

};

 

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

                   //{{AFX_DATA_INIT(CAboutDlg)

                   //}}AFX_DATA_INIT

}

 

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

                   CDialog::DoDataExchange(pDX);

                   //{{AFX_DATA_MAP(CAboutDlg)

                   //}}AFX_DATA_MAP

}

 

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

                   //{{AFX_MSG_MAP(CAboutDlg)

                                      // No message handlers

                   //}}AFX_MSG_MAP

END_MESSAGE_MAP()

 

/////////////////////////////////////////////////////////////////////////////

// CRs232Dlg dialog

 

CRs232Dlg::CRs232Dlg(CWnd* pParent /*=NULL*/)

                   : CDialog(CRs232Dlg::IDD, pParent)

{

                   //{{AFX_DATA_INIT(CRs232Dlg)

                                      // NOTE: the ClassWizard will add member initialization here

                   //}}AFX_DATA_INIT

                   // Note that LoadIcon does not require a subsequent DestroyIcon in Win32

                   m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

 

void CRs232Dlg::DoDataExchange(CDataExchange* pDX)

{

                   CDialog::DoDataExchange(pDX);

                   //{{AFX_DATA_MAP(CRs232Dlg)

                   DDX_Control(pDX, IDC_EDIT2, m_Edit2);

                   DDX_Control(pDX, IDC_EDIT1, m_Edit1);

                   //}}AFX_DATA_MAP

}

 

BEGIN_MESSAGE_MAP(CRs232Dlg, CDialog)

                   //{{AFX_MSG_MAP(CRs232Dlg)

                   ON_WM_SYSCOMMAND()

                   ON_WM_PAINT()

                   ON_WM_QUERYDRAGICON()

                   ON_BN_CLICKED(IDC_SEND, OnSend)

                   ON_MESSAGE(WM_COMM_READ, OnCommunication)    // Communication Message Handleer  (2)

                   //}}AFX_MSG_MAP

END_MESSAGE_MAP()

 

/////////////////////////////////////////////////////////////////////////////

// CRs232Dlg message handlers

 

BOOL CRs232Dlg::OnInitDialog()

{

                   CDialog::OnInitDialog();

 

                   // Add "About..." menu item to system menu.

 

                   // IDM_ABOUTBOX must be in the system command range.

                   ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

                   ASSERT(IDM_ABOUTBOX < 0xF000);

 

                   CMenu* pSysMenu = GetSystemMenu(FALSE);

                   if (pSysMenu != NULL)

                   {

                                      CString strAboutMenu;

                                      strAboutMenu.LoadString(IDS_ABOUTBOX);

                                      if (!strAboutMenu.IsEmpty())

                                      {

                                                         pSysMenu->AppendMenu(MF_SEPARATOR);

                                                         pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

                                      }

                   }

 

                   // Set the icon for this dialog.  The framework does this automatically

                   //  when the application's main window is not a dialog

                   SetIcon(m_hIcon, TRUE);                                                 // Set big icon

                   SetIcon(m_hIcon, FALSE);                            // Set small icon

                  

                   // TODO: Add extra initialization here

                   m_ComuPort.OpenPort( "COM1", 9600, 1 );

                   return TRUE;  // return TRUE  unless you set the focus to a control

}

 

void CRs232Dlg::OnSysCommand(UINT nID, LPARAM lParam)

{

                   if ((nID & 0xFFF0) == IDM_ABOUTBOX)

                   {

                                      CAboutDlg dlgAbout;

                                      dlgAbout.DoModal();

                   }

                   else

                   {

                                      CDialog::OnSysCommand(nID, lParam);

                   }

}

 

// If you add a minimize button to your dialog, you will need the code below

//  to draw the icon.  For MFC applications using the document/view model,

//  this is automatically done for you by the framework.

 

void CRs232Dlg::OnPaint()

{

                   if (IsIconic())

                   {

                                      CPaintDC dc(this); // device context for painting

 

                                      SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

 

                                      // Center icon in client rectangle

                                      int cxIcon = GetSystemMetrics(SM_CXICON);

                                      int cyIcon = GetSystemMetrics(SM_CYICON);

                                      CRect rect;

                                      GetClientRect(&rect);

                                      int x = (rect.Width() - cxIcon + 1) / 2;

                                      int y = (rect.Height() - cyIcon + 1) / 2;

 

                                      // Draw the icon

                                      dc.DrawIcon(x, y, m_hIcon);

                   }

                   else

                   {

                                      CDialog::OnPaint();

                   }

 

                   hCommWnd= m_hWnd;                                // (2)

}

 

// The system calls this to obtain the cursor to display while the user drags

//  the minimized window.

HCURSOR CRs232Dlg::OnQueryDragIcon()

{

                   return (HCURSOR) m_hIcon;

}

 

void CRs232Dlg::OnSend()

{

                   // TODO: Add your control notification handler code here

                   CString strTemp;                                                                                    // (3)

                   m_Edit1.GetWindowText(strTemp);

                   m_ComuPort.WriteComm((unsigned char*)(LPCTSTR)strTemp,strTemp.GetLength());

}

 

LONG CRs232Dlg::OnCommunication(UINT port, LONG lParam)  // (2)

{

                   char buff[2048]="";

                   BYTE aByte;

 

                   int size= (m_ComuPort.m_QueueRead).GetSize();

                   for( int i=0; i< size; i++ )

                   {

                                      (m_ComuPort.m_QueueRead).GetByte(&aByte);

                                      if( aByte!= NULL ) buff[i]= aByte;

                                      else { i--; size--; }

                   }

 

                   if(size > 0)

                                      m_Edit2.SetWindowText(buff);

                   return 0;

}