📄 mtwnd.cpp
字号:
// MTWnd.cpp : implementation file
//
#include "stdafx.h"
#include "SF1553.h"
#include "MTWnd.h"
#include "ModeSelDlg.h"
#include "MTFilterdlg.h"
#include "ProgressDlg.h"
#include "TimeSetDlg.h"
#include "DIODlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CSF1553App theApp;
extern BOOL fileOptNow;
extern BYTE pgbarOpt;
extern DWORD dwbarmax;
extern DWORD dwbarmin;
extern DWORD dwbarpos;
/////////////////////////////////////////////////////////////////////////////
// CMTWnd
CMenu NEAR CMTWnd::menu;
IMPLEMENT_DYNCREATE(CMTWnd, CMDIChildWnd)
CMTWnd::CMTWnd()
{
}
CMTWnd::~CMTWnd()
{
}
BOOL CMTWnd::Create(LPCTSTR szTitle, LONG style /* = 0 */,
const RECT& rect /* = rectDefault */,
CMDIFrameWnd* parent /* = NULL */)
{
// Setup the shared menu
if (menu.m_hMenu == NULL)
{
menu.LoadMenu(IDR_SF1553TYPEMT);
}
m_hMenuShared = menu.m_hMenu;
// Register a custom WndClass and create a window.
// This must be done because CBounceWnd has a custom cursor, and
// no icon.
LPCTSTR lpszMTClass =
AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,
NULL,
(HBRUSH)(COLOR_APPWORKSPACE),
LoadIcon(theApp.m_hInstance, MAKEINTRESOURCE(IDR_SF1553TYPEMT)));
return CMDIChildWnd::Create(lpszMTClass, szTitle, style, rect, parent);
}
BEGIN_MESSAGE_MAP(CMTWnd, CMDIChildWnd)
//{{AFX_MSG_MAP(CMTWnd)
ON_WM_CREATE()
ON_COMMAND(ID_FILE_NEW, OnMenuFileNew)
ON_COMMAND(IDM_MT_FILTER, OnMtFilter)
ON_COMMAND(IDM_MT_RUN, OnMtRun)
ON_COMMAND(IDM_MT_STOP, OnMtStop)
ON_COMMAND(IDM_MT_CLEARVIEW, OnMtClearview)
ON_WM_SIZE()
ON_MESSAGE(CWM_MT_UPDATE, OnCMsgMtUpdate)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
ON_COMMAND(ID_MENU_TIME, OnMenuTime)
ON_COMMAND(ID_MENU_DIO, OnMenuDio)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMTWnd message handlers
int CMTWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
// TODO: Add your specialized creation code here
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_TYPEMT))
{
TRACE0("Failed to create MT toolbar\n");
return -1; // fail to create
}
this->m_bAutoMenuEnable = FALSE;
// 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);
// Init Menu and Toolbar status
//
this->menu.EnableMenuItem(IDM_MT_STOP, MF_DISABLED | MF_GRAYED);
this->m_wndToolBar.SetButtonStyle(2, TBBS_CHECKED | TBBS_DISABLED);
// create grid window
//
RECT rc;
this->GetClientRect(&rc);
rc.top = 25;
rc.bottom -= 25;
if (!(this->m_Grid.Create("", WS_CHILD | WS_VISIBLE, rc, this, IDC_MTWND_MSFLEXGRID, NULL, FALSE)))
{
return -1;
}
// ID+BLOCK_STATUS_WORD+TIMETAG+DATA+From+To+CMD1+CMD2+CNT/MC+CH-A/B+DATA+Comment
this->m_Grid.SetCols(11);
this->m_Grid.SetRows(2);
this->m_Grid.SetRow(0);
this->m_Grid.SetCol(0); // ID
this->m_Grid.SetText(TEXT("序号"));
this->m_Grid.SetColWidth(0, 8*180);
this->m_Grid.SetCol(1); // BLOCK_STATUS_WORD
this->m_Grid.SetText(TEXT("消息描述字"));
this->m_Grid.SetColWidth(1, 6*180);
this->m_Grid.SetCol(2); // TIMETAG
this->m_Grid.SetText(TEXT("时间标签(us)"));
this->m_Grid.SetColWidth(2, 8*180);
this->m_Grid.SetCol(3); // From
this->m_Grid.SetText(TEXT("发送方"));
this->m_Grid.SetColWidth(3, 7*180);
this->m_Grid.SetCol(4); // To
this->m_Grid.SetText(TEXT("接收方"));
this->m_Grid.SetColWidth(4, 7*180);
this->m_Grid.SetCol(5); // CMD1
this->m_Grid.SetText(TEXT("指令字"));
this->m_Grid.SetColWidth(5, 5*180);
this->m_Grid.SetCol(6); // CMD2
this->m_Grid.SetText(TEXT("指令字[2]"));
this->m_Grid.SetColWidth(6, 5*180);
this->m_Grid.SetCol(7); // CNT/MC
this->m_Grid.SetText(TEXT("CNT/MC"));
this->m_Grid.SetColWidth(7, 5*180);
this->m_Grid.SetCol(8); // CH-A/B
this->m_Grid.SetText(TEXT("通道A/B"));
this->m_Grid.SetColWidth(8, 4*180);
this->m_Grid.SetCol(9); // DATA
this->m_Grid.SetText(TEXT("数据/状态字"));
this->m_Grid.SetColWidth(9, 35*180);
this->m_Grid.SetCol(10); // Comment
this->m_Grid.SetText(TEXT("备注"));
this->m_Grid.SetColWidth(10, 8*180);
this->m_Grid.SetColAlignment(0, 0); // col alignment
this->m_Grid.SetColAlignment(1, 0); // col alignment
this->m_Grid.SetColAlignment(2, 0); // col alignment
this->m_Grid.SetColAlignment(3, 0); // col alignment
this->m_Grid.SetColAlignment(4, 0); // col alignment
this->m_Grid.SetColAlignment(5, 0); // col alignment
this->m_Grid.SetColAlignment(6, 0); // col alignment
this->m_Grid.SetColAlignment(7, 0); // col alignment
this->m_Grid.SetColAlignment(8, 0); // col alignment
this->m_Grid.SetColAlignment(9, 0); // col alignment
this->m_Grid.SetColAlignment(10, 0); // col alignment
this->m_Grid.SetFixedCols(0); // fixed coloum
this->m_Grid.SetFixedRows(1);
this->m_Grid.SetSelectionMode(0); // free
this->m_Grid.SetScrollTrack(FALSE); // no scroll track
this->m_Grid.SetAllowBigSelection(FALSE);
this->m_Grid.SetAllowUserResizing(1); // enable cols resize
this->m_Grid.EnableWindow(TRUE);
this->MsgRecvCnt = 0;
this->isFileOptNow = FALSE;
this->isNeedRTDraw = TRUE;
if (g_CardHandle != NULL)
{
// Init Remote Terminal
MT_Init(g_CardHandle);
//设置待监控的消息
MT_SetCmdFilterTable(g_CardHandle, &g_MTConf.stFilterTable);
}
else
{
// demo mode
}
return 0;
}
void CMTWnd::OnMenuFileNew()
{
// TODO: Add your command handler code here
BOOL blNeedRun=FALSE;
if (!((::IsWindow(g_RunStat.hWndBC)) ||
(::IsWindow(g_RunStat.hWndRT)) ||
(::IsWindow(g_RunStat.hWndMT))))
{
blNeedRun = TRUE;
}
if (blNeedRun)
{
CModeSelDlg dlgModeSel;
dlgModeSel.DoModal();
}
else
{
// message information
MessageBox(TEXT("已经新建了功能项!"), TEXT("警告"), MB_OK | MB_ICONWARNING);
}
}
void CMTWnd::OnMtFilter()
{
// TODO: Add your command handler code here
CMTFilterDlg dlgMTFilter;
dlgMTFilter.DoModal();
}
void CMTWnd::OnMtRun()
{
// TODO: Add your command handler code here
if (g_RunStat.blMTRunning)
return;
if (this->isFileOptNow)
{
MessageBox(TEXT("请先等待数据文件打开/保存操作完成!"), TEXT("BM 警告"), MB_OK | MB_ICONWARNING);
return;
}
if (!(this->isNeedRTDraw))
this->m_Grid.SetRedraw(FALSE);
g_RunStat.blMTRunning = TRUE;
if (g_CardHandle != NULL)
{
if (!MT_Start(g_CardHandle, TRUE))
{
g_RunStat.blMTRunning = FALSE;
MessageBox(TEXT("开启 BM工作状态失败!"), TEXT("BM 错误"), MB_OK | MB_ICONERROR);
return;
}
}
this->menu.EnableMenuItem(IDM_MT_RUN, MF_DISABLED | MF_GRAYED);
this->m_wndToolBar.SetButtonStyle(1, TBBS_CHECKED | TBBS_DISABLED);
this->menu.EnableMenuItem(IDM_MT_STOP, MF_ENABLED);
this->m_wndToolBar.SetButtonStyle(2, 0);
}
void CMTWnd::OnMtStop()
{
// TODO: Add your command handler code here
if (!g_RunStat.blMTRunning)
return;
if (g_CardHandle != NULL)
{
//MT消能,停止工作
if (!MT_Start(g_CardHandle, FALSE))
{
MessageBox(TEXT("停止 BM工作状态失败!"), TEXT("BM 错误"), MB_OK | MB_ICONERROR);
}
}
else
{
// demo mode
}
g_RunStat.blMTRunning = FALSE;
this->menu.EnableMenuItem(IDM_MT_STOP, MF_DISABLED | MF_GRAYED);
this->m_wndToolBar.SetButtonStyle(2, TBBS_CHECKED | TBBS_DISABLED);
this->menu.EnableMenuItem(IDM_MT_RUN, MF_ENABLED);
this->m_wndToolBar.SetButtonStyle(1, 0);
if (!(this->isNeedRTDraw))
this->m_Grid.SetRedraw(TRUE);
}
void CMTWnd::OnMtClearview()
{
// TODO: Add your command handler code here
if (g_RunStat.blMTRunning)
{
MessageBox(TEXT("请先停止对本通道BM的接收操作!"), TEXT("警告"), MB_OK | MB_ICONWARNING);
return;
}
if (this->isFileOptNow)
{
MessageBox(TEXT("请先等待数据文件打开/保存操作完成!"), TEXT("BM 警告"), MB_OK | MB_ICONWARNING);
return;
}
this->MsgRecvCnt = 0;
// ID+BLOCK_STATUS_WORD+TIMETAG+DATA+From+To+CMD1+CMD2+CNT/MC+CH-A/B+DATA
this->m_Grid.SetRows(2);
this->m_Grid.Clear();
this->m_Grid.SetRow(0);
this->m_Grid.SetCol(0); // ID
this->m_Grid.SetText(TEXT("序号"));
this->m_Grid.SetCol(1); // BLOCK_STATUS_WORD
this->m_Grid.SetText(TEXT("消息描述字"));
this->m_Grid.SetCol(2); // TIMETAG
this->m_Grid.SetText(TEXT("时间标签(us)"));
this->m_Grid.SetCol(3); // From
this->m_Grid.SetText(TEXT("发送方"));
this->m_Grid.SetCol(4); // To
this->m_Grid.SetText(TEXT("接收方"));
this->m_Grid.SetCol(5); // CMD1
this->m_Grid.SetText(TEXT("指令字"));
this->m_Grid.SetCol(6); // CMD2
this->m_Grid.SetText(TEXT("指令字[2]"));
this->m_Grid.SetCol(7); // CNT/MC
this->m_Grid.SetText(TEXT("CNT/MC"));
this->m_Grid.SetCol(8); // CH-A/B
this->m_Grid.SetText(TEXT("通道A/B"));
this->m_Grid.SetCol(9); // DATA
this->m_Grid.SetText(TEXT("数据/状态字"));
this->m_Grid.SetCol(10); // Comment
this->m_Grid.SetText(TEXT("备注"));
}
void CMTWnd::OnSize(UINT nType, int cx, int cy)
{
CMDIChildWnd::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
RECT rc;
this->GetClientRect(&rc);
rc.top = 25;
rc.bottom -= 25;
this->m_Grid.MoveWindow(rc.left, rc.top, rc.right, rc.bottom, TRUE);
}
void CMTWnd::OnCMsgMtUpdate()
{
// custom message for MT Update
//
char c[1024];
char s[80];
double a=1.0;
int i=0, j=0, len=0;
WORD bsw=0;
WORD cmd1=0, cmd2=0;
WORD rt1=0, sa1=0, mc1=0, wc1=0, tr1=0;
WORD rt2=0, sa2=0, mc2=0, wc2=0, tr2=0;
BOOL isBroadCast=FALSE;
if ((this->MsgRecvCnt)==0)
{
ultoa((this->MsgRecvCnt)+1, c, 10);
this->m_Grid.SetRow(1);
this->m_Grid.SetCol(0); // ID
this->m_Grid.SetText(TEXT(c));
this->m_Grid.SetCol(1); // BLOCK_STATUS_WORD
sprintf(c, "%04x", g_MTMsg.BSW);
this->m_Grid.SetText(TEXT(c));
this->m_Grid.SetCol(2); // TIMETAG
ultoa(g_MTMsg.TimeTag, c, 10);
this->m_Grid.SetText(TEXT(c));
bsw = g_MTMsg.BSW; // Block Status Word
cmd1 = g_MTMsg.MSGBlock[0]; // Command Word 1
rt1 = ::OwnRTAddr(cmd1);
tr1 = ::OwnTR(cmd1);
sa1 = ::OwnSubAddr(cmd1);
wc1 = ::OwnWordCount(cmd1);
mc1 = ::OwnModeCode(cmd1);
if (rt1==31)
isBroadCast = TRUE;
if ((bsw&MTMS_RT_RT_FMT)==MTMS_RT_RT_FMT)
{
// RT-RT
cmd2 = g_MTMsg.MSGBlock[1];
rt2 = ::OwnRTAddr(cmd2);
tr2 = ::OwnTR(cmd2);
sa2 = ::OwnSubAddr(cmd2);
wc2 = ::OwnWordCount(cmd2);
mc2 = ::OwnModeCode(cmd2);
if (rt2==31)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -