www.pudn.com > wsc4c30.zip > MFC_PGM.CPP


// 
//   mfc_pgm.cpp 
// 
//   MFC_PGM is intended as a simple example of the use of 
//   the Microsoft Foundation Class (MFC) library with the 
//   Windows Standard Serial Comm Library for C/C++ (WSC4C) 
 
#include "stdafx.h" 
#include "resource.h" 
 
#include "wsc.h" 
#include "mfc_pgm.h" 
 
static CWnd * MainWndPtr; 
 
// Display character on screen 
 
void CMainWindow::DisplayChar(int nChar) 
{int Row; 
 // process the character 
 if(nChar==10) return; 
 if(nChar==13) 
   {if(TheRowUpdateWindow(); 
} 
 
// Check one item, unchecking all else 
 
void CMainWindow::CheckOneItem(UINT FirstID, UINT LastID, UINT CheckID) 
{UINT i; 
 CMenu *pMenu; 
 pMenu = MainWndPtr->GetMenu(); 
 for(i=FirstID;i<=LastID;i++) 
   if(i!=CheckID) pMenu->CheckMenuItem(i, MF_BYCOMMAND|MF_UNCHECKED); 
 pMenu->CheckMenuItem(CheckID, MF_BYCOMMAND|MF_CHECKED); 
} 
 
// CMainWindow message map 
 
BEGIN_MESSAGE_MAP( CMainWindow, CFrameWnd ) 
   //{{AFX_MSG_MAP( CMainWindow ) 
   ON_WM_PAINT() 
   ON_WM_TIMER() 
   ON_WM_CHAR() 
   ON_COMMAND(ID_LINE_EXIT,    PgmExit) 
   ON_COMMAND(ID_LINE_ONLINE,  GoOnLine) 
   ON_COMMAND(ID_LINE_OFFLINE, GoOffLine) 
   ON_COMMAND(ID_LINE_EXIT,    PgmExit) 
   ON_COMMAND(ID_PORT_COM1,  SetCOM1) 
   ON_COMMAND(ID_PORT_COM2,  SetCOM2) 
   ON_COMMAND(ID_PORT_COM3,  SetCOM3) 
   ON_COMMAND(ID_PORT_COM4,  SetCOM4) 
   ON_COMMAND(ID_BAUD_2400,  Set2400) 
   ON_COMMAND(ID_BAUD_9600,  Set9600) 
   ON_COMMAND(ID_BAUD_19200, Set19200) 
   ON_COMMAND(ID_BAUD_38400, Set38400) 
   ON_COMMAND(ID_BAUD_57600, Set57600) 
   //}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
CTheApp NEAR theApp; 
 
// PgmExit: Exits application 
 
void CMainWindow::PgmExit(void) 
{// Close serial port 
 SioDone(ThePort); 
 PostQuitMessage(0); 
} 
 
// SetCOM1: Selects COM1 
void CMainWindow::SetCOM1(void) 
{ 
 ThePort = COM1; 
 CheckOneItem(ID_PORT_COM1, ID_PORT_COM4, ID_PORT_COM1); 
} 
 
// SetCOM2: select COM2 
 
void CMainWindow::SetCOM2(void) 
{ 
 ThePort = COM2; 
 CheckOneItem(ID_PORT_COM1, ID_PORT_COM4, ID_PORT_COM2); 
} 
 
// SetCOM3: Selects COM3 
 
void CMainWindow::SetCOM3(void) 
{ 
 ThePort = COM3; 
 CheckOneItem(ID_PORT_COM1, ID_PORT_COM4, ID_PORT_COM3); 
} 
 
// SetCOM4: Selects COM4 
 
void CMainWindow::SetCOM4(void) 
{ 
 ThePort = COM4; 
 CheckOneItem(ID_PORT_COM1, ID_PORT_COM4, ID_PORT_COM4); 
} 
 
// Set2400: Selects 2400 baud 
 
void CMainWindow::Set2400(void) 
{ 
 TheBaud = WSC_Baud2400; 
 CheckOneItem(ID_BAUD_300, ID_BAUD_57600, ID_BAUD_2400); 
} 
 
// Set9600: Selects 4800 baud 
 
void CMainWindow::Set9600(void) 
{ 
 TheBaud = WSC_Baud9600; 
 CheckOneItem(ID_BAUD_300, ID_BAUD_57600, ID_BAUD_9600); 
} 
 
// Set19200: Selects 19200 baud 
 
void CMainWindow::Set19200(void) 
{ 
 TheBaud = WSC_Baud19200; 
 CheckOneItem(ID_BAUD_300, ID_BAUD_57600, ID_BAUD_19200); 
} 
 
// Set38400: Selects 38400 baud 
 
void CMainWindow::Set38400(void) 
{ 
 TheBaud = WSC_Baud38400; 
 CheckOneItem(ID_BAUD_300, ID_BAUD_57600, ID_BAUD_38400); 
} 
 
// Set57600: Selects 57600 baud 
 
void CMainWindow::Set57600(void) 
{ 
 TheBaud = WSC_Baud57600; 
 CheckOneItem(ID_BAUD_300, ID_BAUD_57600, ID_BAUD_57600); 
} 
 
// GoOnLine: Reset port & set baud rate 
 
void CMainWindow::GoOnLine(void) 
{// Open serial port 
 CMenu *pMenu; 
 DisplayLine("Going online . . ."); 
 pMenu = MainWndPtr->GetMenu(); 
 pMenu->CheckMenuItem(ID_LINE_OFFLINE, MF_BYCOMMAND|MF_UNCHECKED); 
 pMenu->CheckMenuItem(ID_LINE_ONLINE,  MF_BYCOMMAND|MF_CHECKED); 
 pMenu->EnableMenuItem(ID_LINE_ONLINE, MF_BYCOMMAND|MF_GRAYED); 
 SioReset(ThePort,2048,512); 
 SioBaud(ThePort,TheBaud); 
 SioDTR(ThePort,'S'); 
 SioRTS(ThePort,'S'); 
 OnLineFlag = TRUE; 
} 
 
// GoOffLine: Close port 
 
void CMainWindow::GoOffLine(void) 
{// Close serial port 
 CMenu *pMenu; 
 pMenu = MainWndPtr->GetMenu(); 
 DisplayLine("Shutting down port"); 
 pMenu->CheckMenuItem(ID_LINE_ONLINE,  MF_BYCOMMAND|MF_UNCHECKED); 
 pMenu->CheckMenuItem(ID_LINE_OFFLINE, MF_BYCOMMAND|MF_CHECKED); 
 pMenu->EnableMenuItem(ID_LINE_ONLINE, MF_BYCOMMAND|MF_ENABLED); 
 SioDone(ThePort); 
 OnLineFlag = FALSE; 
} 
 
// CMainWindow: constructor 
 
CMainWindow::CMainWindow() 
{int Row; 
 CString s = "WSC Test"; 
 LoadAccelTable( "MainAccelTable" ); 
 Create( NULL, "MFC Example Program", 
      WS_OVERLAPPEDWINDOW, rectDefault, NULL, "MainMenu" ); 
 ThePort = COM1; 
 TheBaud = WSC_Baud38400; 
 OnLineFlag = FALSE; 
 for(Row=0;RowUpdateWindow(); 
    InvalidateFlag = FALSE; 
   } 
 if(!OnLineFlag) return; 
 for(i=0;i<512;i++) 
   {Code = SioGetc(ThePort); 
    if(Code<0) break; 
    DisplayChar(Code); 
   } 
 if(i>0) 
   {Invalidate(TRUE); 
    MainWndPtr->UpdateWindow(); 
   } 
} 
 
// OnPaint: 
 
void CMainWindow::OnPaint() 
{int Row; 
 CPaintDC dc( this ); 
 CRect rect; 
 GetClientRect( rect ); 
 dc.SetTextAlign( TA_BASELINE | TA_LEFT ); 
 dc.SetTextColor( ::GetSysColor( COLOR_WINDOWTEXT ) ); 
 dc.SetBkMode(TRANSPARENT); 
 dc.SelectStockObject(ANSI_FIXED_FONT); 
 for(Row=0;Row<=TheRow;Row++) 
   {// display the row 
    dc.TextOut( 4, 16+(Row<<4), Buffer[Row], Buffer[Row].GetLength() ); 
   } 
} 
 
// InitInstance: 
 
BOOL CTheApp::InitInstance() 
{SetDialogBkColor(); //hook gray dialogs 
 m_pMainWnd = new CMainWindow(); 
 m_pMainWnd->ShowWindow( m_nCmdShow ); 
 m_pMainWnd->UpdateWindow(); 
 MainWndPtr = m_pMainWnd; 
 return TRUE; 
}