亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? das_vcdemodlg.cpp

?? 簡單實現了OPC功能的代碼實例大家參考一下吧
?? CPP
字號:
// DAS_VCDEMODlg.cpp : implementation file
//

#include "stdafx.h"
#include "DAS_VCDEMO.h"
#include "DAS_VCDEMODlg.h"
#include "DASVRSDK.h"
#include "Resource.h"


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

/////////////////////////////////////////////////////////////////////////////
// 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)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDAS_VCDEMODlg dialog

CDAS_VCDEMODlg::CDAS_VCDEMODlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDAS_VCDEMODlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDAS_VCDEMODlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CDAS_VCDEMODlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDAS_VCDEMODlg)
	DDX_Control(pDX, IDC_LIST, m_List);
	DDX_Control(pDX, IDC_TREE, m_Tree);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CDAS_VCDEMODlg, CDialog)
	//{{AFX_MSG_MAP(CDAS_VCDEMODlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_NOTIFY(TVN_SELCHANGED, IDC_TREE, OnSelchangedTree)
	ON_COMMAND(ID_MENUExit, OnMENUExit)
	ON_COMMAND(ID_MENUAbout, OnMENUAbout)
	ON_WM_CREATE()
	ON_WM_SHOWWINDOW()
	ON_WM_DESTROY()
	ON_WM_TIMER()
	ON_COMMAND(IDR_Register, OnRegister)
	ON_COMMAND(IDR_Unregister, OnUnregister)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDAS_VCDEMODlg message handlers

BOOL CDAS_VCDEMODlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CDAS_VCDEMODlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		if(nID==1088)
		{
			Monitor();
		}
		else
		{
			CDialog::OnSysCommand(nID, lParam);
		}
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CDAS_VCDEMODlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CDAS_VCDEMODlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CDAS_VCDEMODlg::CreateOPCServer()
{
	if(CreateServer(OPCClsID,2000))
	{
		InitOPCOK=true;
		SetWriteCallback(WriteCallback);
		SetServerNotify(ServerNotify);
		SetReadCallback(ReadCallback);
		SetTagQualifier(44);
		AddTags();
		SetServerState(1);
		SetTimer(ID_TIMER, 2000, NULL);
	}
	else InitOPCOK=false;
}

void CDAS_VCDEMODlg::FreeOPCServer()
{
	if (InitOPCOK)
	{
		long I;
		for(I=0;I<=TagCount;I++)
		{
			if(TagList[I].vType==8)
				::SysFreeString(TagList[I].vValue.bstrVal);
		}
		FreeServer();
		FreeOPCDef();
		KillTimer(ID_TIMER);
	}
}

void CDAS_VCDEMODlg::Simulate()
{
	long I;
	int r;
	CString str;
	char s[6];
	FILETIME ft;
	GetSystemTimeAsFileTime(&ft);

	for(I=0;I<=TagCount;I++)
	{
		r=rand();
		if(TagList[I].cID.IsEmpty()) continue;
		switch(TagList[I].vType)
		{
		case VT_I4:
			TagList[I].vValue.intVal=r;
			break;

		case VT_R4:
			TagList[I].vValue.fltVal=(float)r / 101 *100;
			break;
		case VT_BSTR:
			_itoa(r,s,10);
			str=s;
			::SysFreeString(TagList[I].vValue.bstrVal);
			TagList[I].vValue.bstrVal=str.AllocSysString();
			break;
		case VT_BOOL:
			if((r % 2)==1)
			{
				TagList[I].vValue.boolVal=true;
			}
			else TagList[I].vValue.boolVal=false;
			break;
		};
		TagList[I].ft=ft;
		TagList[I].lQuality=192;
		UpdateTagWithTimeStamp(TagList[I].hHWND,TagList[I].vValue, TagList[I].lQuality, TagList[I].ft);
	};
	Monitor();
}

void CDAS_VCDEMODlg::Monitor()
{
	SYSTEMTIME st;
	FILETIME ft;
	wchar_t wstr[16];
	CTime ct;
	int I,J;
	_TREEITEM *pi;

	pi=m_Tree.GetSelectedItem();
	CString cs=m_Tree.GetItemText(pi);
	J=-1;
	if(cs=="Integer") J=0;
	if(cs=="String") J=8;
	if(cs=="Bool") J=16;
	if(cs=="Float") J=24;
	if(J==-1) return;


	m_List.DeleteAllItems();
	
	int Index;
	char Data[32];

	for(I=0; I<8;I++)
	{
		Index=m_List.InsertItem(I,TagList[I+J].cID);

		sprintf(Data, "%i",TagList[I+J].hHWND);
		m_List.SetItemText(Index,1,Data);

		sprintf(Data, "%i",TagList[I+J].vType);
		m_List.SetItemText(Index,2,Data);

		switch(TagList[I+J].vType)
		{
		case VT_I4:
			sprintf(Data, "%i",TagList[I+J].vValue.intVal);
			m_List.SetItemText(Index,1,Data);
			break;
		case VT_BSTR:
			wcscpy(wstr,TagList[I+J].vValue.bstrVal);
			sprintf(Data, "%S", &wstr);
			m_List.SetItemText(Index,1,Data);
			break;
		case VT_BOOL:
			if(TagList[I+J].vValue.boolVal) 
			{
				m_List.SetItemText(Index,1,"TRUE");
			}
			else m_List.SetItemText(Index,1,"FALSE");
			break;
		case VT_R4:
			sprintf(Data, "%f",TagList[I+J].vValue.fltVal);
			m_List.SetItemText(Index,1,Data);
			break;
		}
		sprintf(Data, "%i",TagList[I+J].lQuality);
		m_List.SetItemText(Index,2,Data);

		//ft=TagList[I+J].ft;
		FileTimeToLocalFileTime(&TagList[I+J].ft, &ft);
		FileTimeToSystemTime(&ft,&st);
		ct=CTime(st);
		m_List.SetItemText(Index,3,ct.Format("%c"));
	}
}

void CDAS_VCDEMODlg::AddTags()
{
	long I,h;
	char ID[6];
	VARIANT v;
	FILETIME ft;
	SYSTEMTIME st;
	GetSystemTime(&st);
	SystemTimeToFileTime(&st,&ft);
	_TREEITEM *rti;

	rti=m_Tree.InsertItem("VCDEMO",TVI_ROOT,TVI_LAST);
	m_Tree.InsertItem("Integer",rti,TVI_LAST);
	m_Tree.InsertItem("String",rti,TVI_LAST);
	m_Tree.InsertItem("Bool",rti,TVI_LAST);
	m_Tree.InsertItem("Float",rti,TVI_LAST);
	m_Tree.Expand(rti,TVE_EXPAND);

	SetTagQualifier(46);
	TagCount=-1;
	CString str=CString("Integer");
	VariantInit(&v);
	h=RegTag(0,str,v,0,0);
	for(I=0;I<8;I++)
	{
		TagCount++;
		sprintf(ID,"TAG_I%d",I);
		TagList[TagCount].cID=ID;
		TagList[TagCount].lQuality=192;
		TagList[TagCount].ft=ft;
		TagList[TagCount].vType=VT_I4;
		TagList[TagCount].vValue.vt=VT_I4;
		TagList[TagCount].vValue.intVal=0;	
		str=TagList[I].cID.GetBuffer(TagList[I].cID.GetLength());
//		TagList[I].hHWND=RegTag(h,str,TagList[I].vValue,TagList[I].lQuality,3);
		TagList[I].hHWND=RegTagEx(h,str,VT_I4,3);
	}
	str=CString("String");
	h=RegTag(0,str,v,0,0);
	
	for(I=0;I<8;I++)
	{
		TagCount++;
		sprintf(ID,"TAG_S%d",I);
		TagList[TagCount].cID=ID;
		TagList[TagCount].lQuality=192;
		TagList[TagCount].ft=ft;
		TagList[TagCount].vType=VT_BSTR;
		TagList[TagCount].vValue.bstrVal=str.AllocSysString();
		TagList[TagCount].vValue.vt=VT_BSTR;
		str=TagList[TagCount].cID.GetBuffer(TagList[TagCount].cID.GetLength());
//		TagList[TagCount].hHWND=RegTag(h,str,TagList[TagCount].vValue,TagList[TagCount].lQuality,3);
		TagList[TagCount].hHWND=RegTagEx(h,str,VT_BSTR,3);
	}
	str=CString("Bool");
	h=RegTag(0,str,v,0,0);
	for(I=0;I<8;I++)
	{
		TagCount++;
		sprintf(ID,"TAG_B%d",I);
		TagList[TagCount].cID=ID;
		TagList[TagCount].lQuality=192;
		TagList[TagCount].ft=ft;
		TagList[TagCount].vType=VT_BOOL;
		TagList[TagCount].vValue.vt=VT_BOOL;
		str=TagList[TagCount].cID.GetBuffer(TagList[TagCount].cID.GetLength());
//		TagList[TagCount].hHWND=RegTag(h,str,TagList[TagCount].vValue,TagList[TagCount].lQuality,3);
		TagList[TagCount].hHWND=RegTagEx(h,str,VT_BOOL,3);
	}
	str=CString("Float");
	h=RegTag(0,str,v,0,0);
	for(I=0;I<8;I++)
	{
		TagCount++;
		sprintf(ID,"TAG_F%d",I);
		TagList[TagCount].cID=ID;
		TagList[TagCount].lQuality=192;
		TagList[TagCount].ft=ft;
		TagList[TagCount].vType=VT_R4;
		TagList[TagCount].vValue.vt=VT_R4;
		TagList[TagCount].vValue.fltVal=0;
		str=TagList[TagCount].cID.GetBuffer(TagList[TagCount].cID.GetLength());
//		TagList[TagCount].hHWND=RegTag(h,str,TagList[TagCount].vValue,TagList[TagCount].lQuality,3);
		TagList[TagCount].hHWND=RegTagEx(h,str,VT_R8,3);
	}
}

void CDAS_VCDEMODlg::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	Monitor();
	*pResult = 0;
}

void CDAS_VCDEMODlg::OnMENUExit() 
{
//	CloseWindow();
	DestroyWindow();
}

void CDAS_VCDEMODlg::OnMENUAbout() 
{
	CAboutDlg aboutDlg;
	aboutDlg.DoModal();		
}

int CDAS_VCDEMODlg::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CDialog::OnCreate(lpCreateStruct) == -1)
		return -1;
	

	// TODO: Add your specialized creation code here
	return 0;
}

void CDAS_VCDEMODlg::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	CDialog::OnShowWindow(bShow, nStatus);
	
	m_List.InsertColumn(0, "ID", LVCFMT_LEFT, 80); 
	m_List.InsertColumn(1, "VALUE", LVCFMT_LEFT, 80); 
	m_List.InsertColumn(2, "QUALITY", LVCFMT_LEFT, 60); 
	m_List.InsertColumn(3, "TIMESTAMP", LVCFMT_LEFT, 160);
	CreateOPCServer();
}

void CDAS_VCDEMODlg::OnDestroy() 
{
	CDialog::OnDestroy();
	FreeOPCServer();
}

void CDAS_VCDEMODlg::OnTimer(UINT nIDEvent) 
{
	CDialog::OnTimer(nIDEvent);
	Simulate();
}

void CDAS_VCDEMODlg::OnRegister() 
{
	RegServer(OPCClsID,OPCProgID,OPCDescr,EXEName);
}

void CDAS_VCDEMODlg::OnUnregister() 
{
	UnregServer(OPCClsID,EXEName);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久97超碰国产精品超碰| 一区二区三区欧美日韩| 777a∨成人精品桃花网| 波多野结衣亚洲一区| 处破女av一区二区| 不卡的电视剧免费网站有什么| 国产精品自拍网站| 成人一区二区三区视频在线观看| 国产专区欧美精品| 国产999精品久久久久久绿帽| 国产精品一区二区三区乱码| 国产白丝网站精品污在线入口| 国产一区二区伦理片| 国产二区国产一区在线观看| 国产一区二区三区久久久| 国产精品自拍av| 成人av资源在线| 欧美色倩网站大全免费| 欧美日韩一区久久| 91精品国产一区二区三区蜜臀 | 国产午夜精品一区二区| 久久久蜜桃精品| 综合欧美一区二区三区| 亚洲国产视频a| 精品影院一区二区久久久| 国产一区二区在线免费观看| 成人av网址在线观看| 欧洲一区二区三区免费视频| 欧美二区三区的天堂| 亚洲精品在线网站| 18成人在线视频| 青娱乐精品视频在线| 国产iv一区二区三区| 欧美日韩中文字幕一区二区| 精品成人免费观看| 亚洲综合激情另类小说区| 免费成人你懂的| 色综合久久综合| 26uuu另类欧美亚洲曰本| 亚洲人一二三区| 久久99久久99精品免视看婷婷| 波多野结衣在线一区| 7777精品伊人久久久大香线蕉经典版下载 | 欧亚洲嫩模精品一区三区| 日韩欧美久久久| 一区二区三区中文字幕在线观看| 久久国产精品72免费观看| 懂色一区二区三区免费观看| 51精品国自产在线| 中文字幕一区二区三| 久久国产精品99久久久久久老狼| 色呦呦一区二区三区| 精品91自产拍在线观看一区| 亚洲欧美日韩精品久久久久| 美女脱光内衣内裤视频久久网站 | 亚洲少妇30p| 免费在线视频一区| 欧美视频在线观看一区二区| 中文字幕欧美一| 国产白丝精品91爽爽久久| 91精品福利在线一区二区三区| 亚洲欧洲综合另类在线| www.性欧美| 亚洲欧美在线观看| av一区二区三区黑人| 国产女人水真多18毛片18精品视频| 日本三级韩国三级欧美三级| 在线国产电影不卡| 亚洲综合激情网| 欧美综合视频在线观看| 亚洲美女一区二区三区| 97se亚洲国产综合自在线不卡 | 亚洲国产色一区| 91久久一区二区| 亚洲男女毛片无遮挡| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产成人精品亚洲日本在线桃色| 日韩一区二区电影| 麻豆精品久久精品色综合| 日韩一区二区三区视频| 蜜桃av一区二区在线观看| 777午夜精品免费视频| 日本欧美韩国一区三区| 精品日韩一区二区| 国产成人免费9x9x人网站视频| 国产三级一区二区三区| 国产成人高清在线| 中文字幕一区免费在线观看| 99国产精品一区| 亚洲国产视频网站| 日韩女优av电影在线观看| 国模娜娜一区二区三区| 久久久久久久久久久久久夜| 成人午夜看片网址| 亚洲欧美另类图片小说| 欧美日韩一卡二卡| 日韩电影在线免费观看| 久久亚洲一区二区三区四区| 国产大片一区二区| 亚洲一区自拍偷拍| 精品久久久久久久一区二区蜜臀| 国产盗摄一区二区| 五月综合激情婷婷六月色窝| 日韩精品在线看片z| 丰满放荡岳乱妇91ww| 亚洲精品国产无天堂网2021 | 国产曰批免费观看久久久| 国产精品免费视频一区| 欧美麻豆精品久久久久久| 久久97超碰色| 亚洲精品成a人| 欧美成人一区二区| 91天堂素人约啪| 美女视频一区在线观看| 亚洲视频一区二区在线观看| 日韩一区二区三区免费看 | 成人午夜激情在线| 日本aⅴ免费视频一区二区三区| 久久久久久99精品| 欧美日韩另类一区| av在线不卡观看免费观看| 日韩av一区二区三区| 亚洲视频你懂的| 日韩欧美国产精品| 在线一区二区观看| www.成人在线| 国产综合色视频| 日韩av高清在线观看| 一区二区三区四区国产精品| 日本一区二区三区久久久久久久久不 | 国产a级毛片一区| 日本视频一区二区| 亚洲高清不卡在线| 最新日韩av在线| 国产亚洲婷婷免费| 日韩精品中午字幕| 欧美日韩黄视频| 日本韩国视频一区二区| 粉嫩av一区二区三区粉嫩| 国产一区不卡精品| 激情久久久久久久久久久久久久久久| 一区二区在线观看免费视频播放| 欧美韩日一区二区三区四区| 日韩美女在线视频| 日韩欧美久久一区| 日韩精品一区二区三区在线| 欧美色视频在线观看| 色综合中文综合网| 日韩三级.com| 欧美高清精品3d| 欧美中文字幕一区二区三区| 99久久国产免费看| 91网站视频在线观看| 成人av免费在线播放| 成人激情视频网站| 成人黄色大片在线观看| 成人激情免费视频| 99在线精品观看| 91在线观看美女| 在线欧美日韩国产| 欧美日韩国产综合草草| 欧美一级日韩不卡播放免费| 91精品国产色综合久久ai换脸| 欧美日韩国产综合一区二区三区| 欧美美女直播网站| 日韩视频免费直播| 久久久精品国产99久久精品芒果| 中文字幕精品—区二区四季| 中文字幕亚洲一区二区av在线| 亚洲天堂网中文字| 香蕉久久一区二区不卡无毒影院| 日韩国产在线一| 国产一区在线看| 99精品久久99久久久久| 欧美乱熟臀69xxxxxx| 欧美岛国在线观看| 国产拍欧美日韩视频二区| 亚洲免费观看高清完整版在线观看 | 成人欧美一区二区三区| 亚洲综合色网站| 久久se这里有精品| 97精品电影院| 色婷婷一区二区三区四区| 视频在线观看一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产成人av影院| 欧美亚洲高清一区二区三区不卡| 日韩一区二区在线观看视频| 中文字幕第一区第二区| 亚洲国产毛片aaaaa无费看| 国产在线播放一区| 欧美女孩性生活视频| 国产精品色呦呦| 看国产成人h片视频| 国产盗摄女厕一区二区三区| 成人综合激情网| 中文一区二区在线观看| 午夜视频在线观看一区| 国产999精品久久| 欧美精品久久99久久在免费线 |