⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mtwnd.cpp

📁 1553B板卡的源代码,只有购买板卡才能得到的好资料
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// 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 + -