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

📄 sys.cpp

📁 AD 数据采集卡基本的采集界面
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -