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

📄 contentview.cpp

📁 此为Insight opc client InfoServerExplorer源程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			default:
				sValue = _T("?");
		}

		if( ((*item)->GetQuality() & OPC_QUALITY_MASK) != OPC_QUALITY_GOOD )
		{
			if( ((*item)->GetQuality() & OPC_QUALITY_MASK) == OPC_QUALITY_UNCERTAIN )
				sValue += _T(" (uncertain)");
			else if( ((*item)->GetQuality() & OPC_QUALITY_MASK) == OPC_QUALITY_BAD )
				sValue = _T("Bad");
		}

		list.SetItem(index,COLUMN_VALUE,LVIF_TEXT,(LPTSTR)(LPCTSTR)sValue,0,0,0,0);

		FILETIME timeStamp = (*item)->GetTimeStamp();
		if( timeStamp.dwHighDateTime != 0 )
		{
			CTime time(timeStamp);
			list.SetItem(index,COLUMN_TIME,LVIF_TEXT, time.Format(_T("%c")),0,0,0,0);
		}
	}
}

void CContentView::AddItem(CListCtrl& list, CItem** item, int index)
{
	LV_ITEM lv_item;
	lv_item.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
	lv_item.iSubItem = COLUMN_NAME;
	lv_item.iImage = 0;
	lv_item.iItem = index;
	lv_item.pszText = (LPTSTR)(LPCTSTR)(*item)->GetName();
	lv_item.lParam = (LPARAM)*item;
	int iPos = list.InsertItem(&lv_item);

	CString sValue;

	/*
	if the item was not in the content view after a COV it
	still could have the changed attribute set. We reset it now.
	It is safe to do it now and not earlier after the DeleteAllItems().
	*/

	if((*item)->IsChanged()) (*item)->SetChanged(FALSE);

	if((*item)->GetValue().vt != (*item)->GetDataType())
		TRACE(_T("item datatype inconsistency !\n"));

	switch((*item)->GetValue().vt)
	{
		case VT_BOOL:
			// COM BOOL: -1(TRUE) or 0 (FALSE)
			sValue.Format( _T("%i"), -1 * (*item)->GetValue().boolVal );
			break;
		case VT_I2:
			sValue.Format( _T("%hd"), (*item)->GetValue().iVal );
			break;
		case VT_I4:
			sValue.Format( _T("%d"), (*item)->GetValue().lVal );
			break;
		case VT_R4:
			sValue.Format( _T("%f"), (*item)->GetValue().fltVal );			
			break;
		case VT_R8:
			sValue.Format( _T("%g"), (*item)->GetValue().dblVal );
			break;
		case VT_BSTR:
			sValue = (*item)->GetValue().bstrVal;
			break;
		default:
			sValue = _T("?");
	}

	if( ((*item)->GetQuality() & OPC_QUALITY_MASK) != OPC_QUALITY_GOOD )
	{
		if( ((*item)->GetQuality() & OPC_QUALITY_MASK) == OPC_QUALITY_UNCERTAIN )
			sValue += _T(" (uncertain)");
		else if( ((*item)->GetQuality() & OPC_QUALITY_MASK) == OPC_QUALITY_BAD )
			sValue = _T("Bad");
	}

	list.SetItem(iPos,COLUMN_VALUE,LVIF_TEXT,(LPTSTR)(LPCTSTR)sValue,0,0,0,0);

	FILETIME timeStamp = (*item)->GetTimeStamp();
	if( timeStamp.dwHighDateTime != 0 )
	{
		CTime time(timeStamp);
		list.SetItem(iPos,COLUMN_TIME,LVIF_TEXT, time.Format(_T("%c")),0,0,0,0);
	}
}

void CContentView::OnContextMenu(CWnd* pWnd, CPoint point) 
{
	// TODO: Add your message handler code here
	UINT		flags;
	int			iPos = -1;
	CPoint		test_point = point;
	CMenu		menu;
	CListCtrl&	list = GetListCtrl();

	CWnd::ScreenToClient(&test_point);

	try
	{
		iPos = list.HitTest(test_point,&flags);
		if((iPos != -1)) 				//popup only available if any item
		{													//is selectable 
			//list.SelectItem(iPos);

				
			VERIFY(menu.LoadMenu(IDR_CONTENT_POPUP));			

			CMenu* pPopup = menu.GetSubMenu(0);
			ASSERT(pPopup != NULL);	

			pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd());

			menu.DestroyMenu();

			//popup workaround: tree.SetItemState(hTarget, 0, TVIS_DROPHILITED);
		}
		else
		{
			CListView::OnContextMenu(pWnd, point);
		}
	}
	catch(...)
	{
	}
	
}

void CContentView::OnOpcCommanditem() 
{
	// TODO: Add your command handler code here
	CCommandItemDlg	dlg;
	int				iPos = -1;
	int				nSelectedItems;
	CListCtrl&		list = GetListCtrl();
	CItem*			pItem = NULL;
	CGroup*			pGroup = NULL;
	int				i = 0;

	nSelectedItems = list.GetSelectedCount();

	if(IDOK == dlg.DoModal())
	{
		CWaitCursor wait;
		
		OPCHANDLE*		phServer = new OPCHANDLE[nSelectedItems];
		CComVariant*	pItemValues = new CComVariant[nSelectedItems];
		
		//fill in the server handles
		while(i < nSelectedItems)
		{
			iPos = list.GetNextItem(iPos, LVNI_SELECTED);
			if(iPos != -1)
			{
				pItem = (CItem*) list.GetItemData(iPos);
				if(pItem != NULL)
				{
					phServer[i] = pItem->GetHandle();
					CComVariant	command_value(dlg.m_sCommandValue);
					command_value.ChangeType(pItem->GetDataType(), NULL);
					pItemValues[i] = command_value;
				}
				i++;
			}
		}

		if(pItem != NULL) pGroup = pItem->GetGroup();
		if(pGroup != NULL)
		{
			if(0 == dlg.m_iCommand) //sync
			{
				pGroup->CommandItemsSync(nSelectedItems, phServer, pItemValues);
			}
			else if(1 == dlg.m_iCommand) //async
			{
				pGroup->CommandItemsAsync(nSelectedItems, phServer, pItemValues);
			}
		}
		delete[] phServer;
		delete[] pItemValues;

	}
}

void CContentView::OnUpdateOpcCommanditem(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
}

void CContentView::OnOpcEdititem() 
{
	// TODO: Add your command handler code here
	int				iPos = -1;
	CListCtrl&		list = GetListCtrl();

	iPos = list.GetNextItem(-1, LVNI_FOCUSED | LVNI_SELECTED); 
	if(iPos != -1)
	{
		CItem* pItem = (CItem*) list.GetItemData(iPos);
		pItem->EditItem();

		OnUpdate(NULL, CONTENT_UPDATE_ONLY, NULL);
	}
	
}

void CContentView::OnUpdateOpcEdititem(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CListCtrl&		list = GetListCtrl();

	if(list.GetSelectedCount() > 1)
		pCmdUI->Enable(FALSE);
	else
		pCmdUI->Enable(TRUE);
}

void CContentView::OnOpcReaditem() 
{
	// TODO: Add your command handler code here
	CReadItemDlg	dlg;
	int				iPos = -1;
	int				nSelectedItems;
	CListCtrl&		list = GetListCtrl();
	CItem*			pItem = NULL;
	CGroup*			pGroup = NULL;
	int				i = 0;

	nSelectedItems = list.GetSelectedCount();

	if(IDOK == dlg.DoModal())
	{
		OPCHANDLE* phServer = new OPCHANDLE[nSelectedItems];
		
		//fill in the server handles
		while(i < nSelectedItems)
		{
			iPos = list.GetNextItem(iPos, LVNI_SELECTED);
			if(iPos != -1)
			{
				pItem = (CItem*) list.GetItemData(iPos);
				if(pItem != NULL)
				{
					phServer[i] = pItem->GetHandle();
				}
				i++;
			}
		}

		if(pItem != NULL) pGroup = pItem->GetGroup();
		if(pGroup != NULL)
		{
			if(0 == dlg.m_iRead)
			{
				//sync
				if(1 == dlg.m_iFrom)
					pGroup->ReadItemsSync(OPC_DS_DEVICE, nSelectedItems, phServer);
				else
					pGroup->ReadItemsSync(OPC_DS_CACHE, nSelectedItems, phServer);
			}
			else if(1 == dlg.m_iRead)
			{
				//async
				if(1 == dlg.m_iFrom)
					pGroup->ReadItemsAsync(OPC_DS_DEVICE, nSelectedItems, phServer);
				else
					pGroup->ReadItemsAsync(OPC_DS_CACHE, nSelectedItems, phServer);
			}
		}
		delete[] phServer;

		OnUpdate(NULL, CONTENT_UPDATE_ONLY, NULL);
	}
}

void CContentView::OnUpdateOpcReaditem(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
}



void CContentView::OnOpcRemoveitem() 
{
	// TODO: Add your command handler code here
	int						iPos = -1;
	CListCtrl&				list = GetListCtrl();
	CArray<CItem*, CItem*>	RemoveItems;
	int						i = 0;
	int						nSelectedItems = 0;
	CItem*					pItem = NULL;

	RemoveItems.RemoveAll();
	
	nSelectedItems = list.GetSelectedCount();
		
	//fill in the server handles
	while(i < nSelectedItems)
	{
		iPos = list.GetNextItem(iPos, LVNI_SELECTED);
		if(iPos != -1)
		{
			pItem = (CItem*) list.GetItemData(iPos);
			RemoveItems.Add(pItem);
		}
		i++;
	}

	CGroup*	pGroup = pItem->GetGroup();  //take last item for getting the group
	if(pGroup->RemoveItems(&RemoveItems))
	{
		OnUpdate(NULL,0,NULL);
	}	
}

void CContentView::OnUpdateOpcRemoveitem(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	
}

⌨️ 快捷键说明

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