📄 scommtestdlg.cpp
字号:
senddata[len++] = xy[m_nCurScreen][ii][jj];
}
}
senddata[len++] = 0x16;
}
else if(m_nType==1) //内码功能 ////////幕数高四位代表颜色
{
for(i=0;i<(length-m_nEnterNum);i++)
{
senddata[len++]=HZKcode[i];
}
senddata[len++] = 0x16;
}
break;
case 2:
if(m_nType==0)
{
for(color=0;color<2;color++)
{
for(ii=0;ii<m_nHeight;ii++)
{
for(jj=0;jj<m_nWidth/8;jj++)
{
senddata[len++] = xy[m_nCurScreen][ii][jj];
}
}
}
senddata[len++] = 0x16;
}
else if(m_nType==1)///////功能号
{
for(i=0;i<(length-m_nEnterNum);i++)
{
senddata[len++]=HZKcode[i];
}
senddata[len++] = 0x16;
}
break;
default:
MessageBox("程序错误!","提示",MB_OK);
}
if(len>4096)
{
VARIANT SendData = FormVARIANT(senddata, len/2);
if (SendData.vt != VT_EMPTY)
{
m_ctrlComm.SetOutput(SendData);
SafeArrayDestroy(SendData.parray);
}
SendData = FormVARIANT(senddata+len/2, len-len/2);
if (SendData.vt != VT_EMPTY)
{
m_ctrlComm.SetOutput(SendData);
SafeArrayDestroy(SendData.parray);
}
}
else
{
VARIANT SendData = FormVARIANT(senddata, len);
if (SendData.vt != VT_EMPTY)
{
m_ctrlComm.SetOutput(SendData);
SafeArrayDestroy(SendData.parray);
}
}
EndWaitCursor();
}
void CSCommTestDlg::OnSend()
{
// TODO: Add your control notification handler code her
}
void CSCommTestDlg::OnClear()
{
// TODO: Add your control notification handler code here
m_nShow="";
UpdateData(FALSE);
GetDlgItem(IDC_SHOW)->SetFocus();
}
void CSCommTestDlg::OnReadFile()
{
// TODO: Add your control notification handler code here
CFileDialog dlg(TRUE,"txt",".txt",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"文本文件(*.TXT)|*.TXT||");;
if(dlg.DoModal()==IDOK)
{
m_nShow="";
readfile=TRUE;
GetDlgItem(IDC_SHOW)->SetFont(&font);
ifstream ifs(dlg.GetPathName());
filename=dlg.GetPathName();
char fch[1000];
memset(fch,0,1000);
ifs.read(fch,1000);
UpdateData();
m_nType=m_nType;
file1=fch;
UpdateData(FALSE);
for(i=0;;i++)
{
m_nShow+=file1.GetAt(i);
UpdateData(FALSE);
}
ifs.close();
GetDlgItem(IDC_SHOW)->SetFocus();
for(int h=0;h<50;h++)
{
::keybd_event(VK_DOWN, 0, 0, 0);//模拟Down键按下使光标移动到下一行
::keybd_event(VK_END, 0, 0, 0);//模拟End键按下使光标移动到文字后面
}
// SetTimer(2,50,NULL);
// SetTimer(3,10,NULL);
}
}
void CSCommTestDlg::OnOpencomm()
{
// TODO: Add your control notification handler code here
if( !m_ctrlComm.GetPortOpen())
{
m_ctrlComm.SetPortOpen(TRUE);//打开串口
GetDlgItem(IDC_OPENCOMM)->EnableWindow(FALSE);
GetDlgItem(IDC_CLOSECOMM)->EnableWindow(TRUE);
}
else
MessageBox("串口打开失败!","提示",MB_OK);
}
void CSCommTestDlg::OnClosecomm()
{
// TODO: Add your control notification handler code here
if(m_ctrlComm.GetPortOpen())
{
m_ctrlComm.SetPortOpen(FALSE);//关闭串口
GetDlgItem(IDC_OPENCOMM)->EnableWindow(TRUE);
GetDlgItem(IDC_CLOSECOMM)->EnableWindow(FALSE);
}
else
MessageBox("串口关闭失败!","提示",MB_OK);
}
void CSCommTestDlg::OnSettime()
{
// TODO: Add your control notification handler code here
unsigned char senddata[100];
unsigned int len=0;
if(readfile)
{
KillTimer(2);
KillTimer(3);
}
if(!m_ctrlComm.GetPortOpen())
{
MessageBox("串口没有打开!","提示",MB_OK);
return;
}
UpdateData();
time=CTime::GetCurrentTime();
// unsigned short CRC = 0;//2byte
senddata[len++] = 0xcc;
senddata[len++] = 0xcc;
senddata[len++] = 0xcc;
senddata[len++] = 0xcc;
senddata[len++] = 0xcc;
senddata[len++] = m_nChipnum;// addr
senddata[len++] = 0x07;// func
//len
senddata[len++] = 0x00;
senddata[len++] = 0x00;
senddata[len++] = 0x00;
senddata[len++] = 0x07;
//time
senddata[len++] = (unsigned char)(time.GetYear()%100);
senddata[len++] = (unsigned char)time.GetMonth();
senddata[len++] = (unsigned char)time.GetDay();
senddata[len++] = (unsigned char)((time.GetDayOfWeek())-1);
senddata[len++] = (unsigned char)time.GetHour();
senddata[len++] = (unsigned char)time.GetMinute();
senddata[len++] = (unsigned char)time.GetSecond();
senddata[len++] = 0x16;
VARIANT SendData = FormVARIANT(senddata, len);
if (SendData.vt != VT_EMPTY)
{
m_ctrlComm.SetOutput(SendData);
SafeArrayDestroy(SendData.parray);
}
if(readfile)
{
SetTimer(2,50,NULL);
SetTimer(3,10,NULL);
}
}
void CSCommTestDlg::OnChecktime()
{
// TODO: Add your control notification handler code here
unsigned char senddata[100];
unsigned int len=0;
if(readfile)
{
KillTimer(2);
KillTimer(3);
}
if(!m_ctrlComm.GetPortOpen())
{
MessageBox("串口没有打开!","提示",MB_OK);
return;
}
UpdateData();
// unsigned short CRC = 0;//2byte
CTime time=CTime::GetCurrentTime();
senddata[len++] = 0xcc;
senddata[len++] = 0xcc;
senddata[len++] = 0xcc;
senddata[len++] = 0xcc;
senddata[len++] = 0xcc;
senddata[len++] = m_nChipnum;// addr屏号
senddata[len++] = 0x08;// func
//len
senddata[len++] = 0x00;
senddata[len++] = 0x00;
senddata[len++] = 0x00;
senddata[len++] = 0x00;
//time
senddata[len++] = 0x16;
SetTimer(1,2000,NULL);
VARIANT SendData = FormVARIANT(senddata, len);
if (SendData.vt != VT_EMPTY)
{
m_ctrlComm.SetOutput(SendData);
SafeArrayDestroy(SendData.parray);
}
if(readfile)
{
SetTimer(2,50,NULL);
SetTimer(3,10,NULL);
}
}
void CSCommTestDlg::OnAlignLeft()
{
// TODO: Add your control notification handler code here
AlignmentChange(IDC_RADIO5);
}
void CSCommTestDlg::OnAlignCenter()
{
// TODO: Add your control notification handler code here
AlignmentChange(IDC_RADIO6);
}
void CSCommTestDlg::OnAlignRight()
{
// TODO: Add your control notification handler code here
AlignmentChange(IDC_RADIO7);
}
void CSCommTestDlg::AlignmentChange(UINT nID)
{
UpdateData();
DWORD dwStyle = WS_CHILD|WS_VISIBLE|WS_TABSTOP/*|WS_BORDER*/|ES_AUTOHSCROLL;
switch( m_nAlign)
{
case 1:
dwStyle |= ES_CENTER;
GetDlgItem(IDC_SHOW)->ModifyStyle(ES_RIGHT|ES_LEFT,ES_CENTER);
break;
case 2:
dwStyle |= ES_RIGHT;
GetDlgItem(IDC_SHOW)->ModifyStyle(ES_CENTER|ES_LEFT,ES_RIGHT);
break;
default:
dwStyle |= ES_LEFT;
GetDlgItem(IDC_SHOW)->ModifyStyle(ES_CENTER|ES_RIGHT,ES_LEFT);
break;
}
GetDlgItem(IDC_SHOW)->Invalidate();
GetDlgItem(IDC_SHOW)->SetFocus();
}
void CSCommTestDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
static int bUpdateChar = 0;
switch (nIDEvent)
{
case 1:
{
KillTimer(1);
MessageBox("下位机无响应!","提示",MB_OK);
CDialog::OnTimer(nIDEvent);
break;
}
case 2://///////////////////////读文件许做修改!!
{
KillTimer(2);
ifstream ifs(filename);
char ch[1000];
memset(ch,0,1000);
ifs.read(ch,1000);
ifs.close();
file2=ch;
if(file1!=file2)
{
file1=file2;
UpdateData();
m_nType=m_nType;
m_nShow=file1;
UpdateData(FALSE);
GetDlgItem(IDC_SEND)->SetFocus();
filechange=TRUE;
m_Winstate=m_bShow; //保存当前窗口状态(显示还是隐藏)
if(m_nType==0)
{
OnShow(); //如果隐藏让窗口显示
Top();
}
bUpdateChar = 1;
}
SetTimer(2,500,NULL);
break;
}
case 3:
if(bUpdateChar == 1)
{
OnSend();
bUpdateChar = 0;
}
break;
default:
break;
}
}
void CSCommTestDlg::OnChangeWidth()
{
// TODO: Add your control notification handler code here
UpdateData();
CWnd *pWnd=GetDlgItem(IDC_SHOW);
pWnd->MoveWindow(CRect(25,60,m_nWidth+6+25,m_nHeight+6+60));
}
void CSCommTestDlg::OnChangeHeight()
{
// TODO: Add your control notification handler code here
UpdateData();
CWnd *pWnd=GetDlgItem(IDC_SHOW);
pWnd->MoveWindow(CRect(25,60,m_nWidth+6+25,m_nHeight+6+60));
}
void CSCommTestDlg::OnMaxtextShow()
{
// TODO: Add your control notification handler code here
if(m_nScreen<5)
{
ShowCursor(FALSE);
Top();
UpdateData();
CClientDC dc(GetDlgItem(IDC_SHOW));
for(i=0;i<m_nHeight;i++)
for(m=0;m<m_nWidth/8;m++)
{
xy[m_nScreen-1][i][m]=0xff;
for(j=8*m;j<8*(m+1);j++)
if(dc.GetPixel(j+1,i+1)!=0x00ffffff)
xy[m_nScreen-1][i][m] &=(0xfe<<(7-(j%8)));
}
Down();
ShowCursor(TRUE);
switch (m_nScreen)
{
case 1:
string1=m_nShow;
color1=textcolor;
alignment1=m_nAlign;
break;
case 2:
string2=m_nShow;
color2=textcolor;
alignment2=m_nAlign;
break;
case 3:
string3=m_nShow;
color3=textcolor;
alignment3=m_nAlign;
break;
case 4:
string4=m_nShow;
color4=textcolor;
alignment4=m_nAlign;
break;
default:
break;
}
if(m_nScreen<4)
{
m_nScreen++;
m_cScreen.SetCurSel(m_nScreen-1);
m_nShow=string;
UpdateData(FALSE);
GetDlgItem(IDC_SHOW)->SetFocus();
::keybd_event(VK_END, 0, 0, 0);//模拟End键按下使光标移动到文字后面
}
else
MessageBox("内容已经超过4幕,请检查或者直接发送!","提示",MB_OK);
}
}
BOOL CSCommTestDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_CHAR)
{
if(hanzi)
{
string+=(char)(pMsg->wParam);
hanzi=FALSE;
return CDialog::PreTranslateMessage(pMsg);
}
else
string="";
if(!((pMsg->wParam)&0x80))//不是汉字
{
string=(char)(pMsg->wParam);
}
else
{
hanzi=TRUE;
string=(char)(pMsg->wParam);//是汉字
}
}
if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE)//屏蔽Esc键
return TRUE;
if(pMsg->message == WM_NCLBUTTONDOWN && (int)pMsg->wParam == HTCAPTION) ///////窗口不能被移动
return TRUE;
return CDialog::PreTranslateMessage(pMsg);
}
void CSCommTestDlg::OnLiben(WPARAM wParam,LPARAM lParam)
{
UINT uMouseMsg;//鼠标动作
uMouseMsg=(UINT) lParam;
if(uMouseMsg==WM_LBUTTONDOWN)//如果是单击左键
{
if(m_bShow)
{
OnHide();
}
else
{
OnShow();
}
}
if(uMouseMsg==WM_RBUTTONDOWN)//如果是单击右键
{
AfxGetMainWnd()->SetForegroundWindow(); //弹出Popup菜单
CMenu menu;
menu.LoadMenu(IDR_POPUP);
CMenu* pPopup=menu.GetSubMenu(0);
CPoint Point;
GetCursorPos(&Point);
pPopup->TrackPopupMenu(TPM_LEFTALIGN,
Point.x,Point.y,AfxGetMainWnd(),NULL );
AfxGetMainWnd()->PostMessage(WM_NULL, 0, 0);
}
}
void CSCommTestDlg::OnHide()
{
PostMessage(WM_SYSCOMMAND,SC_MINIMIZE,NULL);
}
void CSCommTestDlg::OnShow()
{
PostMessage(WM_SYSCOMMAND,SC_RESTORE,NULL);
}
void CSCommTestDlg::OnExit()
{
NOTIFYICONDATA tnid;
tnid.cbSize=sizeof(NOTIFYICONDATA);
tnid.hWnd=AfxGetMainWnd()->m_hWnd;
tnid.uID=IDR_MAINFRAME; //保证删除的是我们的图标
Shell_NotifyIcon(NIM_DELETE,&tnid);
AfxGetMainWnd()->PostMessage(WM_CLOSE); //退出程序
}
void CSCommTestDlg::Top()
{
CRect rcMy;
::GetWindowRect(m_hWnd, rcMy); //得到当前的窗口位置
//设为总在最前
SetWindowPos(&wndTopMost,rcMy.left,rcMy.top,rcMy.Size().cx,rcMy.Size().cy,SWP_SHOWWINDOW);
}
void CSCommTestDlg::Down()
{
CRect rcMy;
::GetWindowRect(m_hWnd, rcMy); //得到当前的窗口位置
//设为总在最前
SetWindowPos(&wndNoTopMost, rcMy.left, rcMy.top, rcMy.Size().cx, rcMy.Size().cy, SWP_SHOWWINDOW);
}
void CSCommTestDlg::OnChangeCommNum()
{
// TODO: Add your control notification handler code here
UpdateData();
if(m_ctrlComm.GetPortOpen())
{
m_ctrlComm.SetPortOpen(FALSE);//关闭串口
m_ctrlComm.SetCommPort(m_nComb1.GetCurSel()+1); //选择串口
m_ctrlComm.SetPortOpen(TRUE);//打开串口
}
else
m_ctrlComm.SetCommPort(m_nComb1.GetCurSel()+1); //选择串口
}
void CSCommTestDlg::OnChangeBaud()
{
// TODO: Add your control notification handler code here
UpdateData();
if(m_ctrlComm.GetPortOpen())
{
m_ctrlComm.SetPortOpen(FALSE);//关闭串口
switch(m_nComb2.GetCurSel())
{
case 0:
m_ctrlComm.SetSettings("4800,n,8,1");
break;
case 1:
m_ctrlComm.SetSettings("9600,n,8,1");
break;
case 2:
m_ctrlComm.SetSettings("19200,n,8,1");
break;
case 3:
m_ctrlComm.SetSettings("38400,n,8,1");
break;
default:
break;
}
m_ctrlComm.SetPortOpen(TRUE);//打开串口
}
else
switch(m_nComb2.GetCurSel())
{
case 0:
m_ctrlComm.SetSettings("4800,n,8,1");
break;
case 1:
m_ctrlComm.SetSettings("9600,n,8,1");
break;
case 2:
m_ctrlComm.SetSettings("19200,n,8,1");
break;
case 3:
m_ctrlComm.SetSettings("38400,n,8,1");
break;
default:
break;
}
}
void CSCommTestDlg::OnSelchangeScreen()
{
}
HBRUSH CSCommTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(pWnd->GetDlgCtrlID()==IDC_SHOW)
{
pDC->SetTextColor(textcolor);
pDC->SetBkColor(RGB(0,0,0));
return m_brush;
}
// TODO: Return a different brush if the default is not desired
return hbr;//m_totalbrush;
}
void CSCommTestDlg::OnSelchangeTextColor()
{
// TODO: Add your control notification handler code here
if(m_cTextcolor)
{
switch(m_cTextcolor.GetCurSel())
{
case 0:
textcolor=RGB(255,0,0);
break;
case 1:
textcolor=RGB(0,255,0);
break;
case 2:
textcolor=RGB(255,255,0);
break;
default:
break;
}
Invalidate();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -