📄 validateitemdlg.cpp
字号:
/////////////////////////////////////////////////////////////////////////////
//
// OPC DataAccess VC++ Client: ValidateItemDlg.cpp
// (Source File)
//
/////////////////////////////////////////////////////////////////////////////
//
// Author: Raphael Imhof
// Initial Date: 2/24/99
// $Workfile: ValidateItemDlg.cpp $
// $Revision: 1 $
// $Date: 7/27/99 5:23p $
// Target System: Microsoft Windows NT 4.0
// Environment: Visual C++ 5.0 / OPC DataAccess 1.0/2.0
// Remarks:
//
/////////////////////////////////////////////////////////////////////////////
//
// Description: implementation of the CValidateItemDlg class.
// Item Validation dialog.
//
//
/////////////////////////////////////////////////////////////////////////////
//
// History of Changes (Please remove very old comments and blank lines!)
// $Log: /IDK/OPCServer/clients/VC++/InfoServerExplorer/ValidateItemDlg.cpp $
//
// 1 7/27/99 5:23p Imhof
//
// 1 7/27/99 5:19p Imhof
//
// 3 2/24/99 2:02p Imhof
// Added ValidateItem option and support
//
// 2 2/24/99 11:34a Imhof
// Creation.
//
// $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 "global.h"
#include "infoserverexplorer.h"
#include "ValidateItemDlg.h"
#include "opcerror.h"
#include "IOPCItemMgt.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CValidateItemDlg dialog
CValidateItemDlg::CValidateItemDlg(CGroup* pGroup, CWnd* pParent /*=NULL*/)
: CDialog(CValidateItemDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CValidateItemDlg)
m_sTag = _T("");
m_sNativeDataType = _T("");
m_sResult = _T("");
m_sAccessRights = _T("");
//}}AFX_DATA_INIT
m_pGroup = pGroup;
}
void CValidateItemDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CValidateItemDlg)
DDX_Control(pDX, IDC_ITEM_TYPE, m_cbRequestedDataType);
DDX_Text(pDX, IDC_ITEM_TAG, m_sTag);
DDX_Text(pDX, IDC_NATIVE_DATA_TYPE, m_sNativeDataType);
DDX_Text(pDX, IDC_VALIDATE_RESULTS, m_sResult);
DDX_Text(pDX, IDC_ACCESS_RIGHTS, m_sAccessRights);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CValidateItemDlg, CDialog)
//{{AFX_MSG_MAP(CValidateItemDlg)
ON_BN_CLICKED(IDC_VALIDATE, OnValidate)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CValidateItemDlg message handlers
void CValidateItemDlg::OnValidate()
{
UpdateData(TRUE);
USES_CONVERSION;
HRESULT res;
CIOPCItemMgt opcItemMgt(m_pGroup->GetInterface());
OPCITEMDEF ItemArray[1];
OPCITEMRESULT* pValidationResults;
HRESULT *pErrorValidate;
ItemArray[0].szItemID = A2OLE(m_sTag);
ItemArray[0].szAccessPath = A2OLE("");
ItemArray[0].bActive = FALSE;
ItemArray[0].hClient = NULL; //item doesn't exist yet in the group, possibly only in the cache
ItemArray[0].dwBlobSize = 0;
ItemArray[0].pBlob = NULL;
/*
if VT_EMPTY: ValidateItem returns native type
otherwise it checks if requested data type is possible
*/
ItemArray[0].vtRequestedDataType = DataTypeSelectionToVartype(m_cbRequestedDataType.GetCurSel());
m_sNativeDataType = _T("Undefined");
m_sResult = _T("Undefined");
m_sAccessRights = _T("Undefined");
res = opcItemMgt.ValidateItems(1, ItemArray, FALSE , &pValidationResults, &pErrorValidate);
if(SUCCEEDED(res))
{
if(SUCCEEDED(pErrorValidate[0]))
{
//result
m_sResult = _T("Item found OK.");
//access rights
switch(pValidationResults[0].dwAccessRights)
{
case OPC_READABLE: m_sAccessRights = _T("Read"); break; //read only
case OPC_WRITEABLE: m_sAccessRights = _T("Write"); break; //write
case OPC_WRITEABLE|OPC_READABLE: m_sAccessRights = _T("Read-Write"); break; //readwrite
}
//data type
if(!VartypeToDataTypeString(pValidationResults[0].vtCanonicalDataType, m_sNativeDataType))
{
m_sNativeDataType = _T("Undefined");
}
}
else if(pErrorValidate[0] == OPC_E_BADTYPE)
{
//result
m_sResult = _T("Item found OK.");
//access rights
switch(pValidationResults[0].dwAccessRights)
{
case OPC_READABLE: m_sAccessRights = _T("Read"); break; //read only
case OPC_WRITEABLE: m_sAccessRights = _T("Write"); break; //write
case OPC_WRITEABLE|OPC_READABLE: m_sAccessRights = _T("Read-Write"); break; //readwrite
}
m_sNativeDataType = _T("Requested data type is unsupported.");
}
else
{
//result
m_sResult = _T("Item not found.");
((CInfoServerExplorerApp*)AfxGetApp())->DisplayText(_T("CIOPCItemMgt::ValidateItems()"), pErrorValidate[0]);
}
((CInfoServerExplorerApp*)AfxGetApp())->DisplayText(_T("CIOPCItemMgt::ValidateItems() was successful."));
CoTaskMemFree(pErrorValidate);
CoTaskMemFree(pValidationResults);
}
else
{
((CInfoServerExplorerApp*)AfxGetApp())->DisplayText(_T("CIOPCItemMgt::ValidateItems()"), res);
}
UpdateData(FALSE);
}
BOOL CValidateItemDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_cbRequestedDataType.SetCurSel(VartypeToDataTypeSelection(VT_EMPTY));
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -