?? vcnetcommdlg.cpp
字號:
// VCNetCommDlg.cpp : implementation file
//
#include "stdafx.h"
#include "VCNetComm.h"
#include "VCNetCommDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CVCNetCommDlg dialog
CVCNetCommDlg::CVCNetCommDlg(CWnd* pParent /*=NULL*/)
: CDialog(CVCNetCommDlg::IDD, pParent)
, m_nPortNum(2)
, m_sSendData(_T(""))
, m_bAutoClearSendData(FALSE)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CVCNetCommDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_PORTNUM, m_nPortNum);
DDX_Text(pDX, IDC_EDIT_SENDDATA, m_sSendData);
DDX_Control(pDX, IDC_EDIT_RECVDATA, m_RecvDataEditCtrl);
DDX_Check(pDX, IDC_CHECK_AUTOCLEAR, m_bAutoClearSendData);
}
BEGIN_MESSAGE_MAP(CVCNetCommDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON_OPENPORT, &CVCNetCommDlg::OnBnClickedButtonOpenport)
ON_BN_CLICKED(IDC_BUTTON_SEND, &CVCNetCommDlg::OnBnClickedButtonSend)
ON_BN_CLICKED(IDC_BUTTON_CLEAR, &CVCNetCommDlg::OnBnClickedButtonClear)
END_MESSAGE_MAP()
// CVCNetCommDlg message handlers
BOOL CVCNetCommDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 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
#ifdef WIN32_PLATFORM_WFSP
if (!m_dlgCommandBar.Create(this) ||
!m_dlgCommandBar.InsertMenuBar(IDR_MAINFRAME))
{
TRACE0("Failed to create CommandBar\n");
return FALSE; // fail to create
}
#endif // WIN32_PLATFORM_WFSP
// TODO: Add extra initialization here
m_SerialPort.set_data_callback(OnDataFromPort,this);
CComboBox *pBox;
int index;
pBox=(CComboBox *)GetDlgItem(IDC_COMBO_BAUDRATE);
pBox->ResetContent();
index=pBox->AddString(_T("9600"));
pBox->SetItemData(index,CBR_9600);
index=pBox->AddString(_T("19200"));
pBox->SetItemData(index,CBR_19200);
index=pBox->AddString(_T("38400"));
pBox->SetItemData(index,CBR_38400);
index=pBox->AddString(_T("57600"));
pBox->SetItemData(index,CBR_57600);
index=pBox->AddString(_T("115200"));
pBox->SetItemData(index,CBR_115200);
pBox->SetCurSel(4);
return TRUE; // return TRUE unless you set the focus to a control
}
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CVCNetCommDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
DRA::RelayoutDialog(
AfxGetInstanceHandle(),
this->m_hWnd,
DRA::GetDisplayMode() != DRA::Portrait ?
MAKEINTRESOURCE(IDD_VCNETCOMM_DIALOG_WIDE) :
MAKEINTRESOURCE(IDD_VCNETCOMM_DIALOG));
}
#endif
/*
打開串口
*/
void CVCNetCommDlg::OnBnClickedButtonOpenport()
{
UpdateData();
if(m_SerialPort.IsOpen())
{
m_SerialPort.ClosePort();
GetDlgItem(IDC_COMBO_BAUDRATE)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_PORTNUM)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON_OPENPORT)->SetWindowText(_T("Open"));
}
else
{
CComboBox *pBox;
pBox=(CComboBox *)GetDlgItem(IDC_COMBO_BAUDRATE);
m_SerialPort.m_lBaudRate=pBox->GetItemData(pBox->GetCurSel());
if(m_SerialPort.OpenPort(m_nPortNum))
{
GetDlgItem(IDC_COMBO_BAUDRATE)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_PORTNUM)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_OPENPORT)->SetWindowText(_T("Close"));
}
else
{
MessageBox(_T("Open Port Error"),_T("Info"),MB_ICONINFORMATION);
}
}
}
/*
從串口返回的數據
*/
void CVCNetCommDlg::OnDataFromPort(void * data, DWORD nDataCount,void * context)
{
CVCNetCommDlg *pDlg;
static DWORD count=0;
pDlg=(CVCNetCommDlg *)context;
char *buf;
CString log;
char tt[5];
buf=(char *)data;
for(DWORD i=0;i<nDataCount;i++)
{
sprintf(tt,"%02X ",(BYTE*)(buf[i] & 0xff));
log+=tt;
count++;
if(count %10 ==0)
{
log+=_T("\r\n");
}
}
pDlg->m_RecvDataEditCtrl.SetSel(pDlg->m_RecvDataEditCtrl.GetWindowTextLength(),pDlg->m_RecvDataEditCtrl.GetWindowTextLength());
pDlg->m_RecvDataEditCtrl.ReplaceSel(log);
}
/*
發送數據
*/
void CVCNetCommDlg::OnBnClickedButtonSend()
{
char * pszANSIString;
int len;
UpdateData();
// m_sSendData=_T("hello");
len=m_sSendData.GetLength()*2;
pszANSIString=(char *)malloc(len);
memset(pszANSIString,0,len);
WideCharToMultiByte ( CP_ACP,
WC_COMPOSITECHECK,
m_sSendData.GetBuffer(0),
-1,
pszANSIString,
len,
NULL,
NULL);
len=m_SerialPort.WriteData((BYTE *)pszANSIString,strlen(pszANSIString));
if(m_bAutoClearSendData)
{
m_sSendData=_T("");
}
// m_nSendCount+=len;
free(pszANSIString);
/* CString tmp;
tmp.Format(_T("%d"),m_nSendCount);
m_SendCountCtrl.SetWindowText(tmp);*/
UpdateData(FALSE);
}
void CVCNetCommDlg::OnBnClickedButtonClear()
{
m_sSendData=_T("");
m_RecvDataEditCtrl.SetWindowText(_T(""));
UpdateData(FALSE);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -