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

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

?? additemdlg.cpp

?? 一個OPC客戶端監視程序
?? 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.SetItemData( item, 0 );
                m_tree.InsertItem( _T("Dummy"), item );
                CoTaskMemFree( pName[1] );
            
         }
         while( hr == S_OK );
         pEnumString->Release();
      }
      m_tree.SelectItem( Root );
      m_tree.Expand( Root, TVE_EXPAND );
   }
   else  // namespace must be flat, only display in one listbox
   {
      m_tree.ShowWindow( FALSE );
      m_tags.ShowWindow( FALSE );
      m_flat.ShowWindow( TRUE );
      UpdateFlat();
   }

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

/////////////////////////////////////////////////////////////////////////////
// AddItemDlg message handlers

void AddItemDlg::OnNative()
{
   m_vt = VT_EMPTY;
   if( nameSpaceType == OPC_NS_HIERARCHIAL )
      OnSelchangedTree( NULL, NULL );
   else
      UpdateFlat();
}

void AddItemDlg::OnBool()
{
   m_vt = VT_BOOL;
   if( nameSpaceType == OPC_NS_HIERARCHIAL )
      OnSelchangedTree( NULL, NULL );
   else
      UpdateFlat();
}

void AddItemDlg::OnShort()
{
   m_vt = VT_I2;
   if( nameSpaceType == OPC_NS_HIERARCHIAL )
      OnSelchangedTree( NULL, NULL );
   else
      UpdateFlat();
}

void AddItemDlg::OnLong()
{
   m_vt = VT_I4;
   if( nameSpaceType == OPC_NS_HIERARCHIAL )
      OnSelchangedTree( NULL, NULL );
   else
      UpdateFlat();
}

void AddItemDlg::OnDouble()
{
   m_vt = VT_R8;
   if( nameSpaceType == OPC_NS_HIERARCHIAL )
      OnSelchangedTree( NULL, NULL );
   else
      UpdateFlat();
}

void AddItemDlg::OnString()
{
   m_vt = VT_BSTR;
   if( nameSpaceType == OPC_NS_HIERARCHIAL )
      OnSelchangedTree( NULL, NULL );
   else
      UpdateFlat();
}

//**************************************************************************
// When the user selects a tag, put its name in the ItemID field
void AddItemDlg::OnSelchangeTags()
{
USES_CONVERSION;
   if( !browse.IsOk() )
      return;

   CWaitCursor wait;
   HTREEITEM item = m_tree.GetSelectedItem( );
   HRESULT hr = BrowseHere( item );    // move browse position here

   m_itemID.Empty();
   GetDlgItem(ID_OPC_ITEMPARAMETERS)->EnableWindow(FALSE);
   int nSel;
   if ((nSel = m_tags.GetCurSel()) != LB_ERR)
   {
      m_tags.GetText(nSel,m_itemID);
   }
   else
      return;

   // Ask the server for the itemID
   LPWSTR pName = NULL;
   hr = browse.GetItemID( T2OLE(m_itemID.GetBuffer(0)), &pName );
   if( SUCCEEDED(hr) )
   {
      m_itemID = pName;
      CoTaskMemFree( pName );
      GetDlgItem(ID_OPC_ITEMPARAMETERS)->EnableWindow(TRUE);
   }

   UpdateData( FALSE );

   // return browse position to root
   hr = S_OK;
   for( int i=0; i<10 && SUCCEEDED(hr); i++ )
      hr = browse.ChangeBrowsePosition( OPC_BROWSE_UP, empty );
}

//**************************************************************************
// When the user selects a branch, fill the list of tags
void AddItemDlg::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)
{
USES_CONVERSION;
   if( !browse.IsOk() )
      return;

   CWaitCursor wait;
   HTREEITEM item = m_tree.GetSelectedItem( );
   HRESULT hr = BrowseHere( item );    // move browse position here
   if( SUCCEEDED(hr) )
   {
      // get the tags
      m_tags.ResetContent();
      IEnumString* pEnumString = NULL;
      hr = browse.BrowseOPCItemIDs(OPC_LEAF,
                                   T2OLE(m_filter.GetBuffer(0)),
                                   m_vt,
                                   0,  // no filtering (or OPC_READABLE|OPC_WRITEABLE)
                                   &pEnumString);
      if( hr == S_OK )
      {
         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)
            for( ULONG index=0; index<count; index++ )
            {
               CString name( pName[index] );
               m_tags.AddString( name );
               CoTaskMemFree( pName[index] );
            }
         }
         while( hr == S_OK );
         pEnumString->Release();
      }
   }
   hr = S_OK;
   for( int i=0; i<10 && SUCCEEDED(hr); i++ )
      hr = browse.ChangeBrowsePosition( OPC_BROWSE_UP, empty );

   if( pResult )
      *pResult = 0;
}

//**************************************************************************
// Recursive function that moves the browse position to this tree item
HRESULT AddItemDlg::BrowseHere( HTREEITEM item )
{
USES_CONVERSION;
   if( !browse.IsOk() )
      return E_FAIL;

   HRESULT hr = S_OK;
   if( item != NULL )
   {
      HTREEITEM parent = m_tree.GetParentItem( item );
      hr = BrowseHere( parent );
      if( SUCCEEDED( hr ) )
      {
         CString node( m_tree.GetItemText( item ) );
         if( node != _T("Root") )
         {
            hr = browse.ChangeBrowsePosition( OPC_BROWSE_DOWN, T2OLE(node.GetBuffer(0)) );
         }
      }
   }
   return hr;
}

//**************************************************************************
void AddItemDlg::OnSelchangeFlat()
{
USES_CONVERSION;
   if( !browse.IsOk() )
      return;

   CWaitCursor wait;
   m_itemID.Empty();
   GetDlgItem(ID_OPC_ITEMPARAMETERS)->EnableWindow(FALSE);
   int nSel = m_flat.GetCurSel();
   if ( nSel != LB_ERR )
   {
      m_flat.GetText(nSel,m_itemID);
   }
   else
      return;

   // Ask the server for the itemID
   LPWSTR pName = NULL;
   HRESULT hr = browse.GetItemID( T2OLE(m_itemID.GetBuffer(0)), &pName );
   if( SUCCEEDED(hr) )
   {
      m_itemID = pName;
      CoTaskMemFree( pName );
   GetDlgItem(ID_OPC_ITEMPARAMETERS)->EnableWindow(TRUE);
   }

   UpdateData( FALSE );
}

//**************************************************************************
void AddItemDlg::UpdateFlat()
{
USES_CONVERSION;
   if( !browse.IsOk() )
      return;

   CWaitCursor wait;
   // get the tags
   m_flat.ResetContent();
   IEnumString* pEnumString = NULL;
   HRESULT hr = browse.BrowseOPCItemIDs(OPC_FLAT,
                                      T2OLE(m_filter.GetBuffer(0)),
                                      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)
         for( ULONG index=0; index<count; index++ )
         {
            CString name( pName[index] );
            m_flat.AddString( name );
            CoTaskMemFree( pName[index] );
         }
      }
      while( hr == S_OK );
      pEnumString->Release();
   }
   m_flat.SetCurSel( 0 );
}

//**************************************************************************
void AddItemDlg::OnAdditem()
{
   CWaitCursor wait;
   UpdateData();
   if( m_pView )
   {
      m_pView->AddItem( m_itemID, m_accessPath, m_vt );
   }
}

//**************************************************************************
void AddItemDlg::OnItemexpandingTree(NMHDR* pNMHDR, LRESULT* pResult)
{
USES_CONVERSION;
   if( !browse.IsOk() )
      return;

   CWaitCursor wait;
   NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
   HTREEITEM start = pNMTreeView->itemNew.hItem;
   DWORD expanded = m_tree.GetItemData( start );
   if( !expanded )
   {
      m_tree.SetItemData( start, 1 );  // mark this item expanded
      // remove existing children
      HTREEITEM hItem = m_tree.GetNextItem (start, TVGN_CHILD);
      while (hItem)
      {
         m_tree.DeleteItem( hItem );
         hItem = m_tree.GetNextItem(start, TVGN_CHILD);
      }
      // browse new children
      HRESULT hr = BrowseHere( start );    // move browse position here
      if( SUCCEEDED(hr) )
      {
         IEnumString* pEnumString = NULL;
         hr = browse.BrowseOPCItemIDs( OPC_BRANCH,
                                       L"*",
                                       VT_EMPTY,
                                       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)
               for( ULONG index=0; index<count; index++ )
               {
                   CString name( pName[index] );
                   HTREEITEM item = m_tree.InsertItem( name, start );
                   m_tree.SetItemData( item, 0 );
                   m_tree.InsertItem( _T("Dummy"), item );
                   CoTaskMemFree( pName[index] );
               }
            }
            while( hr == S_OK );
            pEnumString->Release();
         }
      }
      // return browse position to root
      hr = S_OK;
      for( int i=0; i<10 && SUCCEEDED(hr); i++ )
         hr = browse.ChangeBrowsePosition( OPC_BROWSE_UP, empty );
   }
   *pResult = 0;
}

void AddItemDlg::OnNewFilter()
{
   UpdateData( );
   if( nameSpaceType == OPC_NS_HIERARCHIAL )
      OnSelchangedTree( NULL, NULL );
   else
      UpdateFlat();
}

void AddItemDlg::OnDblclkTags()
{
    OnAdditem();
}

void AddItemDlg::OnDblclkFlat()
{
    OnAdditem();
}

void AddItemDlg::OnOpcItemparameters()
{
   UpdateData();
   if( m_itemID.IsEmpty() )
      return;
   CItemPropertiesDlg dlg(m_itemID);
   dlg.SetOPCPointer( (IUnknown*)((m_pView->m_pServerView)->opcServer) );
   dlg.DoModal();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产福利精品导航| 亚洲丝袜另类动漫二区| 色婷婷综合久久久久中文| 午夜天堂影视香蕉久久| 精品福利av导航| 在线不卡a资源高清| 欧美日韩国产精品成人| 91福利资源站| 一本大道久久a久久综合婷婷| 亚洲一区二区欧美| 国产欧美一区二区三区鸳鸯浴 | 99久久国产免费看| 国产美女娇喘av呻吟久久| 麻豆国产欧美日韩综合精品二区| 亚洲黄色录像片| 一区二区三区在线视频免费观看| 亚洲视频一区二区在线观看| 亚洲成年人影院| 日本欧美韩国一区三区| 韩国精品主播一区二区在线观看| 蜜桃av一区二区三区| 国产一区二区三区四区五区入口| 精品亚洲欧美一区| 懂色av一区二区三区免费观看| 丁香一区二区三区| 欧美午夜精品久久久| 91国偷自产一区二区开放时间 | 91精品一区二区三区久久久久久 | 日本一区二区成人在线| 一区二区理论电影在线观看| 日本视频一区二区| 成人福利视频网站| 欧美电影影音先锋| 7777精品久久久大香线蕉| 亚洲成a人片综合在线| 日本一区中文字幕| 成人av网在线| 久久久久国产精品厨房| 久久久亚洲精华液精华液精华液| 亚洲美女视频一区| 男男成人高潮片免费网站| 成人a区在线观看| 欧美日韩大陆一区二区| 国产精品久久久久久久久免费相片| 污片在线观看一区二区| 97久久精品人人澡人人爽| 欧美videofree性高清杂交| 亚洲一区二区三区四区不卡| av欧美精品.com| 日韩一区二区精品葵司在线| 亚洲麻豆国产自偷在线| 美女爽到高潮91| 欧美一二三区在线观看| 亚洲地区一二三色| 欧美日本在线观看| 亚洲成人综合网站| 7777精品伊人久久久大香线蕉超级流畅 | 国产精品视频第一区| 亚洲午夜精品在线| av在线播放一区二区三区| 欧美激情一区二区三区蜜桃视频| 黄色精品一二区| 久久无码av三级| 国产一区二区三区最好精华液| 欧美成人高清电影在线| 久久国产欧美日韩精品| 国产午夜精品福利| 成人污污视频在线观看| 17c精品麻豆一区二区免费| 色综合视频一区二区三区高清| 亚洲一区精品在线| 日韩精品一区二区三区中文不卡| 乱中年女人伦av一区二区| 欧美日韩一区二区在线观看| 六月丁香婷婷久久| 国产精品免费视频观看| 国产91高潮流白浆在线麻豆| 夜夜亚洲天天久久| 欧美成人艳星乳罩| 欧美性受极品xxxx喷水| 狠狠色2019综合网| 一区二区三区在线视频播放| 日本道精品一区二区三区| 免费在线看一区| 中文字幕一区二区三区在线不卡| 欧美日韩电影在线播放| 高清国产午夜精品久久久久久| 一区二区三区国产精华| 亚洲欧洲日韩综合一区二区| 精品国产髙清在线看国产毛片| 97久久精品人人做人人爽50路| 免费看欧美女人艹b| 精品久久久久久久久久久久久久久久久| 国产成人精品午夜视频免费 | 日韩激情视频在线观看| 国产精品久久久久精k8| 综合精品久久久| 亚洲国产中文字幕| 日韩高清中文字幕一区| 精品亚洲欧美一区| 成人白浆超碰人人人人| 欧美性大战久久久久久久| 欧美一区在线视频| 久久久久久久久蜜桃| 亚洲视频一二三| 免费观看在线综合色| 成人美女视频在线看| 欧美羞羞免费网站| 国产亚洲成av人在线观看导航| 国产精品久久久久aaaa樱花| 亚洲午夜久久久久久久久久久| 免费成人在线观看视频| 韩国女主播一区二区三区| 91色porny蝌蚪| 日韩一区二区三区av| 成人欧美一区二区三区小说| 日韩国产精品久久| 91在线小视频| 精品91自产拍在线观看一区| 一区二区在线观看免费视频播放| 国产一本一道久久香蕉| 制服丝袜亚洲色图| 亚洲乱码精品一二三四区日韩在线| 久久精品国产**网站演员| 欧美在线一二三四区| 亚洲国产精品v| 久久99热99| 欧美电视剧在线观看完整版| 亚洲韩国精品一区| 欧美三级欧美一级| 天天做天天摸天天爽国产一区| 99国内精品久久| 国产精品入口麻豆原神| 成人一区二区视频| 国产三级欧美三级日产三级99| 视频一区免费在线观看| 欧美群妇大交群的观看方式| 亚洲最快最全在线视频| 91精品一区二区三区久久久久久| 一区二区在线观看视频在线观看| 色偷偷久久人人79超碰人人澡| 亚洲精品成人天堂一二三| 91小宝寻花一区二区三区| 亚洲视频一二三区| 欧美视频精品在线| 老鸭窝一区二区久久精品| 亚洲国产精品高清| 欧美性色黄大片手机版| 视频一区二区中文字幕| 国产女人18水真多18精品一级做| www.日韩av| 久久国产精品一区二区| 中文字幕中文在线不卡住| 欧美精品在线视频| 国产精品亚洲专一区二区三区| 亚洲欧洲精品天堂一级| 欧美一区二区日韩一区二区| 成人综合在线视频| 亚洲综合久久久| 国产欧美精品一区二区三区四区 | 亚洲国产精品人人做人人爽| 精品久久久久久久久久久院品网 | 视频一区中文字幕| 亚洲同性同志一二三专区| 2023国产精品| 精品国产一区二区精华| 91福利在线免费观看| 国产一区二区三区国产| 日韩av一级片| 免费不卡在线视频| 亚洲高清久久久| 亚洲一二三区视频在线观看| 国产精品国产精品国产专区不蜜 | 韩国女主播成人在线观看| 视频一区免费在线观看| 亚洲国产精品自拍| 亚洲丶国产丶欧美一区二区三区| 亚洲日本丝袜连裤袜办公室| 国产精品人人做人人爽人人添 | 国产成人8x视频一区二区| 黄色资源网久久资源365| 日韩高清不卡在线| 久久超碰97中文字幕| 国产曰批免费观看久久久| 久久99国产精品免费网站| 久久99热这里只有精品| 国产揄拍国内精品对白| 国产福利一区在线观看| 91啪亚洲精品| 69精品人人人人| 久久众筹精品私拍模特| 国产三级精品在线| 亚洲精品视频在线看| 日日摸夜夜添夜夜添亚洲女人| 青草av.久久免费一区| 国产在线精品一区二区不卡了| 国产精品1区2区| 精品视频在线免费| 久久久精品2019中文字幕之3| 亚洲三级在线免费|