📄 mainfrm.cpp
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "maintain.h"
#include "PreviewPane2.h"
#include "DataShowView.h"
#include "dlgacsii.h"
#include "MainFrm.h"
#include <afxcmn.h>
#include "manager.h"
#include "dlgacsii.h"
#include "BmpDlg.h"
#include "dlggroupaddr.h"
#include "dlgycpara.h"
#include "dlgyxpara.h"
#include "dlgykytpara.h"
#include "dlgalarmpara.h"
#include "dlgkeyboard.h"
#include "dlgacupara.h"
#include "dlgdcupara.h"
#include "dlgmsupara.h"
#include "dlgyxupara.h"
#include "dlglocalpara.h"
#include "dlgunicodechange.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
const char *ParityType[] ={"无","奇","偶"};
const char *BuadType[] = {"50","75","110","134","150","300","600","1200","1800","2400","4800","7200","9600","19200","38400","57600","115200","230400","460800","921600"};
const char *DataBitType[]={"5","6","7","8"};
const char *StopBitType[]={"1","2"};
static int nCount = 0;//计数
extern int ngyType;
extern int ngyTypeFlag;
static int nOpenComCount = 0;//程序启动时显示打开串口对话框
extern int nCurWorkStatus;
extern bool bShowData;
extern bool bSmsFlag;
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_COMMAND(ID_CALCULATOR, OnCalculator)
ON_COMMAND(IDR_ASCII, OnAscii)
ON_COMMAND(ID_OPENCOM, OnOpencom)
ON_COMMAND(ID_CLOSECOM, OnClosecom)
ON_UPDATE_COMMAND_UI(ID_OPENCOM, OnUpdateOpencom)
ON_UPDATE_COMMAND_UI(ID_CLOSECOM, OnUpdateClosecom)
ON_WM_SIZE()
ON_COMMAND(IDR_GROUP, OnGroup)
ON_WM_TIMER()
ON_COMMAND(ID_DownCanshufile, OnDownCanshufile)
ON_COMMAND(IDR_SETNEW_CHANGE, OnSetnewChange)
ON_COMMAND(IDR_SETNEW_NEW, OnSetnewNew)
ON_COMMAND(IDR_SETOLD_CHANGE, OnSetoldChange)
ON_COMMAND(IDR_SETOLD_NEW, OnSetoldNew)
ON_COMMAND(ID_UPLOADCANSHU_OLD, OnUploadcanshuOld)
ON_COMMAND(ID_UPLOADCANSHU_NEW, OnUploadcanshuNew)
ON_COMMAND(IDR_Upbmp, OnUpbmp)
ON_COMMAND(IDR_Downbmp, OnDownbmp)
ON_COMMAND(IDR_DownProgram, OnDownProgram)
ON_COMMAND(IDR_DownMaintainprogram, OnDownMaintainprogram)
ON_COMMAND(IDR_DownAcsii, OnDownAcsii)
ON_COMMAND(IDR_DownChinese, OnDownChinese)
ON_COMMAND(IDR_Down88, OnDown88)
ON_COMMAND(IDR_Reset, OnReset)
ON_COMMAND(IDR_NaturalStatus, OnNaturalStatus)
ON_COMMAND(IDR_MaintainStatus, OnMaintainStatus)
ON_COMMAND(IDR_KEYBOARD, OnKeyboard)
ON_COMMAND(IDR_Clock, OnClock)
ON_COMMAND(IDR_Yk, OnYk)
ON_COMMAND(IDR_Yt, OnYt)
ON_COMMAND(IDR_YcYx, OnYcYx)
ON_COMMAND(IDR_ManualFrame, OnManualFrame)
ON_COMMAND(IDR_UpdownLoad, OnUpdownLoad)
ON_COMMAND(IDR_StopSend, OnStopSend)
ON_COMMAND(IDR_GUIYUE_FDK, OnGuiyueFdk)
ON_UPDATE_COMMAND_UI(IDR_GUIYUE_FDK, OnUpdateGuiyueFdk)
ON_COMMAND(IDR_GUIYUE_CDT, OnGuiyueCdt)
ON_UPDATE_COMMAND_UI(IDR_GUIYUE_CDT, OnUpdateGuiyueCdt)
ON_COMMAND(IDR_GUIYUE_DF0420, OnGuiyueDf0420)
ON_UPDATE_COMMAND_UI(IDR_GUIYUE_DF0420, OnUpdateGuiyueDf0420)
ON_COMMAND(IDR_GUIYUE_DF0241, OnGuiyueDf0241)
ON_UPDATE_COMMAND_UI(IDR_GUIYUE_DF0241, OnUpdateGuiyueDf0241)
ON_COMMAND(IDR_GUIYUE_BUS, OnGuiyueBus)
ON_UPDATE_COMMAND_UI(IDR_GUIYUE_BUS, OnUpdateGuiyueBus)
ON_COMMAND(IDR_SMSSETUP, OnSmssetup)
ON_COMMAND(IDR_UNICODE, OnUnicode)
ON_COMMAND(IDR_SMSRESET, OnSmsreset)
ON_COMMAND(IDR_GONGZHUANG, OnGongzhuang)
ON_WM_DESTROY()
ON_MESSAGE(MSG_GZWND_DESTROY,OnGzWndDestroy)
ON_COMMAND(IDR_GUIYUE_JDXJ, OnGuiyueJdxj)
ON_UPDATE_COMMAND_UI(IDR_GUIYUE_JDXJ, OnUpdateGuiyueJdxj)
ON_WM_INITMENUPOPUP()
ON_WM_MEASUREITEM()
ON_WM_MENUCHAR()
ON_COMMAND(ID_COMSET, OnComset)
ON_COMMAND(IDR_QUERYALARM, OnQueryalarm)
ON_COMMAND(IDR_ALARMERSETUP, OnAlarmersetup)
//}}AFX_MSG_MAP
ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnDropDown)
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_COMINFO,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
// m_pwndTreeCtrl = NULL;
// m_bDestroy = false;
// TODO: add member initialization code here
m_bOpened = FALSE;
// m_wndProgress = NULL;
nGroupNo = 1;
nAddrNo =1;
nExtFunc = 0;
nSerialNo = 0;
nCurRecDataLen = 0;
nSendFileCount = 0;
m_view = NULL;
modbus.start_addr = 0;
modbus.yccount = 1;
modbus.yxcount = 1;
m_bSkinned = false;
dlgGongzhuang = NULL;
bGzWndShow = false;
bAlarm_InfWndShow = false;
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this
, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
//m_wndToolBar.SetButtonInfo(3, IDM_GY, TBSTYLE_BUTTON | TBSTYLE_DROPDOWN, 3);
// 设置工具条属性
m_wndToolBar.GetToolBarCtrl().SetButtonWidth(32, 100);
m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
/*
CImageList img;
img.Create(IDB_BITMAP1, 32, 0, RGB(255, 0, 255));
m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);
img.Detach();
img.Create(IDB_BITMAP1, 32, 0, RGB(255, 0, 255));
m_wndToolBar.GetToolBarCtrl().SetImageList(&img);
img.Detach();
m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT | TBSTYLE_TRANSPARENT);
m_wndToolBar.SetButtons(NULL, 14);
// 创建每个按钮
CString str;
m_wndToolBar.SetButtonInfo(0, ID_OPENCOM, TBSTYLE_DROPDOWN, 0);
m_wndToolBar.SetButtonInfo(1, IDI_ICON_2, TBSTYLE_BUTTON, 1);
m_wndToolBar.SetButtonInfo(2, IDI_ICON_3, TBSTYLE_BUTTON, 2);
m_wndToolBar.SetButtonInfo(3, IDI_ICON_4, TBSTYLE_BUTTON, 3);
m_wndToolBar.SetButtonInfo(4, IDI_ICON_5, TBSTYLE_BUTTON , 4);
CRect rectToolBar;
// 设置工具条按钮大小
m_wndToolBar.GetItemRect(0, &rectToolBar); //rectToolBar反应了按钮大小
m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(32,32));
*/
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
return 0;
}
void CMainFrame::OnGzWndDestroy()
{
bGzWndShow = false;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style &=~FWS_ADDTOTITLE;
// cs.lpszClass = AfxRegisterWndClass(0, NULL, NULL,
// AfxGetApp()->LoadIcon(IDR_MAINFRAME));
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
if(!m_wndSplitter1.CreateStatic(this,1,2))
{
MessageBox("Create Static Window Error!");
return 0;
}
if (!m_wndSplitter1.CreateView(0, 0,
pContext->m_pNewViewClass, CSize(300,0), pContext))
{
TRACE0("Failed to create first pane\n");
return FALSE;
}
if(!m_wndSplitter2.CreateStatic(&m_wndSplitter1,2,1,WS_VISIBLE|WS_CHILD|WS_BORDER,m_wndSplitter1.IdFromRowCol(0,1)))
{
MessageBox("Create Static Window Error!");
return 0;
}
//数据接收窗口
if (!m_wndSplitter2.CreateView(0, 0,
RUNTIME_CLASS(CDataShowView), CSize(0,340),pContext))
{
TRACE0("Failed to create second pane\n");
return FALSE;
}
//数据处理窗口
if (!m_wndSplitter2.CreateView(1, 0,
RUNTIME_CLASS(CPreviewPane2), CSize(200,0),pContext))
{
TRACE0("Failed to create second pane\n");
return FALSE;
}
// 激活窗口
SetActiveView((CMaintainView*)m_wndSplitter1.GetPane(0,0));
// return CFrameWnd::OnCreateClient(lpcs, pContext);
return TRUE;
}
void CMainFrame::OnCalculator()
{
::ShellExecute(m_hWnd,"open","calc.exe",NULL,NULL,SW_SHOWNORMAL);
}
void CMainFrame::OnAscii()
{
// TODO: Add your command handler code here
CDlgAcsii m_dlgAscii;
m_dlgAscii.DoModal();
}
void CMainFrame::OnOpencom()
{
// TODO: Add your command handler code here
CPropertySheet comSheet("串口参数",this);
CDlgComset dlgComSet(m_pDoc->GetSerialLineInfo());
comSheet.AddPage(&dlgComSet);
if(IDCANCEL == comSheet.DoModal())
return;
if(!m_pDoc->SetSerialLineInfo(&dlgComSet.m_SerialLineInfo))
{
MessageBox(_T("打开串口失败!"),"提示",MB_OK|MB_ICONSTOP);
m_pDoc->CloseComm();
return;
}
SetComParaToStatusBar(1);
}
//1-打开串口 0-关闭
void CMainFrame::SetComParaToStatusBar(int open)
{
int ComNo,Baut,DataBit,StopBit,Parity;
m_pDoc->GetCommOption(ComNo,Baut,DataBit,StopBit,Parity);
int i;
switch(Parity)
{
case P_NONE://无
i = 0;
break;
case P_EVEN://偶
i = 2;
break;
case P_ODD://奇
i = 1;
break;
default:
i = 0;
break;
}
CString Text;
if(open)
{
Text.Format("串口%d:%s,%s,%s,%s",ComNo,
BuadType[Baut],
ParityType[i],
DataBitType[DataBit],
StopBitType[StopBit?1:0]
);
m_bOpened = TRUE;
}
else
{
Text="串口关闭";
m_bOpened = false;
}
m_wndStatusBar.SetPaneText(1,Text);
}
void CMainFrame::ShowSendData(BYTE *pData, int nLen)
{
((CMaintainView*)m_wndSplitter1.GetPane(0,0))->ShowData(pData,nLen);
}
void CMainFrame::ShowRecData(BYTE *pData, int nLen)
{
((CDataShowView*)m_wndSplitter2.GetPane(0,0))->ShowData(pData,nLen);
}
//接收到返回数据
void CMainFrame::ReceiveData(BYTE *pData, int nLength)
{
CString strTemp;
if(nExtFunc <= 0)//不是维护功能转发
{
((CMaintainView*)m_wndSplitter1.GetPane(0,0))->AddRecDataToBuf(pData,nLength);
return;
}
if((nCurRecDataLen+nLength)>1024)
nCurRecDataLen = 0;
WaitForSingleObject(hEvent1, INFINITE);
memcpy(&byRecBuf[nCurRecDataLen],pData,nLength);
nCurRecDataLen+=nLength;
SetEvent(hEvent1);
switch(nCurRecDataLen)
{
case CANSHU_UP_DATA://参数上装返回
SetActionExpain(5,GOING);
if((byRecBuf[0]==0x01)&&(byRecBuf[1]==0x01)&&(byRecBuf[2]==0x02)&&(byRecBuf[3]==0x02))
{
KillTimer(1);
nCount = 0;
WaitForSingleObject(hEvent1, INFINITE);
memcpy(&dataBuf[nSerialNo*CANSHU_FRAME_LEN],&byRecBuf[7],CANSHU_FRAME_LEN);
SetEvent(hEvent1);
if(ValidateParity())
nSerialNo++;
WaitForSingleObject(hEvent1, INFINITE);
nCurRecDataLen = 0;
SetEvent(hEvent1);
if(nSerialNo < nCanshuUploadFlag)
OrganiseData(nExtFunc,nSerialNo);
else
{
nSerialNo = 0;
CreateParaFile();
SetActionExpain(5,END);
nExtFunc = 0;
WaitForSingleObject(hEvent1, INFINITE);
nCurRecDataLen = 0;
SetEvent(hEvent1);
}
}
break;
case BMP_UP_DATA://图像上装返回
SetActionExpain(5,GOING);
if((byRecBuf[0]==0x01)&&(byRecBuf[1]==0x59)&&(byRecBuf[2]==0x02)&&(byRecBuf[3]==0x02))
{
KillTimer(1);
nCount = 0;
WaitForSingleObject(hEvent1, INFINITE);
memcpy(&dataBuf[nSerialNo*BMP_FRAME_LEN],&byRecBuf[7],BMP_FRAME_LEN);
SetEvent(hEvent1);
if(ValidateParity())
nSerialNo++;
WaitForSingleObject(hEvent1, INFINITE);
nCurRecDataLen = 0;
SetEvent(hEvent1);
if(nSerialNo < BMP_SEND_COUNT)
OrganiseData(nExtFunc,nSerialNo);
else
{
nSerialNo = 0;
CreateBMP();
SetActionExpain(5,END);
nExtFunc = 0;
WaitForSingleObject(hEvent1, INFINITE);
nCurRecDataLen = 0;
SetEvent(hEvent1);
}
}
break;
case NAK://返回错误
nRtn = IsNAK();
if(nRtn > 0)
{
WaitForSingleObject(hEvent1, INFINITE);
nCurRecDataLen = 0;
SetEvent(hEvent1);
switch(nRtn)
{
case 0x01://无效命令
strTemp = _T("返回无效命令,系统重发...");
break;
case 0x02://校验错误
strTemp = _T("返回校验错误,系统重发...");
break;
case 0x04://键码错误
strTemp = _T("返回键码错误,系统重发...");
break;
case 0x08://地址错误
strTemp = _T("返回地址错误,系统重发...");
break;
default:
strTemp = GOING;
break;
}
SetActionExpain(5,strTemp);
}
break;
case ACK://返回正确
SetActionExpain(5,GOING);
if(IsACK())
{
KillTimer(1);
nCount = 0;
if(ValidateParity())
nSerialNo++;
nCurRecDataLen = 0;
if(nSerialNo < nSendFileCount)
OrganiseData(nExtFunc,nSerialNo,strFileName);
else
{
nSerialNo = 0;
SetActionExpain(5,END);
nExtFunc = 0;
WaitForSingleObject(hEvent1, INFINITE);
nCurRecDataLen = 0;
SetEvent(hEvent1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -