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

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

?? serverpropertysheet.cpp

?? OPC客戶端源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// **************************************************************************
// serverpropertysheet.cpp
//
// Description:
//	Implements a property sheet class and associated property page classes for
//	OPC server properties.
//
// 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 "serverpropertysheet.h"
#include "server.h"

static LPCTSTR lpszDataAccessServers10 = _T("OPC Data Access Servers Version 1.0");
static LPCTSTR lpszDataAccessServers20 = _T("OPC Data Access Servers Version 2.0");
static LPCTSTR lpszOPCServers = _T("OPC General");

static const CATID CATID_OPCDAServer10 = 
{ 0x63d5f430, 0xcfe4, 0x11d1, { 0xb2, 0xc8, 0x0, 0x60, 0x8, 0x3b, 0xa1, 0xfb } };
// {63D5F430-CFE4-11d1-B2C8-0060083BA1FB}

static const CATID CATID_OPCDAServer20 = 
{ 0x63d5f432, 0xcfe4, 0x11d1, { 0xb2, 0xc8, 0x0, 0x60, 0x8, 0x3b, 0xa1, 0xfb } };
// {63D5F432-CFE4-11d1-B2C8-0060083BA1FB}

// image list indices
#define ILI_CATAGORY	0
#define ILI_COMPONENT	1
#define ILI_INTERFACE	2


/////////////////////////////////////////////////////////////////////////////
// CKServerGeneralPage property page
/////////////////////////////////////////////////////////////////////////////

IMPLEMENT_DYNCREATE (CKServerGeneralPage, CPropertyPage)

// **************************************************************************
BEGIN_MESSAGE_MAP (CKServerGeneralPage, CDialog)
	//{{AFX_MSG_MAP(CKServerGeneralPage)
	ON_NOTIFY (TVN_SELCHANGED, IDC_SERVERLIST, OnSelChanged)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP ()


// **************************************************************************
// CKServerGeneralPage ()
//
// Description:
//	Constructor.
//
// Parameters:
//  none
//
// Returns:
//  none
// **************************************************************************
CKServerGeneralPage::CKServerGeneralPage ()
	: CPropertyPage (CKServerGeneralPage::IDD)
	{
	// Initialize member variables:
	m_strProgID = cApp.GetDefConnectProgID ();
	m_strRemoteMachine.Empty ();

	m_pServerList = NULL;
	}

// **************************************************************************
// 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 CKServerGeneralPage::DoDataExchange (CDataExchange *pDX)
	{
	// Perform default processing:
	CDialog::DoDataExchange (pDX);

	// Exchange data between controls and associated member variables:
	//{{AFX_DATA_MAP(CKServerGeneralPage)
	DDX_Text (pDX, IDC_MACHINENAME, m_strRemoteMachine);
	DDV_MaxChars (pDX, m_strRemoteMachine, 256);
	DDX_Text (pDX, IDC_PROGID, m_strProgID);
	DDV_MaxChars (pDX, m_strProgID, 256);
	//}}AFX_DATA_MAP
	}


/////////////////////////////////////////////////////////////////////////////
// CKServerGeneralPage message handlers
/////////////////////////////////////////////////////////////////////////////

// **************************************************************************
// OnInitDialog ()
//
// Description:
//	Called immediately before the dialog box is displayed.  Use opportunity
//	to initialize controls.
//
// Parameters:
//  none
//
// Returns:
//	BOOL - TRUE.
// **************************************************************************
BOOL CKServerGeneralPage::OnInitDialog () 
	{
	// Create a wait cursor object.  This will cause the wait cursor, 
	// usually an hourglass, to be displayed.  When this object goes
	// out of scope, its destructor will restore the previous cursor
	// type.
	CWaitCursor wc;
	CDialog::OnInitDialog ();

	// Initialize the tree control:
	m_pServerList = (CTreeCtrl *) GetDlgItem (IDC_SERVERLIST);
	ASSERT (m_pServerList != NULL);

	// Initialize the image list for the interfaces. The bitmap must use a 
	// purple background color, RGB (255, 0, 255), so that the CImageList
	// object can construct a mask.  The images are 16x16 pixels.  Set the
	// image list background color to CLR_NONE so masked pixels will be
	// transparent. 
	// Image number		Use
	//	0				not used
	//	1				not used
	//	2				Interface
	m_cImageList.Create (IDB_COMPONENTS, 16, 4, RGB (255, 0, 255));
	m_cImageList.SetBkColor (CLR_NONE);
	m_pServerList->SetImageList (&m_cImageList, TVSIL_NORMAL);

	HTREEITEM hParent;

	// Insert data access 1.0 servers:
	hParent = m_pServerList->InsertItem (lpszDataAccessServers10, ILI_CATAGORY, ILI_CATAGORY);
	DisplayComponentCatList (hParent, CATID_OPCDAServer10);

	// Insert data access 2.0 servers:
	hParent = m_pServerList->InsertItem (lpszDataAccessServers20, ILI_CATAGORY, ILI_CATAGORY);
	DisplayComponentCatList (hParent, CATID_OPCDAServer20);

	// Insert general OPC registered servers:
	hParent = m_pServerList->InsertItem (lpszOPCServers, ILI_CATAGORY, ILI_CATAGORY);
	DisplayGeneralOPCServers (hParent);

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

// **************************************************************************
// OnSelChanged ()
//
// Description:
//	Handles notification that a new item in tree 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 CKServerGeneralPage::OnSelChanged (NMHDR *pNMHDR, LRESULT *pResult) 
	{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;

	// see if it was a server selection (i.e, has a parent item)

	// Update page is server was selected (non-NULL parent item):
	if (m_pServerList->GetParentItem (pNMTreeView->itemNew.hItem) != NULL)
		{
		// Transfer selection to ProgID edit control:
		m_strProgID = m_pServerList->GetItemText (pNMTreeView->itemNew.hItem);

		// Update controls:
		UpdateData (FALSE);

		// Make sure selected server is visible:
		m_pServerList->EnsureVisible (pNMTreeView->itemNew.hItem); 
		}

	*pResult = 0;
	}


/////////////////////////////////////////////////////////////////////////////
// CKServerGeneralPage helpers
/////////////////////////////////////////////////////////////////////////////

// **************************************************************************
// DisplayComponentCatList ()
//
// Description:
//	Construct a list of installed 1.0 and 2.0 OPC servers and insert into 
//	tree control.
//
// Parameters:
//  HTREEITEM	hParent		Handle of parent tree control item.
//	CATID		catid		Catagory ID (CATID_OPCDAServer10 or
//							  CATID_OPCDAServer20).
//
// Returns:
//  void
// **************************************************************************
void CKServerGeneralPage::DisplayComponentCatList (HTREEITEM hParent, CATID catid)
	{
	HRESULT hr;
	
	// Make sure COM is initialized:
	hr = CoInitializeEx (NULL, COINIT_MULTITHREADED);

	if (SUCCEEDED (hr))
		{
		ICatInformation *pCat = NULL;

		// Get component category manager:
		hr = CoCreateInstance (CLSID_StdComponentCategoriesMgr, 
			NULL,
			CLSCTX_SERVER, 
			IID_ICatInformation,
			(void **)&pCat);

		// If succeeded, enumerate registered components:
		if (SUCCEEDED (hr))
			{
			IEnumCLSID *pEnum = NULL;

			CATID arrcatid [1];
			arrcatid [0] = catid;

			// Enumerate registered components based on clsid:
			hr = pCat->EnumClassesOfCategories (
				sizeof (arrcatid) / sizeof (CATID),	// number of catids in the array that follows
				arrcatid,							// catid array
				0, 
				NULL,
				&pEnum);							// clsid enumerator for registered components under this category

			// If succeeded, process results:
			if (SUCCEEDED (hr))
				{
				GUID guid;
				ULONG fetched;

				// Loop over enumerated components.  Call enemerator's next
				// member function to reference next component and get its
				// guid:
				while ((hr = pEnum->Next (1, &guid, &fetched)) == S_OK)
					{
					// Get the ProgID from the guid:
					WCHAR *wszProgID;
					hr = ProgIDFromCLSID (guid, &wszProgID);

					// If succeeded, add component to list:
					if (SUCCEEDED (hr))
						{
						// ProgID string will be in UNICODE format.  Convert to 
						// ANSI format if this is and ANSI build.  Insert component
						// into list:
#ifdef _UNICODE
						m_pServerList->InsertItem (wszProgID, ILI_COMPONENT, ILI_COMPONENT, hParent);
#else
						TCHAR szProgID [DEFBUFFSIZE];

						_wcstombsz (szProgID, wszProgID, sizeof (szProgID) / sizeof (TCHAR));
						m_pServerList->InsertItem (szProgID, ILI_COMPONENT, ILI_COMPONENT, hParent);
#endif
						// It is up to us to free the Prog ID string memory:
						CoTaskMemFree (wszProgID);
						}
					}

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

			// release our category mamager
			pCat->Release ();
			}

		// Uninitialize COM:
		CoUninitialize ();
		}
	}

// **************************************************************************
// DisplayGeneralOPCServers ()
//
// Description:
//	Construct a list of installed general OPC servers and insert into tree
//	control.
//
// Parameters:
//  HTREEITEM	hParent		Handle of parent tree control item.
//
// Returns:
//  void
// **************************************************************************
void CKServerGeneralPage::DisplayGeneralOPCServers (HTREEITEM hParent)
	{
	HKEY hKey = HKEY_CLASSES_ROOT;		// search under this key
	TCHAR szKey [DEFBUFFSIZE];			// allocate key buffer
	DWORD dwLength = DEFBUFFSIZE;

	// Search the registry for installed OPC Servers:
	for (DWORD dwIndex = 0; 
		 RegEnumKey (hKey, dwIndex, szKey, dwLength) == ERROR_SUCCESS; 
		 ++dwIndex)
		{
		HKEY hSubKey;

		// Open the registry key:
		if (RegOpenKey (hKey, szKey, &hSubKey) == ERROR_SUCCESS)
			{
			// Search for OPC subkey:
			if (RegQueryValue (hSubKey, _T("OPC"), NULL, NULL) == ERROR_SUCCESS)
				{
				// Display the prog ID for this server:
				m_pServerList->InsertItem (szKey, ILI_COMPONENT, ILI_COMPONENT, hParent);
				}

			// Close the registry key:
			RegCloseKey (hSubKey);
			}

		// Re-initialize length:
		dwLength = DEFBUFFSIZE;
		}
	}


/////////////////////////////////////////////////////////////////////////////
// CKServerStatusPage property page
/////////////////////////////////////////////////////////////////////////////

IMPLEMENT_DYNCREATE (CKServerStatusPage, CPropertyPage)

// **************************************************************************
BEGIN_MESSAGE_MAP (CKServerStatusPage, CPropertyPage)
	//{{AFX_MSG_MAP(CKServerStatusPage)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP ()


// **************************************************************************
// CKServerStatusPage ()
//
// Description:
//	Constructor.
//
// Parameters:
//  none
//
// Returns:
//  none
// **************************************************************************
CKServerStatusPage::CKServerStatusPage () : CPropertyPage (CKServerStatusPage::IDD)
	{
	// Initialize member variables:

	//{{AFX_DATA_INIT(CKServerStatusPage)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	
	m_pServer = NULL;
	}

// **************************************************************************
// ~CKServerStatusPage ()
//
// Description:
//	Destructor.
//
// Parameters:
//  none
//
// Returns:
//  none
// **************************************************************************
CKServerStatusPage::~CKServerStatusPage ()
	{
	}

// **************************************************************************
// 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 CKServerStatusPage::DoDataExchange (CDataExchange *pDX)
	{
	// Perform default processing:
	CPropertyPage::DoDataExchange (pDX);

	// Exchange data between controls and associated member variables:
	//{{AFX_DATA_MAP(CKServerStatusPage)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
	}


/////////////////////////////////////////////////////////////////////////////
// CKServerStatusPage message handlers
/////////////////////////////////////////////////////////////////////////////

// **************************************************************************
// OnInitDialog ()
//
// Description:
//	Called immediately before the dialog box is displayed.  Use opportunity
//	to initialize controls.
//
// Parameters:
//  none
//
// Returns:
//	BOOL - TRUE.
// **************************************************************************
BOOL CKServerStatusPage::OnInitDialog () 
	{
	IOPCServer *pIServer = NULL;
	OPCSERVERSTATUS *pServerStatus;
	CString strLoader;
	CString strStatus;
	CString strTemp;

	// Perform default processing:
	CPropertyPage::OnInitDialog ();

	// Get IServer interface:
	ASSERT (m_pServer != NULL);
	pIServer = m_pServer->GetIServer ();

	// Add server name to status string:
	strLoader.FormatMessage (IDS_PROGID, m_pServer->GetProgID ());
	strStatus += strLoader;

	// Add remote machine (if applicable) to status string:
	if (m_pServer->GetRemoteMachine ())
		{
		strLoader.FormatMessage (IDS_REMOTEMACHINE, m_pServer->GetRemoteMachine ());
		strStatus += strLoader;
		}

	// Get the server status:
	if (pIServer && SUCCEEDED (pIServer->GetStatus (&pServerStatus)) && pServerStatus)
		{
		FILETIME ftLocal;
		TCHAR szBuffer [DEFBUFFSIZE];

		// Add vendor name to status string:
		if (pServerStatus->szVendorInfo)
			{
			// Convert venter name from UNICODE if needed:
#ifdef _UNICODE
			lstrcpyn (szBuffer, pServerStatus->szVendorInfo, sizeof (szBuffer) / sizeof (TCHAR));
#else
			_wcstombsz (szBuffer, pServerStatus->szVendorInfo, sizeof (szBuffer) / sizeof (TCHAR));
#endif
			// Add vender name:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜久久久久久久久电影院 | 亚洲图片你懂的| 精品国产99国产精品| 精品国产1区二区| 久久先锋影音av鲁色资源网| 精品国产乱码久久久久久久| 精品国产免费一区二区三区四区| 久久综合网色—综合色88| 精品美女在线观看| 欧美国产精品专区| 亚洲已满18点击进入久久| 日韩精品免费专区| 丁香六月综合激情| 欧美日韩高清影院| 国产欧美精品一区| 亚洲国产精品一区二区久久 | 日韩欧美国产三级电影视频| 国产亚洲成aⅴ人片在线观看 | 欧美精品在线一区二区三区| www欧美成人18+| 亚洲国产成人av网| 成人激情电影免费在线观看| 91精品国产综合久久精品app| 久久久.com| 亚洲黄色性网站| av动漫一区二区| 精品国产乱子伦一区| 亚洲高清中文字幕| 色婷婷久久久亚洲一区二区三区| 久久影音资源网| 久久99蜜桃精品| 777色狠狠一区二区三区| 国产农村妇女毛片精品久久麻豆| 免费观看成人av| 日韩欧美的一区| 免费视频最近日韩| 欧美一激情一区二区三区| 亚洲国产精品一区二区久久 | 国产精品三级在线观看| 日本不卡在线视频| 日韩视频一区二区三区| 蜜臀va亚洲va欧美va天堂 | 久久奇米777| 中文字幕欧美日本乱码一线二线| 欧美三区免费完整视频在线观看| 久久亚洲精品国产精品紫薇| 日本不卡一二三| 极品少妇xxxx偷拍精品少妇| 国产精品一区二区三区网站| 成人一级视频在线观看| 2023国产精华国产精品| 中文字幕av资源一区| 欧美—级在线免费片| 中文字幕日韩av资源站| 蜜臀av在线播放一区二区三区| 婷婷国产在线综合| 极品少妇xxxx偷拍精品少妇| 性做久久久久久免费观看| 日韩欧美另类在线| 国产日产欧产精品推荐色| 亚洲超丰满肉感bbw| 欧美三级视频在线播放| 亚洲午夜久久久久久久久电影院| 欧美日免费三级在线| 亚洲午夜成aⅴ人片| 国产精品一区二区在线播放| 久久综合久久综合亚洲| 久久99精品国产麻豆婷婷| 中文字幕高清不卡| 91精品中文字幕一区二区三区 | 91精品国产91久久久久久一区二区 | 91麻豆国产精品久久| 一区二区三区在线免费播放| 欧美α欧美αv大片| 欧美亚日韩国产aⅴ精品中极品| 国产a久久麻豆| 亚洲一级电影视频| 精品欧美一区二区久久| 欧美精品在线观看一区二区| 国产精品一区免费视频| 久久99热这里只有精品| 午夜精品久久久久久久久久久 | 91在线视频播放| 成人高清免费观看| 99综合电影在线视频| 成人成人成人在线视频| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 欧美日韩不卡在线| 欧美日本在线观看| 91精品久久久久久久久99蜜臂| 欧美三级日韩在线| 日韩免费观看高清完整版| 精品少妇一区二区三区免费观看| 欧美一卡二卡在线| 久久精品夜夜夜夜久久| 亚洲蜜桃精久久久久久久| 亚洲福利视频一区二区| 精品一区二区综合| 91精品国产综合久久久久久久久久| 欧美剧在线免费观看网站 | 国产91富婆露脸刺激对白| 成人久久视频在线观看| 欧美调教femdomvk| 国产亚洲欧美色| 亚洲一区二区三区四区在线免费观看| 亚洲一区二区三区小说| 国产精品影视在线| 欧美日韩成人综合在线一区二区 | 另类小说综合欧美亚洲| 97久久人人超碰| 精品国产乱码久久久久久浪潮| 欧美国产精品v| 久久99最新地址| 欧美剧在线免费观看网站| 一色屋精品亚洲香蕉网站| 国产在线精品一区在线观看麻豆| 不卡一二三区首页| 久久久91精品国产一区二区精品 | 视频一区二区中文字幕| www.99精品| 中文字幕中文字幕在线一区| 极品少妇xxxx偷拍精品少妇| 欧美喷潮久久久xxxxx| 一区二区三区四区国产精品| 成人一区在线观看| 久久精品一级爱片| 国产成a人亚洲精| 国产精品天美传媒| 成人不卡免费av| 一色屋精品亚洲香蕉网站| av在线这里只有精品| 综合激情成人伊人| 色综合视频在线观看| 亚洲高清免费观看 | 激情深爱一区二区| 26uuu久久综合| 丁香一区二区三区| 国产精品国产三级国产三级人妇| 大美女一区二区三区| 日韩毛片精品高清免费| 欧美色综合网站| 久久激情五月激情| 中文天堂在线一区| 色天天综合色天天久久| 五月天一区二区| 精品sm捆绑视频| 色婷婷激情综合| 国产在线日韩欧美| 亚洲福利电影网| 国产欧美日韩亚州综合 | 久久99热狠狠色一区二区| 欧美国产欧美亚州国产日韩mv天天看完整| 成人免费毛片a| 日本强好片久久久久久aaa| 欧美激情艳妇裸体舞| 69堂成人精品免费视频| 高清日韩电视剧大全免费| 亚洲小说欧美激情另类| 中文一区一区三区高中清不卡| 欧美无人高清视频在线观看| 成人国产精品免费观看视频| 日本不卡在线视频| 亚洲高清在线视频| 中文字幕欧美三区| 久久久久88色偷偷免费| 亚洲精品一区二区三区四区高清| 91高清在线观看| 一本大道av一区二区在线播放| 丁香五精品蜜臀久久久久99网站| 日韩av电影一区| 日韩**一区毛片| 免费人成黄页网站在线一区二区| 日韩理论片网站| 亚洲色图视频网站| 中文字幕一区在线观看| 自拍视频在线观看一区二区| 中文字幕一区二区三区不卡| 中文字幕不卡在线观看| 综合色天天鬼久久鬼色| 亚洲天堂成人在线观看| 亚洲一二三区视频在线观看| 亚洲愉拍自拍另类高清精品| 夜夜夜精品看看| 免费观看久久久4p| 国产精品18久久久久久久久久久久 | 青青草成人在线观看| 国产制服丝袜一区| 972aa.com艺术欧美| 欧美日韩综合一区| 久久综合久久99| 亚洲蜜臀av乱码久久精品| 婷婷开心久久网| 懂色av一区二区在线播放| 91免费版在线看| 精品日本一线二线三线不卡| 中文字幕第一区二区| 免费三级欧美电影| 色欧美乱欧美15图片| 精品久久久久香蕉网| 亚洲国产精品尤物yw在线观看|