📄 sys.cpp
字号:
// Sys.cpp : Defines the class behaviors for the application.
//
#include "stdafx.h"
#include "Sys.h"
#include "MainFrm.h"
#include "ADFrm.h"
#include "ADDoc.h"
#include "ADDigitView.h"
#include "ADWaveView.h"
#include "HistDataFrm.h"
#include "HistDataDoc.h"
#include "HistDigitView.h"
#include "DIOFrm.h"
#include "DIODoc.h"
#include "DIOView.h"
#include "ADStatusView.h"
#include "ParaCfgView.h"
#include "DAFrame.h"
#include "DADoc.h"
#include "DAView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSysApp
extern BOOL m_bFirstCreateDeviceFile;
extern CADStatusView* pADStatusView;
extern CParaCfgView* pParaCfgView;
extern BOOL bCreateDevice;
extern int nProcessMode;
extern BOOL bDeviceADRun;
extern BOOL m_bCloseFile;
BEGIN_MESSAGE_MAP(CSysApp, CWinApp)
//{{AFX_MSG_MAP(CSysApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
ON_UPDATE_COMMAND_UI(IDM_CloseFile, OnUpdateCloseFile)
ON_UPDATE_COMMAND_UI(IDM_DataFileNew, OnUpdateDataFileNew)
ON_UPDATE_COMMAND_UI(IDM_ListDevice, OnUpdateListDevice)
ON_COMMAND(IDM_CloseFile, OnCloseFile)
ON_COMMAND(IDM_DataFileNew, OnDataFileNew)
ON_COMMAND(IDM_ListDevice, OnListDevice)
ON_COMMAND(IDM_DataSave, OnDataSave)
ON_UPDATE_COMMAND_UI(IDM_DataSave, OnUpdateDataSave)
ON_COMMAND(IDM_DigitalShow, OnDigitalShow)
ON_UPDATE_COMMAND_UI(IDM_DigitalShow, OnUpdateDigitalShow)
ON_COMMAND(IDM_GraphicShow, OnGraphicShow)
ON_UPDATE_COMMAND_UI(IDM_GraphicShow, OnUpdateGraphicShow)
ON_COMMAND(IDM_StartDeviceAD, OnStartDeviceAD)
ON_COMMAND(IDM_StopDeviceAD, OnStopDeviceAD)
ON_UPDATE_COMMAND_UI(IDM_StopDeviceAD, OnUpdateStopDeviceAD)
ON_COMMAND(IDM_Open_AD, OnOpenAD)
ON_UPDATE_COMMAND_UI(IDM_Open_AD, OnUpdateOpenAD)
ON_COMMAND(IDM_HistoryData, OnHistoryData)
ON_UPDATE_COMMAND_UI(IDM_HistoryData, OnUpdateHistoryData)
ON_COMMAND(IDM_Open_DA, OnOpenDA)
ON_UPDATE_COMMAND_UI(IDM_Open_DA, OnUpdateOpenDA)
ON_UPDATE_COMMAND_UI(IDM_StartDeviceAD, OnUpdateStartDeviceAD)
ON_COMMAND(IDM_Open_IO, OnOpenIO)
ON_UPDATE_COMMAND_UI(IDM_Open_IO, OnUpdateOpenIO)
//}}AFX_MSG_MAP
// Standard file based document commands
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
// Standard print setup command
ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSysApp construction
CSysApp::CSysApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
m_bCreateADFrm = FALSE;
m_bCreateDIOFrm = FALSE;
m_bCreateDAFrm = FALSE;
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CSysApp object
CSysApp theApp;
ULONG ReadSizeWords; // 读入的数据长度
/////////////////////////////////////////////////////////////////////////////
// CSysApp initialization
BOOL CSysApp::InitInstance()
{
BOOL bCreate=FALSE;
HANDLE hDeviceTemp; //
m_CurrentDeviceID=0; // 指定当前设备的ID标示符
/////
int DeviceCount;
hDeviceTemp = PCI2006_CreateDevice(0); // 创建设备对象,保存在App中,可供其他任何子窗体或子功能使用
DeviceCount = PCI2006_GetDeviceCount(hDeviceTemp);
PCI2006_ReleaseDevice(hDeviceTemp);
for(int i=0; i<DeviceCount; i++)
{
sprintf((char*)m_pszExeName, "PCI2006-%d", i);
// 创建互斥对象
m_hMutex=::CreateMutex(NULL, NULL, m_pszExeName); // m_pszExeName为本程序的执行名
if(GetLastError()==ERROR_ALREADY_EXISTS) // 第二次创建应用程序
{
bCreate=FALSE;
continue; // 如果已经创建,则继续下一个设备的应用程序创建
}
else
{
bCreate=TRUE;
m_CurrentDeviceID=i;
break;
}
}
if(DeviceCount!=0)
{
if(bCreate==FALSE) // 当该实例不能被创建时
{
AfxMessageBox("对不起,您的所有设备已被相应程序管理,您不能再创建新实例...",MB_ICONWARNING,0);
return FALSE;
}
m_hDevice = PCI2006_CreateDevice(m_CurrentDeviceID); // 创建设备对象,保存在App中,可供其他任何子窗体或子功能使用
}
else
m_hDevice = INVALID_HANDLE_VALUE;
//if(m_CurrentDeviceID<DeviceCount) AfxMessageBox("您可以再启动该应用程序实例来管理下一个设备");
///////////////////////////////////////////////
// 判断用户的显示器模式是否为1024*768
int Len=GetSystemMetrics(SM_CXSCREEN); // 取得屏幕宽度
if(Len<1024) // 如果屏幕宽度大小1024,则
{
if(AfxMessageBox("请最好使用1024*768或以上的显示器分辨率,继续吗?",MB_ICONWARNING|MB_YESNO,0)==IDNO)
{
ExitInstance();
return FALSE;
}
}
///////////////////////////////////////////////
// 应用程序正常创建代码:
AfxEnableControlContainer();
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
// Change the registry key under which our settings are stored.
// TODO: You should modify this string to be something appropriate
// such as the name of your company or organization.
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings(16); // Load standard INI file options (including MRU)
// Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views.
// 添加AD采集模板
pADTemplate = new CMultiDocTemplate(
IDR_AD,
RUNTIME_CLASS(CADDoc),
RUNTIME_CLASS(CADFrame), // custom MDI child frame
RUNTIME_CLASS(CADDigitView));
AddDocTemplate(pADTemplate);
// 添加历史数据回放模板
pHistDataTemplate = new CMultiDocTemplate(
IDR_HistoryData,
RUNTIME_CLASS(CHistDataDoc),
RUNTIME_CLASS(CHistDataFrm), // custom MDI child frame
RUNTIME_CLASS(CHistDigitView));
AddDocTemplate(pHistDataTemplate);
// 添加数字I/O测试模板
pIOTemplate= new CMultiDocTemplate(
IDR_IO,
RUNTIME_CLASS(CDIODoc),
RUNTIME_CLASS(CDIOFrm), // custom MDI child frame
RUNTIME_CLASS(CDIOView));
AddDocTemplate(pIOTemplate);
// 添加DA模板
pDATemplate= new CMultiDocTemplate(
IDR_DA,
RUNTIME_CLASS(CDADoc),
RUNTIME_CLASS(CDAFrame), // custom MDI child frame
RUNTIME_CLASS(CDAView));
AddDocTemplate(pDATemplate);
// Enable DDE Execute open
// 让WINDOWS登记该程序的缺省数据文件名扩展名
EnableShellOpen();
RegisterShellFileTypes(TRUE);
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// Dispatch commands specified on the command line
//if (!ProcessShellCommand(cmdInfo))
// return FALSE;
//CString command_line ;
//command_line = GetCommandLine() ; // so we know ehere to look for DLL's
//AfxMessageBox(cmdInfo.m_strFileName);
//command_line = command_line.Left(command_line.Find("DocViewFromDLL.exe")) ; // lose exe name
//command_line = command_line.Right(command_line.GetLength() - 1) ; // lose leading "
// create main MDI Frame window
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
return FALSE;
m_pMainWnd = pMainFrame;
// The main window has been initialized, so show and update it.
// pMainFrame->ShowWindow(m_nCmdShow);
pMainFrame->ShowWindow(SW_SHOWMAXIMIZED); // 使主窗口最大化
pMainFrame->UpdateWindow();
// Enable drag/drop open
m_pMainWnd->DragAcceptFiles(); // 支持拖放功能
::SetProp(m_pMainWnd->GetSafeHwnd(), m_pszExeName, (HANDLE)1);
CString MainFrmName; char str[100];
sprintf(str, "PCI2006-%d ", m_CurrentDeviceID);
MainFrmName = pMainFrame->GetTitle();
MainFrmName = str+MainFrmName;
pMainFrame->SetTitle(MainFrmName);
OnOpenDA(); // 打开DA设备
OnOpenIO(); // 打开DIO设备
OnOpenAD(); // 打开AD设备
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
// No message handlers
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -