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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? serverenumgroupsdlg.cpp

?? OPC客戶端源代碼
?? CPP
字號:
// **************************************************************************
// serverenumgroupsdlg.cpp
//
// Description:
//	Implements a dialog class for group enumerations.
//
// DISCLAIMER:
//	This programming example is provided "AS IS".  As such Kepware, Inc.
//	makes no claims to the worthiness of the code and does not warranty
//	the code to be error free.  It is provided freely and can be used in
//	your own projects.  If you do find this code useful, place a little
//	marketing plug for Kepware in your code.  While we would love to help
//	every one who is trying to write a great OPC client application, the 
//	uniqueness of every project and the limited number of hours in a day 
//	simply prevents us from doing so.  If you really find yourself in a
//	bind, please contact Kepware's technical support.  We will not be able
//	to assist you with server related problems unless you are using KepServer
//	or KepServerEx.
// **************************************************************************


#include "stdafx.h"
#include "opctestclient.h"
#include "serverenumgroupsdlg.h"

// Enumerate by scope defines, correspond to the scope combo-box list index:
#define SCOPE_PRIVATE	0
#define SCOPE_PUBLIC	1
#define SCOPE_ALL		2

// Enumerate by interface defines, correspond to the interface combo-box list
// index:
#define ITF_OBJECT		0
#define ITF_NAME		1


/////////////////////////////////////////////////////////////////////////////
// CKServerEnumerateGroupsDlg dialog
/////////////////////////////////////////////////////////////////////////////

// **************************************************************************
BEGIN_MESSAGE_MAP (CKServerEnumerateGroupsDlg, CDialog)
	//{{AFX_MSG_MAP(CKServerEnumerateGroupsDlg)
	ON_CBN_SELCHANGE (IDC_GROUPENUM_INTERFACE, OnChange)
	ON_BN_CLICKED (IDC_APPLY, OnApply)
	ON_CBN_SELCHANGE (IDC_GROUPENUM_SCOPE, OnChange)
	ON_NOTIFY (LVN_ITEMCHANGED, IDC_LIST, OnSelectItem)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP ()


// **************************************************************************
// CKServerEnumerateGroupsDlg ()
//
// Description:
//	Constructor.
//
// Parameters:
//  IOPCServer	*pIServer	Pointer to IOPCServer interface.
//	CWnd		*pParent	Pointer to parent window.
//
// Returns:
//  none
// **************************************************************************
CKServerEnumerateGroupsDlg::CKServerEnumerateGroupsDlg (IOPCServer *pIServer, CWnd *pParent /*=NULL*/)
	: CDialog (CKServerEnumerateGroupsDlg::IDD, pParent)
	{
	// Initialize member variables:
	ASSERT (pIServer != NULL);
	m_pIServer = pIServer;
	m_pEnumList = NULL;

	//{{AFX_DATA_INIT(CKServerEnumerateGroupsDlg)
	m_bActive = FALSE;
	m_nInterface = ITF_NAME;
	m_nScope = SCOPE_ALL;
	m_dwLanguageID = 0;
	m_strName = _T("");
	m_dwUpdateRate = 0;
	m_fDeadband = 0.0f;
	m_lBias = 0;
	//}}AFX_DATA_INIT
	}

// **************************************************************************
// DoDataExchange ()
//
// Description:
//	This method is called by the framework to exchange and validate dialog data.
//
// Parameters:
//  CDataExchange	*pDX	A pointer to a CDataExchange object.
//
// Returns:
//  void
// **************************************************************************
void CKServerEnumerateGroupsDlg::DoDataExchange (CDataExchange *pDX)
	{
	// Perform default processing:
	CDialog::DoDataExchange (pDX);

	// Exchange date between controls and associated member variables:
	//{{AFX_DATA_MAP(CKServerEnumerateGroupsDlg)
	DDX_Check (pDX, IDC_ACTIVE, m_bActive);
	DDX_CBIndex (pDX, IDC_GROUPENUM_INTERFACE, m_nInterface);
	DDX_CBIndex (pDX, IDC_GROUPENUM_SCOPE, m_nScope);
	DDX_Text (pDX, IDC_LANGUAGEID, m_dwLanguageID);
	DDX_Text (pDX, IDC_NAME, m_strName);
	DDX_Text (pDX, IDC_UPDATERATE, m_dwUpdateRate);
	DDX_Text (pDX, IDC_PERCENTDEADBAND, m_fDeadband);
	DDX_Text (pDX, IDC_TIMEBIAS, m_lBias);
	//}}AFX_DATA_MAP
	}

/////////////////////////////////////////////////////////////////////////////
// CKServerEnumerateGroupsDlg message handlers
/////////////////////////////////////////////////////////////////////////////

// **************************************************************************
// OnInitDialog ()
//
// Description:
//	Called immediately before the dialog box is displayed.  Use opportunity
//	to initialize controls.
//
// Parameters:
//  none
//
// Returns:
//	BOOL - TRUE.
// **************************************************************************
BOOL CKServerEnumerateGroupsDlg::OnInitDialog () 
	{
	// Perform deafult processing:
	CDialog::OnInitDialog ();
	
	// Get pointer to our list control:
	m_pEnumList = (CListCtrl *) GetDlgItem (IDC_LIST);
	ASSERT (m_pEnumList != NULL);

	// Insert a blank column for our list control:
	CRect rc;
	m_pEnumList->GetClientRect (&rc);
	m_pEnumList->InsertColumn (0, _T(""), LVCFMT_LEFT, rc.Width ());	

	// Apply enumeration with default settings:
	OnApply ();

	// return TRUE unless you set the focus to a control
	// EXCEPTION: OCX Property Pages should return FALSE	
	return (TRUE);  
	}

// **************************************************************************
// OnChange ()
//
// Description:
//	Default event handler for control change notifications.	
// 
// Parameters:
//  none
//
// Returns:
//  void
// **************************************************************************
void CKServerEnumerateGroupsDlg::OnChange () 
	{
	// Enable the apply button:
	((CButton *) GetDlgItem (IDC_APPLY))->EnableWindow (TRUE);
	}

// **************************************************************************
// OnApply ()
//
// Description:
//	Apply button event handler.
//
// Parameters:
//  none
//
// Returns:
//  void
// **************************************************************************
void CKServerEnumerateGroupsDlg::OnApply () 
	{
	// Force an update data:
	UpdateData (true);

	// Enumerate the groups:
	EnumerateGroups ();

	// Disable the apply button:
	((CButton *) GetDlgItem (IDC_APPLY))->EnableWindow (FALSE);
	}

// **************************************************************************
// OnSelectItem ()
//
// Description:
//	Handles notification that a new item from list control has been selected.
//
// Parameters:
//  NMHDR		*pNMHDR			Contains information about a notification message.
//	LRESULT		*pResult		A 32-bit value returned from a window procedure 
//								  or callback function.
//
// Returns:
//  void
// **************************************************************************
void CKServerEnumerateGroupsDlg::OnSelectItem (NMHDR *pNMHDR, LRESULT *pResult) 
	{
	NM_LISTVIEW* pnmlv= (NM_LISTVIEW*)pNMHDR;
	
	// Wait for selection change then call UpdateState() to update all
	// controls:
	if (pnmlv->uNewState)
		UpdateState (m_pEnumList->GetItemText (pnmlv->iItem, pnmlv->iSubItem));
		
	*pResult = 0;
	}	


/////////////////////////////////////////////////////////////////////////////
// CKServerEnumerateGroupsDlg helpers
/////////////////////////////////////////////////////////////////////////////

// **************************************************************************
// EnumerateGroups ()
//
// Description:
//	Performs the actual group enumeration.
//
// Parameters:
//  none
//
// Returns:
//  void
// **************************************************************************
void CKServerEnumerateGroupsDlg::EnumerateGroups ()
	{
	HRESULT hr = E_FAIL;
	OPCENUMSCOPE eScope;
	TCHAR szBuffer [DEFBUFFSIZE];
	
	// Delete any items that are currently displayed:
	m_pEnumList->DeleteAllItems ();

	// Also re-initialize selected group properties to empty:
	m_bActive = FALSE;
	m_dwLanguageID = 0;
	m_strName = _T("");
	m_dwUpdateRate = 0;
	m_fDeadband = 0.0f;
	m_lBias = 0;

	// Update controls:
	UpdateData (false);
	
	// Convert scope combo-box index to true scope:
	switch (m_nScope)
		{
		case SCOPE_PRIVATE:
			eScope = OPC_ENUM_PRIVATE;
			break;

		case SCOPE_PUBLIC:
			eScope = OPC_ENUM_PUBLIC;
			break;

		case SCOPE_ALL:
			eScope = OPC_ENUM_ALL;
			break;

		default:
			break;
		}

	// If enumerate by object:
	if (m_nInterface == ITF_OBJECT)
		{
		// Ask server to create group enumerator interface:
		IEnumUnknown *pEnum = NULL;
		hr = m_pIServer->CreateGroupEnumerator (
			eScope,	IID_IEnumUnknown, (IUnknown**)&pEnum);

		// Process results if succeed:
		if (SUCCEEDED (hr) && pEnum != NULL)
			{
			IUnknown *pIUnknown;
			ULONG uFetched;
			IOPCGroupStateMgt *pIGroupStateMgt = NULL;
			
			// Loop over enumerated groups (call enemerator's next member to
			// reference next group and return its IUnknown interface):
			while ((hr = pEnum->Next (1, &pIUnknown, &uFetched)) == S_OK)
				{
				// Get group state management interface of current group:
				hr = pIUnknown->QueryInterface (IID_IOPCGroupStateMgt, (void**)&pIGroupStateMgt);

				if (SUCCEEDED (hr))
					{
					// Declare some variable needed to get the group name
					// from the server:
					OPCHANDLE hClient;
					OPCHANDLE hServer;
					WCHAR *pszName;

					// Get group state (we are only interested in the group name):
					hr = pIGroupStateMgt->GetState (
						&m_dwUpdateRate,
						&m_bActive,
						&pszName, 
						&m_lBias,
						&m_fDeadband,
						&m_dwLanguageID,
						&hClient,
						&hServer);

					// If succeed, process results:
					if (SUCCEEDED (hr))
						{
						// COM will return group name in UNICODE format.  Will have
						// to convert to ANSI format if ANSI build.  Copy result
						// to buffer:
#ifdef _UNICODE
						lstrcpyn (szBuffer, pszName, sizeof (szBuffer) / sizeof (TCHAR));
#else
						_wcstombsz (szBuffer, pszName, sizeof (szBuffer) / sizeof (TCHAR));
#endif

						// COM requires us to free memory allocated by server
						// for name string:
						if (pszName)
							CoTaskMemFree (pszName);

						// Insert group name into the list control:
						m_pEnumList->InsertItem (m_pEnumList->GetItemCount (), szBuffer);
						}

					// Release group state management interface:
					pIGroupStateMgt->Release ();
					}

				// Release the enumerated unknown interface:
				pIUnknown->Release ();
				}

			// Now release our enumerator:
			pEnum->Release ();
			}
		}

	// Else enumerate by name (generally faster):
	else
		{
		// Ask server to create group enumerator:
		ASSERT (m_nInterface == ITF_NAME);

		IEnumString *pEnum = NULL;
		hr = m_pIServer->CreateGroupEnumerator (
			eScope,	IID_IEnumString, (IUnknown**)&pEnum);

		// Process results if succeed:
		if (SUCCEEDED (hr) && pEnum != NULL)
			{
			LPOLESTR pString;
			ULONG uFetched;

			// Loop over enumerated groups (call enemerator's next member to
			// reference next group and return its name string):
			while ((hr = pEnum->Next (1, &pString, &uFetched)) == S_OK)
				{
				// COM will return group name in UNICODE format.  Will have
				// to convert to ANSI format if ANSI build.  Copy result
				// to buffer:
#ifdef _UNICODE
				lstrcpyn (szBuffer, pString, sizeof (szBuffer) / sizeof (TCHAR));
#else
				_wcstombsz (szBuffer, pString, sizeof (szBuffer) / sizeof (TCHAR));
#endif

				// Insert group name into the list control:
				m_pEnumList->InsertItem (m_pEnumList->GetItemCount (), szBuffer);

				// Free enumerator allocations:
				if (pString)
					CoTaskMemFree (pString);
				}

			// Now release our enumerator:
			pEnum->Release ();
			}
		}

	// Select the first item in the list:
	m_pEnumList->SetItemState (0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);

	// Force the list control to scroll if necessary to show 
	// selected item:
	m_pEnumList->EnsureVisible (0, TRUE);
	}

// **************************************************************************
// UpdateState ()
//
// Description:
//	Get state of OPC group and update controls accordingly.
//
// Parameters:
//  CString		&strName	Name of OPC Group.
//
// Returns:
//  void
// **************************************************************************
void CKServerEnumerateGroupsDlg::UpdateState (CString &strName) 
	{
	WCHAR *pszName;
	IOPCGroupStateMgt *pIGroupStateMgt;
	HRESULT hr = E_FAIL;

	// Allocate memory for name string:
	pszName = (WCHAR *) CoTaskMemAlloc ((strName.GetLength () + 1) * sizeof (WCHAR));

	// Copy name string into allocated memory.  COM requires all strings to 
	// be in UNICODE format.  Convert if this is an ANSI build:
#ifdef _UNICODE
	lstrcpyn (pszName, strName, strName.GetLength () + 1);
#else
	_mbstowcsz (pszName, strName, strName.GetLength () + 1);
#endif

	// Get group by name:
	hr = m_pIServer->GetGroupByName (
		pszName, IID_IOPCGroupStateMgt, (IUnknown**)&pIGroupStateMgt);

	// We are done with memory allocated for name string, so free it:
	CoTaskMemFree (pszName);

	// If request was successful, process results:
	if (SUCCEEDED (hr))
		{
		// Declare variables neede to get group state:
		OPCHANDLE hClient;
		OPCHANDLE hServer;

		// Get group state:
		hr = pIGroupStateMgt->GetState (
			&m_dwUpdateRate,
			&m_bActive,
			&pszName, 
			&m_lBias,
			&m_fDeadband,
			&m_dwLanguageID,
			&hClient,
			&hServer);

		// If succeeded, process results:
		if (SUCCEEDED (hr))
			{
			// Update group name:
			m_strName = strName;

			// Free memory server allocated for name string:
			if (pszName)
				CoTaskMemFree (pszName);
			}

		// Release our get group by name reference:
		pIGroupStateMgt->Release ();
		}

	// Update dilaog controls:
	UpdateData (false);
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品欧美一级免费| 久久品道一品道久久精品| 精品系列免费在线观看| 日韩美女视频一区二区 | 日本伊人午夜精品| 国产精品美女久久久久久久久 | 欧美一级久久久| 91色.com| 国产露脸91国语对白| 亚洲妇女屁股眼交7| 欧美国产成人精品| 日韩女优制服丝袜电影| 欧美亚洲国产一区二区三区va | 成人18视频在线播放| 蜜桃视频第一区免费观看| 亚洲精品综合在线| 欧美激情一二三区| 久久久久久日产精品| 欧美一级久久久久久久大片| 欧美视频三区在线播放| 北条麻妃一区二区三区| 国模少妇一区二区三区| 免播放器亚洲一区| 无码av免费一区二区三区试看| 中文字幕一区二区三区在线播放 | 日韩一区二区中文字幕| 欧美色综合网站| 色婷婷综合五月| 99re这里只有精品6| 国产成人免费视频| 粉嫩绯色av一区二区在线观看| 另类小说欧美激情| 久久国产精品99久久人人澡| 免费一区二区视频| 日韩不卡一区二区| 日日摸夜夜添夜夜添亚洲女人| 亚洲一线二线三线视频| 亚洲精品久久嫩草网站秘色| 1000精品久久久久久久久| 中文欧美字幕免费| 夜夜亚洲天天久久| 亚洲精品中文字幕乱码三区| 亚洲欧美偷拍另类a∨色屁股| 国产精品福利一区二区| 一区在线中文字幕| 亚洲免费电影在线| 亚洲最新在线观看| 亚洲一区二区精品久久av| 亚洲小说欧美激情另类| 午夜精品久久久久久久久久久| 亚洲成av人影院| 美女尤物国产一区| 国产精品一卡二卡| av中文字幕在线不卡| 91网站在线播放| 欧美日韩久久一区二区| 日韩一区二区三区四区| 久久久久国产精品麻豆ai换脸 | 亚洲色图色小说| 亚洲免费在线观看视频| 视频在线观看一区二区三区| 麻豆国产欧美一区二区三区| 国产一区二区三区黄视频 | 欧美高清激情brazzers| 日韩欧美亚洲另类制服综合在线| www久久精品| 国产精品短视频| 亚洲成人高清在线| 精品亚洲成av人在线观看| 成人黄色免费短视频| 91久久一区二区| 日韩精品最新网址| 中文字幕欧美日韩一区| 一级女性全黄久久生活片免费| 日韩成人午夜电影| 成人午夜精品一区二区三区| 欧洲国内综合视频| 精品国产一区久久| 亚洲男人的天堂网| 久久精品国产第一区二区三区| 国产成人精品综合在线观看| 在线观看欧美精品| 久久久久久久久久久久电影| 亚洲欧美福利一区二区| 麻豆精品视频在线观看| 99久久er热在这里只有精品15| 欧美高清dvd| 中文字幕一区二区三区在线观看| 日韩高清一区在线| 成人丝袜18视频在线观看| 欧美乱妇15p| 中文字幕一区二区三区蜜月| 毛片基地黄久久久久久天堂| 91美女片黄在线观看| 精品日韩欧美在线| 一二三区精品福利视频| 国产成人综合视频| 91精品国产综合久久香蕉麻豆| 亚洲mv在线观看| 国产成人精品亚洲日本在线桃色| 欧美伦理影视网| 亚洲你懂的在线视频| 国产在线精品免费av| 欧美精品一卡二卡| 亚洲日本va午夜在线影院| 国产精品一二三四| 777亚洲妇女| 亚洲精选视频免费看| 懂色av一区二区三区免费观看| 8x福利精品第一导航| 一区二区在线看| 成人黄色av网站在线| 精品成人a区在线观看| 午夜欧美视频在线观看| 91色.com| 亚洲视频免费在线观看| 国产成人综合亚洲91猫咪| 欧美r级在线观看| 日本欧美韩国一区三区| 欧美撒尿777hd撒尿| 亚洲另类一区二区| av成人免费在线观看| 久久精品视频一区二区| 久久99国内精品| 欧美一区二区三区日韩| 午夜精品爽啪视频| 欧美在线视频日韩| 亚洲男人电影天堂| 91免费国产在线观看| 国产精品成人免费在线| 国产高清精品在线| 国产日韩一级二级三级| 国产高清成人在线| 欧美激情一区二区三区不卡| 高清不卡一区二区| 国产精品网站导航| 成人av网站免费观看| 亚洲国产高清在线| av不卡在线播放| 亚洲裸体在线观看| 91福利视频网站| 亚洲午夜电影在线观看| 欧美久久久久久久久| 日韩成人一区二区| 欧美成人一区二区| 国产电影一区二区三区| 欧美韩国日本不卡| 91一区二区在线观看| 亚洲视频1区2区| 欧美综合天天夜夜久久| 亚洲aⅴ怡春院| 日韩女优制服丝袜电影| 国产寡妇亲子伦一区二区| 国产精品福利电影一区二区三区四区| 成人午夜视频福利| 一区二区三区欧美| 中文字幕不卡在线观看| 99精品国产99久久久久久白柏| 一区二区三区小说| 欧美丰满少妇xxxxx高潮对白 | 91日韩在线专区| 午夜影院久久久| 精品国产在天天线2019| 成人国产在线观看| 亚洲影院理伦片| 精品不卡在线视频| 99麻豆久久久国产精品免费| 一区二区欧美视频| 日韩一区二区在线免费观看| 国产成人精品网址| 亚洲综合色在线| 欧美成人vr18sexvr| 成人av电影在线网| 日韩精品一二三| 国产丝袜在线精品| 欧美亚洲日本国产| 国产在线观看免费一区| 亚洲男人天堂一区| 精品久久久久久亚洲综合网| 不卡av电影在线播放| 五月天久久比比资源色| 久久久高清一区二区三区| 色88888久久久久久影院野外 | www.欧美日韩国产在线| 亚洲国产精品人人做人人爽| 久久精品亚洲精品国产欧美| 日本福利一区二区| 精品一区二区国语对白| 亚洲美腿欧美偷拍| 久久久久国产精品麻豆ai换脸| 欧美天堂一区二区三区| 国产成人av一区| 美女高潮久久久| 亚洲国产成人高清精品| 国产欧美一区二区在线观看| 91精品国产一区二区三区蜜臀| 成人免费va视频| 韩国v欧美v亚洲v日本v| 婷婷夜色潮精品综合在线| 国产精品九色蝌蚪自拍|