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

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

?? valuemsgview.cpp

?? 一個OPC客戶端監視程序
?? CPP
字號:
// ValueMsgView.cpp : implementation file
//

#include "stdafx.h"
#include "OpcClientSpy.h"
#include "ValueMsgView.h"
#include "AddItemDlg.h"
#include "ServerInfoView.h"
#include "MainFrm.h"
#include "ItemParamsDlg.h"
#include "WriteItemDlg.h"

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

CValueMsgView *theMsgValue=NULL;
/////////////////////////////////////////////////////////////////////////////
// CValueMsgView

IMPLEMENT_DYNCREATE(CValueMsgView, CFormView)

CValueMsgView::CValueMsgView()
	: CFormView(CValueMsgView::IDD)
{
	//{{AFX_DATA_INIT(CValueMsgView)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	pCurrentItem = NULL;
	transactionID = 0;
	theMsgValue = this;
}

CValueMsgView::~CValueMsgView()
{
   while( !m_items.IsEmpty() )
      delete m_items.RemoveTail();
}

void CValueMsgView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CValueMsgView)
	DDX_Control(pDX, IDC_LIST_INFO, m_value);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CValueMsgView, CFormView)
	//{{AFX_MSG_MAP(CValueMsgView)
	ON_MESSAGE(WM_OPCDATA, OnOPCDataChange)
	ON_MESSAGE(WM_OPCWRITE, OnOPCWriteError)
	ON_MESSAGE(WM_OPCSHUTDOWN, OnOPCShutdown)
	//ON_MESSAGE(WM_OPCWRITE, OnOPCWriteError)
	//ON_MESSAGE(WM_OPCSHUTDOWN, OnOPCShutdown)
	ON_WM_SIZE()
	ON_WM_CONTEXTMENU()
	ON_COMMAND(IDT_ADD_ITEM, OnAddItem)
	ON_UPDATE_COMMAND_UI(IDT_ADD_ITEM, OnUpdateAddItem)
	ON_COMMAND(IDT_ITEM_PROPERTY, OnItemProperty)
	ON_UPDATE_COMMAND_UI(IDT_ITEM_PROPERTY, OnUpdateItemProperty)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_INFO, OnItemchangedListInfo)
	ON_COMMAND(IDT_WRITE_TOITEM, OnWriteToitem)
	ON_UPDATE_COMMAND_UI(IDT_WRITE_TOITEM, OnUpdateWriteToitem)
	ON_COMMAND(IDT_DELETE_ITEM, OnDeleteItem)
	ON_UPDATE_COMMAND_UI(IDT_DELETE_ITEM, OnUpdateDeleteItem)
	ON_COMMAND(IDT_REFRESH, OnRefresh)
	ON_UPDATE_COMMAND_UI(IDT_REFRESH, OnUpdateRefresh)
	ON_COMMAND(IDT_READ_VALUE, OnReadValue)
	ON_UPDATE_COMMAND_UI(IDT_READ_VALUE, OnUpdateReadValue)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CValueMsgView diagnostics

#ifdef _DEBUG
void CValueMsgView::AssertValid() const
{
	CFormView::AssertValid();
}

void CValueMsgView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CValueMsgView message handlers

//初始化列表的標題等。
void CValueMsgView::InitalListCtrl(void)
{
	CRect rect;
	m_value.DeleteAllItems();
	m_value.InsertColumn(0, "條目", LVCFMT_LEFT,150,0);
	m_value.InsertColumn(1, "值", LVCFMT_LEFT,100,1);
	m_value.InsertColumn(2, "數據質量", LVCFMT_LEFT,100,2);
	m_value.InsertColumn(3, "時間", LVCFMT_LEFT,100,3);
	m_value.InsertColumn(4, "OPC服務", LVCFMT_LEFT,100,4);
	m_value.InsertColumn(5, "描述信息", LVCFMT_LEFT,200,5);
}

void CValueMsgView::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();
	
	//并初始化列標題
	InitalListCtrl();
}

void CValueMsgView::OnSize(UINT nType, int cx, int cy) 
{
	CFormView::OnSize(nType, cx, cy);
	
	CFormView::ShowScrollBar(SB_VERT,FALSE);
	CFormView::ShowScrollBar(SB_HORZ,FALSE);

	if (GetSafeHwnd())
	{
		if (m_value.GetSafeHwnd())
		{
			CRect rect(0,0,cx,cy);
			m_value.MoveWindow(&rect);
		}
	}	
}


//彈出菜單
void CValueMsgView::OnContextMenu(CWnd* pWnd, CPoint point) 
{
   CMenu popMenu;

   if( popMenu.LoadMenu(IDR_MENU_LIST) )
   {
      popMenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
                                             point.x,point.y,
                                             AfxGetMainWnd());
   }	
}


//刪除所有項
void  CValueMsgView::DeleteAllItem(void)
{
   while( !m_items.IsEmpty() )
      delete m_items.RemoveTail();
   pCurrentItem = NULL;
   //重新畫list
   OnUpdate(NULL,0,NULL);
}

//ITEM參數對話框
void CValueMsgView::OnItemProperty() 
{
   // get an interface pointer
   OPCItemMgt itemMgt;
   HRESULT hr = itemMgt.Attach( m_pServerView->opcGroup );
   if( FAILED(hr) )
      return;

   // test the item attributes enumerator
   EnumOPCItemAttributes enumerator;
   hr = itemMgt.CreateEnumerator( IID_IEnumOPCItemAttributes, enumerator );
   while( hr==S_OK && enumerator.IsOk() )
   {
      OPCITEMATTRIBUTES* pAttributes = NULL;
      ULONG count=0;
      hr = enumerator.Next( 1, &pAttributes, &count );
      if( hr == S_OK )
      {
         if( pAttributes->hClient == (OPCHANDLE)pCurrentItem )
         {
            // found the matching attributes for this item
            ItemParamsDlg dlg;
            dlg.pItemAttr = pAttributes;
            if( dlg.DoModal() == IDOK )
            {
               HRESULT *pErrors;
               hr = itemMgt.SetActiveState( 1, &pCurrentItem->hServerHandle, dlg.m_active, &pErrors);
               if( SUCCEEDED(hr) )
                  CoTaskMemFree( pErrors );
            }
         }
         VariantClear( &pAttributes->vEUInfo );
         CoTaskMemFree( pAttributes->szAccessPath );
         CoTaskMemFree( pAttributes->szItemID );
         if( pAttributes->pBlob )
            CoTaskMemFree( pAttributes->pBlob );
         CoTaskMemFree( pAttributes );
      }
      else if( FAILED(hr) )
         MessageBox( _T("EnumOPCItemAttributes: "));
   }
	
}


void CValueMsgView::OnUpdateItemProperty(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable( m_pServerView->opcServer.IsOk() && pCurrentItem );
}

void CValueMsgView::OnItemchangedListInfo(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	
	pCurrentItem = (Item*)pNMListView->lParam;
	
	*pResult = 0;
}

//寫值到ITEM
void CValueMsgView::OnWriteToitem() 
{
	WriteItemDlg dlg;
	dlg.m_item = pCurrentItem->name;
	if( dlg.DoModal() != IDOK ) return;
	
	CWaitCursor wait;
	HRESULT *pErrors = NULL;
	if( dlg.m_async )
	{
		if( m_pServerView->usingCP )
		{
			OPCAsyncIO2 opcAsyncIO2;
			if( opcAsyncIO2.Attach( m_pServerView->opcGroup ) == S_OK )
			{
				transactionID = 2;   // any number the client wants
				COleVariant vt( dlg.m_value );   // initialize as a string
				vt.ChangeType( pCurrentItem->value.vt );  // let COleVariant convert!
				HRESULT hr = opcAsyncIO2.Write(1, &pCurrentItem->hServerHandle,
                                          vt, transactionID, &transactionID, &pErrors);
				if( SUCCEEDED(hr) )
				{
					if( FAILED(pErrors[0]) )
						MessageBox(_T("usingCP:pErrors[0]:ASync Write: "));
					CoTaskMemFree( pErrors );
				}
				else
					MessageBox(_T("usingCP:FAILED(hrt):ASync Write: "));
			}
		}
		else//usingCP=FALSE
		{
			 OPCAsyncIO opcAsyncIO;
			if( opcAsyncIO.Attach( m_pServerView->opcGroup ) == S_OK )
			{
				COleVariant vt( dlg.m_value );   // initialize as a string
				vt.ChangeType( pCurrentItem->value.vt );  // let COleVariant convert!
				HRESULT hr = opcAsyncIO.Write(m_pServerView->dwConnection2, 1, &pCurrentItem->hServerHandle,
                                          vt, &transactionID, &pErrors);
				if( SUCCEEDED(hr) )
				{
					if( FAILED(pErrors[0]) )
						MessageBox(_T("pErrors[0]:ASync Write: "));
					CoTaskMemFree( pErrors );
				}
				else
					MessageBox(_T("FAILED(hr):ASync Write: "));
			}
		}//end of "else
	}
	else//dlg.m_async=FALSE
	{
		OPCSyncIO opcSyncIO;
		if( opcSyncIO.Attach( m_pServerView->opcGroup ) == S_OK )
		{
			COleVariant vt( dlg.m_value );   // initialize as a string
			vt.ChangeType( pCurrentItem->value.vt );  // let COleVariant convert!
			HRESULT hr = opcSyncIO.Write( 1, &pCurrentItem->hServerHandle, vt, &pErrors);
			if( SUCCEEDED(hr) )
			{
			   if( FAILED(pErrors[0]) )
				   MessageBox(_T("Sync Write: "));
			   CoTaskMemFree( pErrors );
			}
			else
				MessageBox( _T("FAILED(hrt):Sync Write: "));
		}
	}//end of "else...
	//強制顯示新的數據
	OnUpdate(NULL,0,NULL);
}

//是否允許寫值到ITEM
void CValueMsgView::OnUpdateWriteToitem(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable( m_pServerView->opcServer.IsOk() && pCurrentItem );
}

//刪除項目
void CValueMsgView::OnDeleteItem() 
{
   OPCItemMgt itemMgt;
   HRESULT hr = itemMgt.Attach( m_pServerView->opcGroup );
   if( SUCCEEDED(hr) )
   {
      HRESULT *pErrors=0;
      OPCHANDLE handle = pCurrentItem->hServerHandle;
      hr = itemMgt.RemoveItems( 1, &handle, &pErrors );
      if( SUCCEEDED(hr) )
         CoTaskMemFree( pErrors );
      POSITION pos = m_items.Find( pCurrentItem );
      m_items.RemoveAt( pos );
      delete pCurrentItem;
      pCurrentItem = NULL;
      OnUpdate(NULL,0,NULL);
   }
}

//是否允許刪除項目
void CValueMsgView::OnUpdateDeleteItem(CCmdUI* pCmdUI) 
{
   pCmdUI->Enable( m_pServerView->opcServer.IsOk() && pCurrentItem );
}

// Refresh causes all items to be advised immediately.
void CValueMsgView::OnRefresh() 
{
   CWaitCursor wait;
   if( m_pServerView->usingCP )
   {
      OPCAsyncIO2 opcAsyncIO2;
      if( opcAsyncIO2.Attach( m_pServerView->opcGroup ) == S_OK )
      {
         // test both Device and Cache data sources
         // This should cause the server to queue a refresh while one is going on.
         transactionID = 2;   // any number the client wants
         HRESULT hr = opcAsyncIO2.Refresh2(OPC_DS_DEVICE, transactionID, &transactionID);
         if( FAILED(hr) )
         {
            MessageBox( _T("Refresh2:error"));
            return;
         }
      }
   }//end of "if(usingCP)...
   else
   {
      OPCAsyncIO opcAsyncIO;
      if( opcAsyncIO.Attach( m_pServerView->opcGroup ) == S_OK )
      {
         // test both Device and Cache data sources
         // This should cause the server to queue a refresh while one is going on.
         HRESULT hr = opcAsyncIO.Refresh(m_pServerView->dwConnection1, OPC_DS_DEVICE, &transactionID);
         if( FAILED(hr) )
         {
            MessageBox( _T("!usingCP:Refresh: "));
            return;
         }
      }
   }//end of "else...
   OnUpdate(NULL,0,NULL);
}

//是否允許刷新
void CValueMsgView::OnUpdateRefresh(CCmdUI* pCmdUI) 
{
   pCmdUI->Enable( m_pServerView->opcServer.IsOk() );
}

//Read value from OPC Server
void CValueMsgView::OnReadValue() 
{
	HRESULT *pErrors;
	CWaitCursor wait;
    // also test sync read since data is returned differently
    OPCSyncIO opcSyncIO;
    if( opcSyncIO.Attach( m_pServerView->opcGroup ) == S_OK )
    {
		OPCITEMSTATE* pItemState;
        HRESULT hr = opcSyncIO.Read(OPC_DS_DEVICE, 1, &pCurrentItem->hServerHandle, &pItemState, &pErrors);
        if( SUCCEEDED(hr) )
        {
            if( FAILED(pErrors[0]) )
				MessageBox("Sync Read is error!");
            else
            {
               pCurrentItem->quality = pItemState->wQuality;
               pCurrentItem->value = pItemState->vDataValue;
            }
            VariantClear( &pItemState->vDataValue );
            CoTaskMemFree( pItemState );
            CoTaskMemFree( pErrors );
         }
        else//FAILED(hr)
			MessageBox("Failed(hr),Sync Read.");
    }

   // Use AsyncIO2 here
   if( m_pServerView->usingCP )
   {
      OPCAsyncIO2 opcAsyncIO2;
      if( opcAsyncIO2.Attach( m_pServerView->opcGroup ) == S_OK )
      {
         transactionID = 3;
         HRESULT hr = opcAsyncIO2.Read(1, &pCurrentItem->hServerHandle, transactionID, &transactionID, &pErrors);
         if( SUCCEEDED(hr) )
         {
            if( FAILED(pErrors[0]) )
               MessageBox(_T("Async Read: "));
            CoTaskMemFree( pErrors );
         }
         else
            MessageBox( _T("Async Read: "));
      }
   }//end of "if (usingCP)...
   else
   {
      OPCAsyncIO opcAsyncIO;
      if( opcAsyncIO.Attach( m_pServerView->opcGroup ) == S_OK )
      {
         HRESULT hr = opcAsyncIO.Read(m_pServerView->dwConnection1, OPC_DS_CACHE, 1, &pCurrentItem->hServerHandle, &transactionID, &pErrors);
         if( SUCCEEDED(hr) )
         {
            if( FAILED(pErrors[0]) )
               MessageBox( _T("Async Read: "));
            CoTaskMemFree( pErrors );
         }
         else
            MessageBox(_T("Async Read: "));
      }
   }//end of "else...
   //重新顯示新的數據
   OnUpdate(NULL,0,NULL);
}

//是否允許讀值
void CValueMsgView::OnUpdateReadValue(CCmdUI* pCmdUI) 
{
   pCmdUI->Enable( m_pServerView->opcServer.IsOk() && pCurrentItem );
}


//**************************************************************************
// An asynchronous data change callback triggers this message to
// update the values in the display
//
LONG CValueMsgView::OnOPCDataChange(UINT wParam,LONG lParam)
{
   OnUpdate(NULL, 32, NULL);

   return 0L;
}


//**************************************************************************
// An asynchronous write complete callback triggers this message
// if there is a message to display
//
LONG CValueMsgView::OnOPCWriteError(UINT wParam,LONG lParam)
{
   MessageBox( _T("OPC Write錯誤信息:ASync Write error. "));

   return 0L;
}

//**************************************************************************
// An asynchronous shutdown callback triggers this message
//
LONG CValueMsgView::OnOPCShutdown(UINT wParam,LONG lParam)
{
	m_pServerView->DisconnectOPCServer(TRUE);
	CString msg;
	msg.Format(_T("Server shutting down."));
	CString appName((LPCSTR)AFX_IDS_APP_TITLE);
	MessageBox(msg, appName, MB_OK);

	return 0L;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级电影在线观看| 成人av综合在线| 欧美日本在线一区| 亚洲视频一二区| 丰满少妇久久久久久久| 欧美精品一区二区久久久| 亚洲成va人在线观看| 一本一道综合狠狠老| 国产精品成人在线观看| 国产成人精品影院| 国产亚洲精品精华液| 美女任你摸久久| 欧美综合久久久| 五月激情丁香一区二区三区| 欧美性猛交xxxx黑人交| 亚洲电影一区二区| 欧美成人女星排名| 成人av在线资源网| 亚洲摸摸操操av| 欧美电影影音先锋| 九九九精品视频| 欧美国产日本韩| 成人av在线一区二区三区| 一区二区在线电影| 3d动漫精品啪啪1区2区免费| 九九久久精品视频| 18成人在线观看| 欧美特级限制片免费在线观看| 国产欧美日韩另类一区| 国产a级毛片一区| 偷窥国产亚洲免费视频| 欧美高清在线一区二区| 色狠狠一区二区| 精品一区二区三区免费视频| 亚洲人妖av一区二区| 欧美一级日韩不卡播放免费| 国产精品一区二区久激情瑜伽| 亚洲精品欧美在线| 精品国产露脸精彩对白| 日本道在线观看一区二区| 狠狠色狠狠色综合日日91app| 国产精品高清亚洲| 欧美精品久久久久久久多人混战 | 国产精品久久久久久久久图文区 | 轻轻草成人在线| 日韩美女视频一区| 国产婷婷精品av在线| 678五月天丁香亚洲综合网| 99久久综合99久久综合网站| 免费看欧美女人艹b| 亚洲最新在线观看| 国产精品不卡一区| 2020日本不卡一区二区视频| 91精品福利在线| 成人av网在线| 国产黄色精品网站| 免费精品视频最新在线| 亚洲婷婷综合色高清在线| 精品对白一区国产伦| 7777精品伊人久久久大香线蕉超级流畅| aaa欧美日韩| 91视视频在线观看入口直接观看www| 成人黄色软件下载| yourporn久久国产精品| 99久精品国产| 99久久99久久久精品齐齐| 成人av免费网站| 精品国产髙清在线看国产毛片 | 中文字幕在线一区免费| 亚洲人成网站精品片在线观看| 国产精品天美传媒沈樵| 尤物av一区二区| 五月婷婷久久丁香| 免费视频一区二区| 国产在线播放一区二区三区| 国产成人av影院| 成人国产免费视频| 欧美在线制服丝袜| 欧美日韩一级二级三级| 91精品欧美综合在线观看最新 | 国产成人亚洲综合a∨猫咪| a4yy欧美一区二区三区| 777久久久精品| 国产午夜亚洲精品理论片色戒| 国产精品免费视频网站| 亚洲精品乱码久久久久久久久| 午夜精品在线看| 日韩av电影免费观看高清完整版在线观看| 免费观看在线色综合| 成人毛片在线观看| 欧美色精品在线视频| 精品久久久久久久一区二区蜜臀| 国产欧美精品在线观看| 性久久久久久久| 国产91精品欧美| 777a∨成人精品桃花网| 国产精品久久久久久久久晋中 | 欧美日韩高清一区二区三区| 久久久国产综合精品女国产盗摄| 亚洲欧美日韩电影| 丰满放荡岳乱妇91ww| 日韩欧美国产午夜精品| 亚洲综合色视频| 不卡一二三区首页| 国产日产欧美一区| 蜜臀av性久久久久蜜臀aⅴ流畅| 在线视频欧美精品| 综合欧美一区二区三区| 国内精品国产成人国产三级粉色 | av一区二区三区四区| 欧美aaaaaa午夜精品| 色伊人久久综合中文字幕| 久久久91精品国产一区二区三区| 日本成人在线一区| 制服丝袜亚洲色图| 爽好久久久欧美精品| 欧美日韩你懂的| 亚洲高清在线视频| 在线精品视频免费观看| 亚洲一区av在线| 欧美视频精品在线| 亚洲影院在线观看| 欧美日韩一卡二卡| 亚洲综合激情网| 欧美精品精品一区| 国产精品对白交换视频| 99久久精品费精品国产一区二区| 亚洲国产精品黑人久久久| 懂色av噜噜一区二区三区av| 国产精品乱子久久久久| 日本va欧美va精品发布| 91精品国产综合久久精品图片 | 日本一区二区高清| 97超碰欧美中文字幕| 亚洲香蕉伊在人在线观| 欧美videos中文字幕| 韩国理伦片一区二区三区在线播放| 欧美mv日韩mv国产网站| 风间由美一区二区av101| 亚洲少妇30p| 91精品国产综合久久蜜臀| 国产一区欧美二区| 一区二区三区四区在线免费观看| 欧美色爱综合网| 九九精品视频在线看| 最新中文字幕一区二区三区 | 国产精品久久三区| 欧美日韩不卡一区| 国产精品77777| 亚洲国产精品久久人人爱| 精品理论电影在线观看| 成人av午夜影院| 美腿丝袜在线亚洲一区 | 韩日精品视频一区| 亚洲香肠在线观看| 亚洲成人av一区| 久久综合丝袜日本网| 日本韩国视频一区二区| 国模娜娜一区二区三区| 亚洲综合免费观看高清完整版| 久久久精品2019中文字幕之3| 欧美日韩另类国产亚洲欧美一级| 国产成人精品免费看| 看电影不卡的网站| 亚洲国产日韩综合久久精品| 国产女人18水真多18精品一级做| 欧美一区二区三区影视| 欧美中文字幕一二三区视频| 顶级嫩模精品视频在线看| 九色|91porny| 久久精品久久99精品久久| 日韩精品一级二级 | 99久久精品国产一区| 国产凹凸在线观看一区二区| 久久爱www久久做| 精品一区二区三区免费播放| 日韩国产精品大片| 亚洲成精国产精品女| 中文字幕中文乱码欧美一区二区| 美日韩一区二区三区| 欧美精品v国产精品v日韩精品| 国产91高潮流白浆在线麻豆| 韩国一区二区视频| 国产精品一区二区不卡| 国产一区在线不卡| 成人综合激情网| 成人高清免费在线播放| 99久久久国产精品| 欧美最猛黑人xxxxx猛交| 在线中文字幕一区| 欧美日韩国产123区| 欧美成人一区二区三区片免费| 欧美va亚洲va香蕉在线| 国产女主播一区| 亚洲美女屁股眼交| 午夜精品爽啪视频| 国产乱妇无码大片在线观看| 国产成a人无v码亚洲福利| 在线一区二区三区| 日韩丝袜美女视频|