📄 serialasdlg.cpp
字号:
CString str ;
m_sSaveDir = CString(szPath);
m_sSaveDir.TrimRight(_T("\\"));
GetDlgItemText(IDC_SAVEFILENAME,str);
str = m_sSaveDir +_T("\\") + str;
SetDlgItemText(IDC_STATICSAVEFILEPATH,str);
}
}
//把数据写入文件
void CSerialAsDlg::WriteMyFile(CString filename)
{
// filename.MakeLower();
CString str;
GetDlgItemText(IDC_RICHEDITREVDATA,str);
/* CString strFileName,sPath;
strFileName = filename;
CString sFileName;
GetDlgItemText(IDC_SAVEFILENAME,sFileName);
sFileName.MakeLower();
strFileName.TrimRight(sFileName);
strFileName.TrimRight(_T("\\"));
int index = strFileName.Find(_T('\\'),0);
if(index == 0xffffffff)
{
strFileName = strFileName + _T("\\")+ sFileName;
}
else
{
CString sTemp = strFileName;
CString sSubTemp;
while(1)
{
CFileFind finder;
int length = sTemp.GetLength();
BOOL bFlag = finder.FindFile(sTemp);
if(!bFlag)
{
CFilePro::CreateFolder(strFileName);
break;
}
index = 0;
int tempIndex = 0;
index = str.Find(_T("\\"),0);
if(index = 0xffffffff)
break;
while(index!=0xffffffff)
{
tempIndex = index;
index = sTemp.Find(_T("\\"));
}
sSubTemp = sTemp.Right(length - tempIndex);
sTemp.TrimRight(sSubTemp);
sTemp.TrimRight(_T("\\"));
index = str.Find(_T("\\"),0);
if(index = 0xffffffff)
break;
index = str.Find(_T("\\"),index);
if(index = 0xffffffff)
break;
}
}*/
// WIN32_FIND_DATA wfd;
// HANDLE handle = ::FindFirstFile(strFileName,&wfd);
// if(INVALID_HANDLE_VALUE==handle||wfd.dwFileAttributes&&FILE_ATTRIBUTE_DIRECTORY!=FILE_ATTRIBUTE_DIRECTORY)
// AfxMessageBox("aaa");
if(PathFileExists(filename))
{
if(!(MessageBox(_T("已经存在一个同名的文件,要覆盖吗?"),_T("提示"),MB_OKCANCEL)==IDOK))
{
return;
}
}
DWORD len = str.GetLength();
if(len ==0) return;
CFile file;
CFileException fe;
if(!file.Open(filename,CFile::modeCreate|CFile::modeWrite,&fe))
{
fe.ReportError();
return ;
}
TRY
{
// BYTE *pTemp = new BYTE[len];
// pTemp = (BYTE *)str.GetBuffer(len);
file.Write(str,len);
// str.ReleaseBuffer();
file.Close();
}
CATCH(CFileException ,e)
{
file.Abort(); // will not throw an exception
e->ReportError();
return;
}
END_CATCH
MessageBox(_T("文件保存成功!"),_T("提示"),MB_OK);
}
void CSerialAsDlg::OnOK()
{
}
BOOL CSerialAsDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->hwnd==GetDlgItem(IDC_EDITSENDPERIOD)->m_hWnd)
{
if(pMsg->wParam==VK_RETURN)
{
CString str;
GetDlgItem(IDC_EDITSENDPERIOD)->GetWindowText(str);
int iPeriod = atoi(str);
if(iPeriod==0)
{
MessageBox(_T("请选择一个合适的周期!"),_T("提示!"),MB_ICONERROR);
return TRUE;
}
if(m_bAutoSend)
{
KillTimer(TIME_ID_SEND);
SetTimer(TIME_ID_SEND,iPeriod,NULL);
}
return TRUE; //若为FALSE,此段代码要运行两次!!!
}
}
return CDialog::PreTranslateMessage(pMsg);
}
void CSerialAsDlg::OnChangeSavefilename()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
CString str;
GetDlgItemText(IDC_SAVEFILENAME,str);
if(1)
{
m_OldSaveFileName = str;
}
else
{
SetDlgItemText(IDC_SAVEFILENAME,m_OldSaveFileName);
return;
}
str = m_sSaveDir +_T("\\") + str;
SetDlgItemText(IDC_STATICSAVEFILEPATH,str);
}
DWORD CSerialAsDlg::GetByteRate()
{
CString sPort;
DWORD dwBaudRate;
BYTE byDataBits;
BYTE byParity;
BYTE byStopBits;
m_ConfigPort.GetParam(sPort,dwBaudRate,byDataBits,byParity,byStopBits);
float fStopBit = 0;
switch(byStopBits)
{
case 0:
fStopBit = 1;
break;
case 1:
fStopBit = 1.5;
break;
case 2:
fStopBit = 2;;
break;
default:
fStopBit = 1;
break;
}
if(byParity!=0)
{
byParity = 1;
}
return (dwBaudRate/(byDataBits+fStopBit+byParity+1));
}
BOOL CSerialAsDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
/* CClientDC dc(this);
CRect rect;
GetClientRect(&rect);
dc.FillRect(rect,&m_bkBrush);
return true;*/
return CDialog::OnEraseBkgnd(pDC);
}
HBRUSH CSerialAsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(nCtlColor==CTLCOLOR_STATIC||CTLCOLOR_SCROLLBAR ==nCtlColor||nCtlColor==CTLCOLOR_DLG)
{
// TODO: Return a different brush if the default is not desired
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)(m_bkBrush.m_hObject);
}
return hbr;
}
void CSerialAsDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if(cx==0||cy==0)
return;
CRect rect;
if(m_btManualSend.m_hWnd)
{
m_btManualSend.GetWindowRect(&rect);
rect.top += (cy-m_OldRect.Height());
rect.bottom += (cy - m_OldRect.Height());
ScreenToClient(&rect);
m_btManualSend.MoveWindow(&rect);
}
if(m_staticNail.m_hWnd)
{
m_staticNail.GetWindowRect(&rect);
rect.top += (cy-m_OldRect.Height());
rect.bottom += (cy - m_OldRect.Height());
ScreenToClient(&rect);
m_staticNail.MoveWindow(&rect);
}
if(m_editSendPeriod.m_hWnd)
{
m_editSendPeriod.GetWindowRect(&rect);
rect.top += (cy-m_OldRect.Height());
rect.bottom += (cy - m_OldRect.Height());
ScreenToClient(&rect);
m_editSendPeriod.MoveWindow(&rect);
}
if(m_btStartSendFile.m_hWnd)
{
m_btStartSendFile.GetWindowRect(&rect);
rect.top += (cy-m_OldRect.Height());
rect.bottom += (cy - m_OldRect.Height());
rect.right += (cx - m_OldRect.Width());
rect.left += (cx - m_OldRect.Width());
ScreenToClient(&rect);
m_btStartSendFile.MoveWindow(&rect);
}
if(m_btSelectSendFile.m_hWnd)
{
m_btSelectSendFile.GetWindowRect(&rect);
rect.top += (cy-m_OldRect.Height());
rect.bottom += (cy - m_OldRect.Height());
rect.right += (cx - m_OldRect.Width());
rect.left += (cx - m_OldRect.Width());
ScreenToClient(&rect);
m_btSelectSendFile.MoveWindow(&rect);
}
if(m_editSendFilePath.m_hWnd)
{
m_editSendFilePath.GetWindowRect(&rect);
rect.top += (cy-m_OldRect.Height());
rect.bottom += (cy - m_OldRect.Height());
rect.right += (cx - m_OldRect.Width());
rect.left += (cx - m_OldRect.Width());
ScreenToClient(&rect);
m_editSendFilePath.MoveWindow(&rect);
}
if(m_Send.m_hWnd)
{
m_Send.GetWindowRect(&rect);
rect.bottom += (cy - m_OldRect.Height());
rect.top += (cy - m_OldRect.Height());
rect.right += (cx - m_OldRect.Width());
ScreenToClient(&rect);
m_Send.MoveWindow(&rect);
}
if(m_Rev.m_hWnd)
{
m_Rev.GetWindowRect(&rect);
rect.bottom += (cy - m_OldRect.Height());
rect.right += (cx - m_OldRect.Width());
ScreenToClient(&rect);
m_Rev.MoveWindow(&rect);
}
if(m_btClearSendData.m_hWnd)
{
m_btClearSendData.GetWindowRect(&rect);
rect.top += (cy - m_OldRect.Height());
rect.bottom += (cy - m_OldRect.Height());
ScreenToClient(&rect);
m_btClearSendData.MoveWindow(&rect);
}
if(m_btClearSendCount.m_hWnd)
{
m_btClearSendCount.GetWindowRect(&rect);
rect.top += (cy - m_OldRect.Height());
rect.bottom += (cy - m_OldRect.Height());
rect.right += (cx - m_OldRect.Width());
rect.left += (cx - m_OldRect.Width());
ScreenToClient(&rect);
m_btClearSendCount.MoveWindow(&rect);
}
if(m_editSendCount.m_hWnd)
{
m_editSendCount.GetWindowRect(&rect);
rect.top += (cy - m_OldRect.Height());
rect.bottom += (cy - m_OldRect.Height());
rect.right += (cx - m_OldRect.Width());
rect.left += (cx - m_OldRect.Width());
ScreenToClient(&rect);
m_editSendCount.MoveWindow(&rect);
}
if(m_btHelp.m_hWnd)
{
m_btHelp.GetWindowRect(&rect);
rect.top += (cy - m_OldRect.Height());
rect.bottom += (cy - m_OldRect.Height());
rect.right += (cx - m_OldRect.Width());
rect.left += (cx - m_OldRect.Width());
ScreenToClient(&rect);
m_btHelp.MoveWindow(&rect);
}
if(m_btCancel.m_hWnd)
{
m_btCancel.GetWindowRect(&rect);
rect.top += (cy - m_OldRect.Height());
rect.bottom += (cy - m_OldRect.Height());
rect.right += (cx - m_OldRect.Width());
rect.left += (cx - m_OldRect.Width());
ScreenToClient(&rect);
m_btCancel.MoveWindow(&rect);
}
if(m_checkAutoSend.m_hWnd)
{
m_checkAutoSend.GetWindowRect(&rect);
rect.top += (cy - m_OldRect.Height());
rect.bottom += (cy - m_OldRect.Height());
ScreenToClient(&rect);
m_checkAutoSend.MoveWindow(&rect);
}
if(m_staticStrMS.m_hWnd)
{
m_staticStrMS.GetWindowRect(&rect);
rect.top += (cy - m_OldRect.Height());
rect.bottom += (cy - m_OldRect.Height());
ScreenToClient(&rect);
m_staticStrMS.MoveWindow(&rect);
}
if(m_staticStrPeriod.m_hWnd)
{
m_staticStrPeriod.GetWindowRect(&rect);
rect.top += (cy - m_OldRect.Height());
rect.bottom += (cy - m_OldRect.Height());
ScreenToClient(&rect);
m_staticStrPeriod.MoveWindow(&rect);
}
if(m_checkHEXSend.m_hWnd)
{
m_checkHEXSend.GetWindowRect(&rect);
rect.top += (cy - m_OldRect.Height());
rect.bottom += (cy - m_OldRect.Height());
ScreenToClient(&rect);
m_checkHEXSend.MoveWindow(&rect);
}
GetClientRect(&m_OldRect);
CRect rect1;
GetClientRect(&rect);
if(m_StatusBar.m_hWnd)
{
m_staticNail.GetWindowRect(&rect1);
m_StatusBar.SetPaneInfo(0,ID_PORTSTATUS,SBPS_NORMAL,rect.Width()*2/5-5);
m_StatusBar.SetPaneInfo(1,ID_COMSTATUS,SBPS_STRETCH,rect.Width()*2/5-rect1.Width());
m_StatusBar.SetPaneInfo(2,ID_TIME,SBPS_NORMAL ,rect.Width()*1/5);
m_StatusBar.MoveWindow(rect.left+20,rect.bottom-rect1.Height(),rect.Width()-rect1.Width()-5,rect1.Height(),TRUE);
}
Invalidate();
}
void CSerialAsDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
// TODO: Add your message handler code here and/or call default
// lpMMI->ptMinTrackSize.x = 750;
// lpMMI->ptMinTrackSize.y = 500;
CDialog::OnGetMinMaxInfo(lpMMI);
}
void CSerialAsDlg::OnSizing(UINT fwSide, LPRECT pRect)
{
CDialog::OnSizing(fwSide, pRect);
CRect rect1,rect2;
m_btSelectSendFile.GetWindowRect(&rect1);
m_btCancel.GetWindowRect(&rect2);
if((pRect->right-pRect->left)<(rect2.right-rect1.left+50))
{
pRect->right = pRect->left+rect2.right-rect1.left+50;
}
CRect rect3,rect4;
m_btConfigPort.GetWindowRect(&rect1);
m_editSavefileName.GetWindowRect(&rect2);
m_checkHEXSend.GetWindowRect(&rect3);
m_StatusBar.GetWindowRect(&rect4);
if((pRect->bottom-pRect->top)<((rect2.bottom-rect1.top)+(rect4.bottom-rect3.top)+40))
// TODO: Add your message handler code here
{
pRect->bottom = pRect->top+((rect2.bottom-rect1.top)+(rect4.bottom-rect3.top)+40);
}
}
void CSerialAsDlg::OnStaticNail()
{
// TODO: Add your control notification handler code here
static BOOL bFlag = FALSE;
if(bFlag)
{
SetWindowPos(&wndNoTopMost, 0, 0, 0, 0,
SWP_NOSIZE | SWP_NOMOVE| WS_EX_TOPMOST);
bFlag = FALSE;
}
else
{
SetWindowPos(&wndTopMost, 0, 0, 0, 0,
SWP_NOSIZE | SWP_NOMOVE);
bFlag = TRUE;
}
}
void CSerialAsDlg::OnMyhelp()
{
// TODO: Add your control notification handler code here
CAboutDlg dlgAbout;
dlgAbout.m_bAbout = FALSE;
dlgAbout.DoModal();
}
HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(nCtlColor==CTLCOLOR_STATIC||nCtlColor==CTLCOLOR_DLG)
{
// TODO: Return a different brush if the default is not desired
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)(m_bkBrush.m_hObject);
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CWnd *pCwnd = GetDlgItem(IDC_STATIC_MAIL);
m_ToolTipMail.Create(this);
m_ToolTipMail.Activate(TRUE);
m_ToolTipMail.AddTool(pCwnd, "Email给我lxg215@hotmail.com");
m_ToolTipMail.SetDelayTime(200);
m_staticMail.m_link = _T("mailto:lxg215@hotmail.com");
CString str = _T("\t\t\t\t写在前面的话");
str += _T("\r\n\t接触串口已经一年多了,虽然串口比较简单,可是我还不能说是很熟悉\
更不敢说精通了,为了给新接触串口的朋友一个例子,我一个直想做个关于串口的东西,所以\
就仿照了龚建伟的串口助手2.2作了一个(源代码没有仿照,其实他的源码我没看过:)),希望能对\
大家有所帮助,花了我三天呢!");
str += _T("\r\n\t此软件修正了龚建伟的串口助手2.2的几个bug,当然也可能引进了新的bug,呵呵");
str += _T("原来的bug和不如意的地方如下:");
str += _T("\r\n\r\n1. 当发送端数据发送很快的时候,接收发生丢数据的情况。");
str += _T("\r\n\r\n2.发送时间间隔短的时候,实际发送的数据个数和记录的不符。");
str += _T("\r\n\r\n3.数据量较大的时候占用系统资源太多。");
str += _T("\r\n\r\n4......");
m_reditHelpText.SetWindowText(str);
static CHARFORMAT cf;
memset(&cf, 0, sizeof(CHARFORMAT));
m_reditHelpText.GetDefaultCharFormat(cf);
cf.dwMask = CFM_COLOR;
cf.dwEffects = (unsigned long)~( CFE_AUTOCOLOR);
cf.crTextColor = RGB(0,128,0);
m_reditHelpText.SetSel(0,-1);
m_reditHelpText.SetSelectionCharFormat(cf);
m_reditHelpText.SetWordCharFormat(cf);
m_bkBrush.CreateSolidBrush(DLGBK_COLOR);
str.LoadString(IDS_TITLE);
str = str + _T("\r|" \
"1.00版\t||" \
"最后更新\r|2005年8月\t|||||");
TCHAR *pArrCredit = new TCHAR[str.GetLength()];
memcpy( pArrCredit,str.GetBuffer(str.GetLength()),str.GetLength()*sizeof(TCHAR));
str.ReleaseBuffer();
m_DyCredits.SubclassDlgItem(IDD_ABOUTBOX,this);
m_DyCredits.SetCredits(pArrCredit,'|');
m_DyCredits.SetSpeed(1); //滚动速度(0-慢速,1-中速,2-快速)
m_DyCredits.SetColor(BACKGROUND_COLOR, RGB(0,255,200));
m_DyCredits.SetTransparent();
m_DyCredits.SetGradient(GRADIENT_RIGHT_DARK);
delete pArrCredit;
OnButtonswitch();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
m_ToolTipMail.RelayEvent(pMsg);
return CDialog::PreTranslateMessage(pMsg);
}
void CAboutDlg::OnButtonswitch()
{
// TODO: Add your control notification handler code here
if(m_bAbout)
{
m_btSwitch.SetWindowText(_T("串口助手帮助"));
m_reditHelpText.ShowWindow(SW_HIDE);
m_DyCredits.ShowWindow(SW_SHOW);
m_DyCredits.StartScrolling();
SetWindowText(_T("关于串口助手1.0"));
}
else
{
m_btSwitch.SetWindowText(_T("关于串口助手1.0"));
m_DyCredits.EndScrolling();
m_DyCredits.ShowWindow(SW_HIDE);
m_reditHelpText.ShowWindow(SW_SHOW);
SetWindowText(_T("串口助手帮助"));
}
m_bAbout = !m_bAbout;
}
BOOL CSerialAsDlg::OnHelpInfo(HELPINFO* pHelpInfo)
{
// TODO: Add your message handler code here and/or call default
OnMyhelp() ;
return TRUE;
// return CDialog::OnHelpInfo(pHelpInfo);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -