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

📄 additemdlg.cpp

📁 此文件为VC++开发环境下的OPC client trend 源代码
💻 CPP
字号:
/////////////////////////////////////////////////////////////////////////////
//
//  OPC Trend VC++ Client:	AddItemDlg.CPP
//							(Source File)
//
/////////////////////////////////////////////////////////////////////////////
//
//          Author: Raphael Imhof
//    Initial Date: 11/04/98
//       $Workfile: AddItemDlg.cpp $
//       $Revision: 1 $
//           $Date: 7/27/99 5:24p $
//   Target System: Microsoft Windows NT 4.0
//     Environment: Visual C++ 5.0 / OPC DataAccess 1.0 / 2.0
//         Remarks: 
//
/////////////////////////////////////////////////////////////////////////////
//
//     Description: implementation of the CAddItemDlg class.
//					Item Browser dialog.
//					
//
/////////////////////////////////////////////////////////////////////////////
//
//  History of Changes     (Please remove very old comments and blank lines!)
//            $Log: /IDK/OPCServer/clients/VC++/Trend/AddItemDlg.cpp $
// 
// 1     7/27/99 5:24p Imhof
// 
// 1     7/27/99 5:19p Imhof
// 
// 5     1/15/99 7:04p Imhof
// Updated legal notice.
// 
// 4     12/15/98 10:30a Imhof
// Modifications for OPC 2.0
// 
// 3     11/06/98 5:53p Imhof
// Added header, comment and made some small code changes.
// 
// 
//  $Nokeywords:$ (To avoid useless search while checking in.)
/////////////////////////////////////////////////////////////////////////////
//  Copyright (C) 1998, Siemens Building Technologies, Inc. Landis Division
//
// SIEMENS BUILDING TECHNOLOGIES, INC. IS PROVIDING THE FOLLOWING
// EXAMPLES OF CODE AS SAMPLE ONLY.
//
// SIEMENS BUILDING TECHNOLOGIES, INC.  MAKES NO REPRESENTATIONS
// OR WARRANTIES OF ANY KIND  WITH RESPECT TO THE VALIDTY OF THE 
// CODES   OR   DESIRED   RESULTS   AND   DISCLAIMS   ALL   SUCH 
// REPRESENTATIONS   AND   WARRANTIES,  INCLUDING  FOR  EXAMPLE, 
// WARRANTIES  OF  MERCHANTABILITY  AND FITNESS FOR A PARTICULAR 
// PURPOSE.    SIEMENS  BUILIDNG  TECHNOLOGIES,  INC.  DOES  NOT 
// REPRESENT  OR  WARRANT  THAT  THE  FOLLOWING CODE SAMPLES ARE 
// ACCURATE, VALID, COMPLETE OR CURRENT.
//
/////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "AddItemDlg.h"
#include "trend.h"
#include "IOPCBrowseServerAddressSpace.h"
#include "MainFrm.h"

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

/////////////////////////////////////////////////////////////////////////////
// CAddItemDlg dialog


CAddItemDlg::CAddItemDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CAddItemDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CAddItemDlg)
	m_sItemTag = _T("");
	m_sFilterSuffix = _T("*");
	m_sFilterPrefix = _T("");
	m_sStatus = _T("");
	//}}AFX_DATA_INIT

	m_DataType = VT_EMPTY;
}


void CAddItemDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAddItemDlg)
	DDX_Control(pDX, IDC_TAG_LIST_FILTER, m_edFilterSuffix);
	DDX_Control(pDX, IDC_TAG_LIST, m_TagList);
	DDX_Text(pDX, IDC_ADD_ITEM_TAG, m_sItemTag);
	DDX_Text(pDX, IDC_TAG_LIST_FILTER_SUFFIX, m_sFilterSuffix);
	DDX_Text(pDX, IDC_TAG_LIST_FILTER_PREFIX, m_sFilterPrefix);
	DDX_Text(pDX, IDC_ADDDLG_STATUS, m_sStatus);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CAddItemDlg, CDialog)
	//{{AFX_MSG_MAP(CAddItemDlg)
	ON_LBN_SELCHANGE(IDC_TAG_LIST, OnSelchangeTagList)
	ON_EN_KILLFOCUS(IDC_TAG_LIST_FILTER_PREFIX, OnKillfocusTagListFilter)
	ON_LBN_DBLCLK(IDC_TAG_LIST, OnDblclkTagList)
	ON_BN_CLICKED(IDC_FIND, OnFind)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAddItemDlg message handlers

BOOL CAddItemDlg::OnInitDialog() 
{	
	m_sFilterSuffix = _T("_TREND");
	m_sFilterPrefix = _T("*");

	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_edFilterSuffix.EnableWindow(FALSE);

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

void CAddItemDlg::LoadItemTagList()
{
	CWaitCursor wait;

	CTrendApp*						pApp = (CTrendApp*) AfxGetApp();
	CIOPCBrowseServerAddressSpace	browser(pApp->GetInfoServer()->GetInterface());
	CString							sFilter = m_sFilterPrefix + m_sFilterSuffix;

	USES_CONVERSION;
   
	m_sStatus = _T("Loading...");
	GetDlgItem(IDC_ADDDLG_STATUS)->SetWindowText(m_sStatus);
   
	// get the item tags
	m_TagList.ResetContent();
	IEnumString* pEnumString = NULL;
	HRESULT hr = browser.BrowseOPCItemIDs(OPC_LEAF,
                                      T2OLE(sFilter.GetBuffer(0)),
                                      m_DataType,
                                      0,  // no filtering (or OPC_READABLE|OPC_WRITEABLE)
                                      &pEnumString);
	if( SUCCEEDED(hr) )
	{
		const int iBlockSize = 100; //retrieve in 100 blocks
		LPWSTR pName[iBlockSize]; 
		ULONG count = 0;
		do
		{
			hr = pEnumString->Next(iBlockSize, &pName[0], &count);
			// CString does translation from UNICODE to native type
			// (depends on the way the application is built)
			for( ULONG index=0; index<count; index++ )
			{
				CString name( pName[index] );
				m_TagList.AddString( name );
				CoTaskMemFree( pName[index] );
			}
		}
		while( hr == S_OK );
		pEnumString->Release();
	}

	m_TagList.SetCurSel( 0 );

	m_sStatus.Format(_T("%d Tag(s) Retrieved."), m_TagList.GetCount());
	GetDlgItem(IDC_ADDDLG_STATUS)->SetWindowText(m_sStatus);
}

void CAddItemDlg::OnSelchangeTagList() 
{
	// TODO: Add your control notification handler code here
	m_TagList.GetText(m_TagList.GetCurSel(), m_sItemTag);
	UpdateData(FALSE);
	
}

void CAddItemDlg::OnKillfocusTagListFilter() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE); //update msFilter

	LoadItemTagList();
}

void CAddItemDlg::OnDblclkTagList() 
{
	// TODO: Add your control notification handler code here
	OnOK();
}

void CAddItemDlg::OnOK() 
{
	// TODO: Add extra validation here
	UpdateData(TRUE);

	if(m_sItemTag.IsEmpty())
	{
		AfxMessageBox(IDS_CONNECT_NO_ITEM);
		return;
	}

	CDialog::OnOK();
}

void CAddItemDlg::OnFind() 
{
	// TODO: Add your control notification handler code here
	LoadItemTagList();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -