📄 additemdlg.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 + -