?? common_serialdlg.cpp
字號:
// ComMonDlg.cpp : implementation file
//
#include "stdafx.h"
#include "ComMon_SERIAL.h"
#include "ComMon_SERIALDlg.h"
#include "SerialPort.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define CLOCK1 1
#define CLOCK2 2
static LONG HexToChar(void* pVoidOut, int nInSize, void* pVoidIn)
{
LPCTSTR lpszIn = (LPTSTR)pVoidIn;
if(!pVoidIn)
return 0L;
if(!pVoidOut)
return -1L;
CString strOut;
strOut.Format("%02x", lpszIn);
strcpy((LPTSTR)pVoidOut, (LPCTSTR)strOut);
return strOut.GetLength();
}
static LONG CharToHex(void* pVoidOut, int nInSize, void* pVoidIn, BOOL bTrimSpace)
{
BYTE* pByte = (BYTE*)pVoidIn;
BYTE* pByteOut = (BYTE*)pVoidOut;
if(!pByteOut)
{
return nInSize / 2;
}
else
{
int i;
if(bTrimSpace)
{
BYTE* pBuf;
if(pByte[nInSize - 1] == 0x20)
{
pBuf = new BYTE[nInSize / 3 + 1];
for(i = 0; i < nInSize / 3; i ++)
{
BYTE b1 = isalpha(pByte[3 * i]) ?
pByte[3 * i] - 0x37 : pByte[3 * i] - 0x30;
BYTE b2 = isalpha(pByte[3 * i + 1]) ?
pByte[3 * i + 1] - 0x37 : pByte[3 * i + 1] - 0x30;
b1 <<= 4;
b1 |= b2;
pBuf[i] = b1;
}
}
else
{
pBuf = new BYTE[(nInSize + 1) / 3 + 1];
for(i = 0; i < (nInSize + 1) / 3; i ++)
{
BYTE b1 = isalpha(pByte[3 * i]) ?
pByte[3 * i] - 0x37 : pByte[3 * i] - 0x30;
BYTE b2 = isalpha(pByte[3 * i + 1]) ?
pByte[3 * i + 1] - 0x37 : pByte[3 * i + 1] - 0x30;
b1 <<= 4;
b1 |= b2;
pBuf[i] = b1;
}
}
memcpy(pByteOut, pBuf, i);
delete pBuf;
}
else
{
BYTE* pBuf = new BYTE[nInSize / 2 + 1];
for(i = 0; i < nInSize / 2; i ++)
{
BYTE b1 = isalpha(pByte[2 * i]) ?
pByte[2 * i] - 0x37 : pByte[2 * i] - 0x30;
BYTE b2 = isalpha(pByte[2 * i + 1]) ?
pByte[2 * i + 1] - 0x37 : pByte[2 * i + 1] - 0x30;
b1 <<= 4;
b1 |= b2;
pBuf[i] = b1;
}
memcpy(pByteOut, pBuf, i);
delete pBuf;
}
return i;
}
}
/////////////////////////////////////////////////////////////////////////////
// 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()
/////////////////////////////////////////////////////////////////////////////
// CCustomFileDlg dialog
class CCustomFileDlg : public CFileDialog
{
DECLARE_DYNAMIC(CCustomFileDlg)
public:
CCustomFileDlg(BOOL bOpenFileDialog, // TRUE for FileOpen, FALSE for FileSaveAs
LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL);
void SetFileTitle(LPCTSTR lpszTitle) {strcpy(m_szFileTitle, (LPCTSTR)lpszTitle);}
protected:
//{{AFX_MSG(CCustomFileDlg)
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
// CCustomFileDlg
IMPLEMENT_DYNAMIC(CCustomFileDlg, CFileDialog)
CCustomFileDlg::CCustomFileDlg(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName,
DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) :
CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd)
{
}
BEGIN_MESSAGE_MAP(CCustomFileDlg, CFileDialog)
//{{AFX_MSG_MAP(CCustomFileDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CCustomFileDlg::OnInitDialog()
{
if(CFileDialog::OnInitDialog() == TRUE) {
HICON hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
CWnd* pParent = GetParent();
if(pParent != NULL) { // null in NT 3.51
// there's a phantom parent dialog -- gotta use it
pParent->SetIcon(hIcon, TRUE); // Set big icon
pParent->SetIcon(hIcon, FALSE); // Set small icon
}
return TRUE;
}
return FALSE;
}
/////////////////////////////////////////////////////////////////////////////
// CComMon_SERIALDlg dialog
const int WM_INITINTERFACE = WM_USER + 1001;
CComMon_SERIALDlg::CComMon_SERIALDlg(CWnd* pParent /*=NULL*/)
: CDialog(CComMon_SERIALDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CComMon_SERIALDlg)
m_sSelCom1 = _T("");
m_sSelBaud1 = _T("");
m_sSelParity1 = _T("");
m_sSelDatabit1 = _T("");
m_sSelStopbit1 = _T("");
m_sSelCom2 = _T("");
m_sSelBaud2 = _T("");
m_sSelParity2 = _T("");
m_sSelDatabit2 = _T("");
m_sSelStopbit2 = _T("");
m_sRESnd1 = _T("");
m_sRERcv1 = _T("");
m_sRERcv2 = _T("");
m_sRESnd2 = _T("");
m_sComState1 = _T("關(guān) 閉");
m_sComState2 = _T("關(guān) 閉");
m_nRecvBytes1 = 0;
m_nRecvBytes2 = 0;
m_nSendBytes1 = 0;
m_nSendBytes2 = 0;
m_nSendCycle1 = 1000;
m_nSendCycle2 = 1000;
m_nBufSize = 512;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_aPorts.SetSize(0);
m_aByteRcv1.SetSize(0);
m_aByteSnd1.SetSize(0);
m_aByteRcv2.SetSize(0);
m_aByteSnd2.SetSize(0);
m_bClock1_Open = FALSE;
m_bClock2_Open = FALSE;
AfxInitRichEdit();
}
CComMon_SERIALDlg::~CComMon_SERIALDlg()
{
for(int i = 0; i < m_aPorts.GetSize(); i ++)
{
if(AfxIsValidAddress(m_aPorts.GetAt(i), sizeof(CSerialPort)))
{
delete (CSerialPort *)m_aPorts.GetAt(i);
}
}
}
void CComMon_SERIALDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CComMon_SERIALDlg)
DDX_Control(pDX, IDC_RERECV2, m_reRecv2);
DDX_Control(pDX, IDC_RERECV1, m_reRecv1);
DDX_Control(pDX, IDC_RESEND2, m_reSend2);
DDX_Control(pDX, IDC_RESEND1, m_reSend1);
DDX_Control(pDX, IDC_ESENDCYCLE2, m_eSendCycle2);
DDX_Control(pDX, IDC_ESENDCYCLE1, m_eSendCycle1);
DDX_Control(pDX, IDC_CHECK_NORCV, m_chNotRecv);
DDX_Control(pDX, IDC_CTRANSMIT_1AND2, m_chTransmit1And2);
DDX_Control(pDX, IDC_CSENDHEX2, m_chSendHex2);
DDX_Control(pDX, IDC_CSENDHEX1, m_chSendHex1);
DDX_Control(pDX, IDC_CAUTOSND2, m_chAutoSnd2);
DDX_Control(pDX, IDC_CAUTOSND1, m_chAutoSnd1);
DDX_Control(pDX, IDC_CRECVHEX2, m_chRcvHex2);
DDX_Control(pDX, IDC_CRECVHEX1, m_chRcvHex1);
DDX_Control(pDX, IDC_CAUTONLINE2, m_chAutoNLine2);
DDX_Control(pDX, IDC_CAUTONLINE1, m_chAutoNLine1);
DDX_Control(pDX, IDC_CSELCHECKBIT2, m_cSelParity2);
DDX_Control(pDX, IDC_CSELCHECKBIT1, m_cSelParity1);
DDX_Control(pDX, IDC_CSELCOM2, m_cSelCom2);
DDX_Control(pDX, IDC_CSELCOM1, m_cSelCom1);
DDX_Control(pDX, IDC_CSELSTOPBIT2, m_cSelStopbit2);
DDX_Control(pDX, IDC_CSELSTOPBIT1, m_cSelStopbit1);
DDX_Control(pDX, IDC_CSELDATABIT2, m_cSelDatabit2);
DDX_Control(pDX, IDC_CSELDATABIT1, m_cSelDatabit1);
DDX_Control(pDX, IDC_CSELBAUD2, m_cSelBaud2);
DDX_Control(pDX, IDC_CSELBAUD1, m_cSelBaud1);
DDX_Control(pDX, IDC_BSTARTCOM2, m_bstartcom2);
DDX_Control(pDX, IDC_BSTARTCOM1, m_startcom1);
DDX_Control(pDX, IDC_BSEND2, m_bSend2);
DDX_Control(pDX, IDC_BSEND1, m_bSend1);
DDX_CBString(pDX, IDC_CSELBAUD2, m_sSelBaud2);
DDX_CBString(pDX, IDC_CSELDATABIT1, m_sSelDatabit1);
DDX_CBString(pDX, IDC_CSELDATABIT2, m_sSelDatabit2);
DDX_CBString(pDX, IDC_CSELSTOPBIT2, m_sSelStopbit2);
DDX_CBString(pDX, IDC_CSELCOM1, m_sSelCom1);
DDX_CBString(pDX, IDC_CSELCOM2, m_sSelCom2);
DDX_CBString(pDX, IDC_CSELBAUD1, m_sSelBaud1);
DDX_CBString(pDX, IDC_CSELCHECKBIT1, m_sSelParity1);
DDX_CBString(pDX, IDC_CSELCHECKBIT2, m_sSelParity2);
DDX_CBString(pDX, IDC_CSELSTOPBIT1, m_sSelStopbit1);
DDX_Text(pDX, IDC_RESEND1, m_sRESnd1);
DDX_Text(pDX, IDC_RERECV1, m_sRERcv1);
DDX_Text(pDX, IDC_RERECV2, m_sRERcv2);
DDX_Text(pDX, IDC_RESEND2, m_sRESnd2);
DDX_Text(pDX, IDC_ECOMSTATE1, m_sComState1);
DDX_Text(pDX, IDC_ECOMSTATE2, m_sComState2);
DDX_Text(pDX, IDC_ERECVBYTE1, m_nRecvBytes1);
DDX_Text(pDX, IDC_ERECVBYTE2, m_nRecvBytes2);
DDX_Text(pDX, IDC_ESENDBYTE1, m_nSendBytes1);
DDX_Text(pDX, IDC_ESENDBYTE2, m_nSendBytes2);
DDX_Text(pDX, IDC_ESENDCYCLE1, m_nSendCycle1);
DDX_Text(pDX, IDC_ESENDCYCLE2, m_nSendCycle2);
DDX_Text(pDX, IDC_EBUFSIZE, m_nBufSize);
DDV_MinMaxUInt(pDX, m_nBufSize, 16, 65536);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CComMon_SERIALDlg, CDialog)
//{{AFX_MSG_MAP(CComMon_SERIALDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_OK, OnCOK)
ON_BN_CLICKED(IDC_CANCEL, OnCCancel)
ON_BN_CLICKED(IDC_BSTARTCOM1, OnStartCom1)
ON_BN_CLICKED(IDC_BSTARTCOM2, OnStartCom2)
ON_BN_CLICKED(IDC_BSEND1, OnSend1)
ON_BN_CLICKED(IDC_BSEND2, OnSend2)
ON_BN_CLICKED(IDC_CTRANSMIT_1AND2, OnTransmit_1AND2)
ON_BN_CLICKED(IDC_CAUTORCVSND1, OnAutoRcvSnd1)
ON_BN_CLICKED(IDC_CAUTORCVSND2, OnAutoRcvSnd2)
ON_CBN_EDITCHANGE(IDC_CSELCOM1, OnEditchangeCom1)
ON_CBN_EDITCHANGE(IDC_CSELBAUD1, OnEditchangeBaud1)
ON_CBN_EDITCHANGE(IDC_CSELDATABIT1, OnEditchangeDatabit1)
ON_CBN_EDITCHANGE(IDC_CSELCHECKBIT1, OnEditchangeCheckbit1)
ON_CBN_EDITCHANGE(IDC_CSELSTOPBIT1, OnEditchangeStopbit1)
ON_CBN_EDITCHANGE(IDC_CSELCOM2, OnEditchangeCom2)
ON_CBN_EDITCHANGE(IDC_CSELBAUD2, OnEditchangeBaud2)
ON_CBN_EDITCHANGE(IDC_CSELDATABIT2, OnEditchangeDatabit2)
ON_CBN_EDITCHANGE(IDC_CSELCHECKBIT2, OnEditchangeCheckbit2)
ON_CBN_EDITCHANGE(IDC_CSELSTOPBIT2, OnEditchangeStopbit2)
ON_CBN_SELCHANGE(IDC_CSELCHECKBIT1, OnSelchangeSelCheckbit1)
ON_CBN_SELCHANGE(IDC_CSELBAUD1, OnSelchangeSelBaud1)
ON_CBN_SELCHANGE(IDC_CSELBAUD2, OnSelchangeSelBaud2)
ON_CBN_SELCHANGE(IDC_CSELCHECKBIT2, OnSelchangeSelCheckbit2)
ON_CBN_SELCHANGE(IDC_CSELCOM1, OnSelchangeSelCom1)
ON_CBN_SELCHANGE(IDC_CSELCOM2, OnSelchangeSelCom2)
ON_CBN_SELCHANGE(IDC_CSELDATABIT1, OnSelchangeSelDatabit1)
ON_CBN_SELCHANGE(IDC_CSELDATABIT2, OnSelchangeSelDatabit2)
ON_CBN_SELCHANGE(IDC_CSELSTOPBIT1, OnSelchangeSelStopbit1)
ON_CBN_SELCHANGE(IDC_CSELSTOPBIT2, OnSelchangeSelStopbit2)
ON_BN_CLICKED(IDC_BCLEARRCV1, OnClearRcv1)
ON_BN_CLICKED(IDC_BCLEARSND1, OnClearSnd1)
ON_BN_CLICKED(IDC_BCLEARRCV2, OnClearRcv2)
ON_BN_CLICKED(IDC_BCLEARSND2, OnClearSnd2)
ON_BN_CLICKED(IDC_BCLEARCOUNT1, OnClearCount1)
ON_BN_CLICKED(IDC_BCLEARCOUNT2, OnClearCount2)
ON_WM_SHOWWINDOW()
ON_WM_TIMER()
ON_EN_CHANGE(IDC_ESENDCYCLE1, OnChangeESendCycle1)
ON_EN_CHANGE(IDC_ESENDCYCLE2, OnChangeESendCycle2)
ON_EN_CHANGE(IDC_RESEND1, OnChangeRESend1)
ON_EN_CHANGE(IDC_RESEND2, OnChangeRESend2)
ON_NOTIFY(EN_SELCHANGE, IDC_RESEND1, OnSelChangeRESend1)
ON_BN_CLICKED(IDC_BSAVEDATA1, OnSaveData1)
ON_BN_CLICKED(IDC_BSAVEDATA2, OnSaveData2)
ON_BN_CLICKED(IDC_CAUTONLINE1, OnAutoNLine1)
ON_BN_CLICKED(IDC_CAUTONLINE2, OnAutoNLine2)
ON_BN_CLICKED(IDC_CAUTOSND1, OnAutoSnd1)
ON_BN_CLICKED(IDC_CAUTOSND2, OnAutoSnd2)
ON_BN_CLICKED(IDC_OK, OnOK)
ON_BN_CLICKED(IDC_CANCEL, OnCancel)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_INITINTERFACE, OnInitInterface)
ON_MESSAGE(WM_COMM_EVENT, OnCommEvent)
ON_MESSAGE(WM_COMM_RXCHAR, OnComRXChars)
ON_MESSAGE(WM_COMM_ERROR, OnCommError)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CComMon_SERIALDlg message handlers
BOOL CComMon_SERIALDlg::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
m_reSend1.SendMessage(EM_SETEVENTMASK, 0, ENM_UPDATE | ENM_CHANGE | ENM_SELCHANGE);
m_reSend2.SendMessage(EM_SETEVENTMASK, 0, ENM_UPDATE | ENM_CHANGE | ENM_SELCHANGE);
m_reRecv1.SendMessage(EM_SETEVENTMASK, 0, ENM_UPDATE | ENM_CHANGE | ENM_SELCHANGE);
m_reRecv2.SendMessage(EM_SETEVENTMASK, 0, ENM_UPDATE | ENM_CHANGE | ENM_SELCHANGE);
// init the ports
int j = 0;
for (int i = 0; i < 256; i++)
{
CSerialPort* pSerialPort = new CSerialPort;
if (pSerialPort->InitPort(this, i + 1, i == 0 ? 9600 : 19200))
{
if(!j)
{
j = i + 1;
}
CString sCom;
sCom.Format("COM%d", i + 1);
m_cSelCom1.AddString(sCom);
m_cSelCom2.AddString(sCom);
pSerialPort->SetComName(sCom);
pSerialPort->ClosePort();
m_aPorts.Add(pSerialPort);
}
else
{
delete pSerialPort;
}
}
if(j)
{
m_cSelCom1.SetCurSel(0);
m_cSelParity1.SetCurSel(0);
m_cSelDatabit1.SetCurSel(0);
m_cSelStopbit1.SetCurSel(0);
for(int i = 0; m_cSelBaud1.GetCount(); i ++)
{
CString sLB;
m_cSelBaud1.GetLBText(i, sLB);
if(sLB == "9600")
{
m_cSelBaud1.SetCurSel(i);
break;
}
}
if(m_cSelCom2.GetCount() > 1)
{
m_cSelCom2.SetCurSel(1);
m_cSelParity2.SetCurSel(0);
m_cSelDatabit2.SetCurSel(0);
m_cSelStopbit2.SetCurSel(0);
for(i = 0; m_cSelBaud2.GetCount(); i ++)
{
CString sLB;
m_cSelBaud2.GetLBText(i, sLB);
if(sLB == "9600")
{
m_cSelBaud2.SetCurSel(i);
break;
}
}
}
m_cSelDatabit1.SetCurSel(m_cSelDatabit1.GetCount() - 1);
m_cSelDatabit2.SetCurSel(m_cSelDatabit2.GetCount() - 1);
}
PostMessage(WM_INITINTERFACE);
m_bComNO1_Open = FALSE;
m_bComNO2_Open = FALSE;
m_chRcvHex1.SetCheck(1);
m_chSendHex1.SetCheck(1);
m_chRcvHex2.SetCheck(1);
m_chSendHex2.SetCheck(1);
return TRUE; // return TRUE unless you set the focus to a control
}
void CComMon_SERIALDlg::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 CComMon_SERIALDlg::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();
}
UpdateData();
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CComMon_SERIALDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CComMon_SERIALDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog::OnShowWindow(bShow, nStatus);
}
void CComMon_SERIALDlg::OnCOK()
{
LookupSerialState();
CDialog::OnOK();
}
void CComMon_SERIALDlg::OnCCancel()
{
LookupSerialState();
CDialog::OnCancel();
}
void CComMon_SERIALDlg::OnStartCom1()
{
UpdateData();
int i = m_cSelCom1.GetCurSel();
if(((CSerialPort*)m_aPorts[i])->GetComName() == m_sSelCom1)
{
static BOOL bStart = FALSE;
if(bStart)
{
((CSerialPort *)m_aPorts[i])->NeedThreadStopping(FALSE);
((CSerialPort *)m_aPorts[i])->ClosePort();
m_cSelBaud1.EnableWindow();
m_cSelCom1.EnableWindow();
m_cSelDatabit1.EnableWindow();
m_cSelStopbit1.EnableWindow();
m_cSelParity1.EnableWindow();
SetDlgItemText(IDC_BSTARTCOM1, "打開串口");
m_sComState1 = "關(guān) 閉";
if(m_chAutoSnd1.GetCheck())
KillTimer(CLOCK1);
m_chAutoSnd1.SetCheck(0);
m_chAutoSnd1.EnableWindow(FALSE);
m_eSendCycle1.EnableWindow(FALSE);
m_chTransmit1And2.SetCheck(0);
m_chTransmit1And2.EnableWindow(FALSE);
m_bClock1_Open = FALSE;
m_bComNO1_Open = FALSE;
}
else
{
CString sComName;
int nPos = -1;
m_cSelCom1.GetWindowText(sComName);
sComName.MakeUpper();
if((nPos = sComName.Find("COM")) == -1) return;
char* sComNo;
char* sComTemp = strdup(sComName);
sComNo = sComTemp + lstrlen("COM");
((CSerialPort *)m_aPorts[i])->NeedThreadStopping(TRUE);
if(!((CSerialPort *)m_aPorts[i])->InitPort(this, atoi(sComNo), atoi(m_sSelBaud1),
m_sSelParity1[0], atoi(m_sSelDatabit1), atoi(m_sSelStopbit1)))
{
delete sComTemp;
return;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -