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

📄 mainfrm.cpp

📁 1553B板卡的源代码,只有购买板卡才能得到的好资料
💻 CPP
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "SF1553.h"
#include "ModeSelDlg.h"
#include "CardSelDlg.h"
#include "TimeSetDlg.h"
#include "DIODlg.h"

#include "MainFrm.h"
#include "Thread.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

///////////////////////////////////////////////////////////////////////
//Gloable Variables
STRUCT_RUN_STATUS g_RunStat;
STRUCT_BC_CONf g_BCConf;
STRUCT_MISC_CONF g_MiscConf;
STRUCT_MT_CONF g_MTConf;
STRUCT_RT_CONF g_RTConf;
HANDLE g_CardHandle = 0;
BYTE g_CardId = 0;
BOOL g_BCRUN;
HANDLE g_ThreadHandle;

BOOL fileOptNow=FALSE;
DWORD g_ThreadId; 



/////////////////////////////////////////////////////////////////////////////
// CMainFrame


IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_COMMAND(ID_FILE_NEW, OnMenuFileNew)
	ON_COMMAND(ID_MENU_TIME, OnMenuTime)
	ON_COMMAND(ID_MENU_DIO, OnMenuDio)
	ON_COMMAND(ID_TIME, OnTime)
	ON_COMMAND(ID_DIO, OnDio)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
	
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	BOOL ret = 0;
	if (CMDIFrameWnd::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
	}

	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
	}
	init();

	CCardSelDlg dlgCardSel;
	if (dlgCardSel.DoModal() != IDOK)
	{
		::ExitProcess(0);
		return 0;
	}

	ret = S1553_Open(&g_CardHandle, g_CardId);
	if (ret == FALSE)
	{
		g_CardHandle = NULL;
		MessageBox(TEXT("找不到板卡!\n\n程序将继续运行在演示模式!"), TEXT("错误"), MB_OK | MB_ICONERROR);
	}
	else
	{
		if (g_CardHandle == NULL)
		{
			// can not retrive the Handle of Card
			ret = FALSE;
			MessageBox(TEXT("找不到板卡!\n\n程序将继续运行在演示模式!"), TEXT("板卡错误 - 1"), MB_OK | MB_ICONERROR);
		}
	}

	if (g_CardHandle != NULL)
	{
		//	reset card
		if (!S1553_Reset(g_CardHandle))
		{
			MessageBox(TEXT("复位板卡失败!"), TEXT("错误"), MB_OK | MB_ICONERROR);
			DestroyWindow();
			return 0;
		}
	}
	if(g_CardHandle != NULL)
	{
		g_isRun = TRUE;
		g_ThreadHandle = ::CreateThread(NULL,                        // no security attributes 
								0,                           // use default stack size  
								WorkerFun,                  // thread function 
								(LPVOID)this->m_hWnd,                // argument to thread function 
								CREATE_SUSPENDED,            // use default creation flags 
								&g_ThreadId);                // returns the thread identifier 
		if (g_ThreadHandle == NULL)
		{
			MessageBox(TEXT("无法创建接收线程,请重新启动应用程序!"), TEXT("错误"), MB_OK | MB_ICONERROR);
			g_isRun = FALSE;
		}
		::SetThreadPriority(g_ThreadHandle, THREAD_PRIORITY_NORMAL);
		::SetThreadPriority(g_ThreadHandle, THREAD_PRIORITY_BELOW_NORMAL);
		::ResumeThread(g_ThreadHandle);
	}
	

	// 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);
	if(ret)
	{
		SetWindowText("FYM1553-PCI-FBC31RT");
	}
	else
	{
		SetWindowText("FYM1553-PCI-FBC31RT 演示");
	}

	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CMDIFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CMDIFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CMDIFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers


void CMainFrame::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 CMainFrame::init()
{
	memset(&g_RunStat, 0, sizeof(g_RunStat));
	memset(&g_BCConf, 0, sizeof(g_BCConf));
	memset(&g_MiscConf, 0, sizeof(g_MiscConf));
	memset(&g_MTConf, 0, sizeof(g_MiscConf));
	memset(&g_RTConf, 0, sizeof(g_RTConf));
	g_CardHandle = NULL;
	g_CardId = 0;
	g_BCRUN = FALSE;
	fileOptNow=FALSE;
	g_ThreadId = 0;
	g_ThreadHandle = NULL;
	//messages
	memset(&g_MsgsVec, 0, sizeof(g_MsgsVec));
	memset(&g_TempMsgsVec, 0, sizeof(g_TempMsgsVec));
	memset(&g_TempMsg, 0, sizeof(g_TempMsg));
	memset(&g_FrameConf, 0, sizeof(g_FrameConf));
	memset(&g_Frame, 0, sizeof(g_Frame));
	memset(&g_RMsg, 0, sizeof(g_RMsg));
	memset(&g_TempRTMsgs, 0, sizeof(g_TempRTMsgs));
	memset(&g_RTMsgs, 0, sizeof(g_RTMsgs));
	memset(&g_RTTxMode, 0, sizeof(g_RTTxMode));
	memset(&g_RTStatusWord, 0, sizeof(g_RTStatusWord));
	memset(&g_RTRxMsg, 0, sizeof(g_RTRxMsg));
	memset(&g_RTTxMsg, 0, sizeof(g_RTTxMsg));
	memset(&g_MTMsg, 0, sizeof(g_MTMsg));
	msgChangeType = 0;
	modifyid = -1;
	//misc
	return;
}

void CMainFrame::OnMenuTime() 
{
	// TODO: Add your command handler code here
	CTimeSetDlg tDlg;
	tDlg.DoModal();	
}

void CMainFrame::OnMenuDio() 
{
	// TODO: Add your command handler code here
	CDIODlg dDlg;
	dDlg.DoModal();	
}

void CMainFrame::OnTime() 
{
	// TODO: Add your command handler code here
	CTimeSetDlg tDlg;
	tDlg.DoModal();	
	
}

void CMainFrame::OnDio() 
{
	// TODO: Add your command handler code here
		CDIODlg dDlg;
	dDlg.DoModal();	
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -