【VC开源代码栏目提醒】:网学会员为需要VC开源代码的朋友们搜集整理了AddItemDlg.cpp相关资料,希望对各位网友有所帮助!
/**************************************************************************
Description: Dialog to add an item. The OPC Browse interface is used
to display the server's items.
To support browsing on demand, the tree keeps a flag
in each item's data which is true if the branch has
been expanded. A dummy is inserted below each item
so the expand button will be displayed.
**************************************************************************/
#include "stdafx.h"
#include "OPCClientSpy.h"
#include "AddItemDlg.h"
#include "ItemPropertiesDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
LPCWSTR empty = {L""};
CONST ULONG NEXT_COUNT = 100; // number of elements to request when calling
// enumerator::Next()
/////////////////////////////////////////////////////////////////////////////
// AddItemDlg dialog
AddItemDlg::AddItemDlg(CValueMsgView* parent, IOPCServer* pServer, CWnd* pParent /*=NULL*/)
: CDialog(AddItemDlg::IDD, pParent), m_pView( parent )
{
browse.Attach( pServer ); // Get a Browse interface
m_vt = VT_EMPTY;
nameSpaceType = OPC_NS_HIERARCHIAL;
//{{AFX_DATA_INIT(AddItemDlg)
m_filter = _T("*");
m_accessPath = _T("");
m_itemID = _T("");
//}}AFX_DATA_INIT
}
void AddItemDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(AddItemDlg)
DDX_Control(pDX, IDC_FLAT, m_flat);
DDX_Control(pDX, IDC_TAGS, m_tags);
DDX_Control(pDX, IDC_TREE, m_tree);
DDX_Text(pDX, IDC_FILTER, m_filter);
DDX_Text(pDX, IDC_ACCESS_PATH, m_accessPath);
DDX_Text(pDX, IDC_ITEMID, m_itemID);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(AddItemDlg, CDialog)
//{{AFX_MSG_MAP(AddItemDlg)
ON_BN_CLICKED(IDC_NATIVE, OnNative)
ON_BN_CLICKED(IDC_BOOL, OnBool)
ON_BN_CLICKED(IDC_SHORT, OnShort)
ON_BN_CLICKED(IDC_LONG, OnLong)
ON_BN_CLICKED(IDC_DOUBLE, OnDouble)
ON_BN_CLICKED(IDC_STRING, OnString)
ON_LBN_SELCHANGE(IDC_TAGS, OnSelchangeTags)
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE, OnSelchangedTree)
ON_LBN_SELCHANGE(IDC_FLAT, OnSelchangeFlat)
ON_BN_CLICKED(ID_ADDITEM, OnAdditem)
ON_NOTIFY(TVN_ITEMEXPANDING, IDC_TREE, OnItemexpandingTree)
ON_EN_KILLFOCUS(IDC_FILTER, OnNewFilter)
ON_LBN_DBLCLK(IDC_TAGS, OnDblclkTags)
ON_LBN_DBLCLK(IDC_FLAT, OnDblclkFlat)
ON_BN_CLICKED(ID_OPC_ITEMPARAMETERS, OnOpcItemparameters)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//**************************************************************************
BOOL AddItemDlg::OnInitDialog()
{
USES_CONVERSION;
CWaitCursor wait;
CDialog::OnInitDialog();
GetDlgItem(ID_OPC_ITEMPARAMETERS)->EnableWindow(FALSE);
CheckRadioButton( IDC_NATIVE, IDC_STRING, IDC_NATIVE );
// Fill the tree with the server's hierarchy
if( !browse.IsOk() )
{
m_tree.ShowWindow( FALSE );
m_tags.ShowWindow( FALSE );
m_flat.ShowWindow( TRUE );
m_flat.AddString( _T("Browsing not supported") );
return TRUE;
}
HRESULT hr = browse.QueryOrganization(&nameSpaceType);
if( FAILED(hr) )
{
browse.Detach();
return TRUE;
}
if( nameSpaceType == OPC_NS_HIERARCHIAL ) // show a tree
{
HTREEITEM Root = m_tree.InsertItem( _T("Root") );
m_tree.SetItemData( Root, 1 );
IEnumString* pEnumString = NULL;
hr = browse.BrowseOPCItemIDs(OPC_FLAT,
L"*",
m_vt,
0, // no filtering (or OPC_READABLE|OPC_WRITEABLE)
&pEnumString);
if( SUCCEEDED(hr) )
{
LPWSTR pName[NEXT_COUNT];
ULONG count = 0;
do
{
hr = pEnumString->Next(NEXT_COUNT, &pName[0], &count);
// CString does translation from UNICODE to native type
// (depends on the way the application is built)
CString name( pName[1] );
HTREEITEM item = m_tree.InsertItem( name, Root );
m_tree.SetIte