📄 mainfrm.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 + -