📄 democlientview.cpp
字号:
{
AfxMessageBox("Connect to OPC Server Failed!");
return;
}
m_hConnect = hConnect;
KOC_SetDataChangeProc(m_hConnect, &DataChangeProc);
KOC_SetShutdownProc(m_hConnect,&ShutdownProc);
}
void CDemoClientView::OnOpcGroupAdd()
{
// TODO: Add your command handler code here
CGroupAddDlg dlg;
dlg.m_strGroupName = "Group1";
dlg.m_dwUpdateRate = 100;
dlg.m_fDeadBand = 0.0f;
if (dlg.DoModal() != IDOK ) return;
HANDLE hGroup;
BOOL bActive = true;
long lTimeBias = 0;
DWORD dwLcid = 0;
hGroup = KOC_AddGroup(
m_hConnect,
dlg.m_strGroupName,
&bActive,
&dlg.m_dwUpdateRate,
&lTimeBias,
&dlg.m_fDeadBand,
&dwLcid);
if (hGroup==INVALID_HANDLE_VALUE)
{
AfxMessageBox("Add Group Failed!");
return;
}
//AfxMessageBox("Add Group OK!");
m_hGroup = hGroup;
}
void CDemoClientView::OnOPCGROUPRemove()
{
// TODO: Add your command handler code here
KOC_RemoveGroup(m_hConnect,m_hGroup);
GetListCtrl().DeleteAllItems();
CItem *pItem;
for (int i=0;i<ItemList.GetSize();i++)
{
pItem = (CItem *)ItemList.GetAt(i);
delete pItem;
}
ItemList.RemoveAll();
m_hGroup = NULL;
m_nSelectedIndex = -1;
}
void CDemoClientView::OnOpcItemAdd()
{
// TODO: Add your command handler code here
CItemAddDlg dlg;
dlg.m_pView = this;
if(dlg.DoModal() != IDOK) return;
}
BOOL CDemoClientView::AddItem(CString strItemName)
{
HANDLE hTag = NULL;
hTag = KOC_AddItem(m_hConnect,m_hGroup,strItemName);
if (hTag == INVALID_HANDLE_VALUE)
{
TRACE("Add Item %s Failed!\n",strItemName);
return FALSE;
}
CItem *pItem = new CItem;
ItemList.Add(pItem);
pItem->hItem = hTag;
pItem->Name = strItemName;
CListCtrl& ListCtrl = GetListCtrl();
char buf[100];
LV_ITEM lvi;
lvi.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE;//| LVIF_IMAGE;
lvi.iSubItem = 0;
if (pItem->Writable)
lvi.state = INDEXTOSTATEIMAGEMASK(1);
else
lvi.state = INDEXTOSTATEIMAGEMASK(2);
lvi.stateMask = TVIS_STATEIMAGEMASK;
strncpy (buf, pItem->Name, 100);
lvi.pszText = buf;
lvi.iItem = ListCtrl.GetItemCount() +1;
lvi.lParam = (LPARAM)pItem;
ListCtrl.InsertItem(&lvi);
TRACE("Item %s succesful added!\n",strItemName);
return TRUE;
}
void CDemoClientView::OnOpcItemRemove()
{
// TODO: Add your command handler code here
CItem *pItem;
for (int i=0;i<ItemList.GetSize();i++)
{
pItem = (CItem *)ItemList.GetAt(i);
if ( pItem ==(CItem *)GetListCtrl().GetItemData(m_nSelectedIndex) )
{
KOC_RemoveItem(m_hConnect,m_hGroup,pItem->hItem);
GetListCtrl().DeleteItem(m_nSelectedIndex);
delete pItem;
ItemList.RemoveAt(i);
m_nSelectedIndex = -1;
return;
}
}
}
void CDemoClientView::OnUpdateOpcConnect(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable( (m_hConnect==NULL) ? TRUE : FALSE );
}
void CDemoClientView::OnUpdateOpcDisconnect(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable( (m_hConnect!=NULL) ? TRUE : FALSE );
}
void CDemoClientView::OnUpdateOpcGroupAdd(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable( ( (m_hConnect!=NULL)&&(m_hGroup==NULL) ) ? TRUE : FALSE );
}
void CDemoClientView::OnUpdateOPCGROUPRemove(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable( ( (m_hConnect!=NULL)&&(m_hGroup!=NULL) ) ? TRUE : FALSE );
}
void CDemoClientView::OnUpdateOpcItemAdd(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable( ( (m_hConnect!=NULL)&&(m_hGroup!=NULL) ) ? TRUE : FALSE );
}
void CDemoClientView::OnUpdateOpcItemRemove(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable( (m_nSelectedIndex>=0) ? TRUE:FALSE );
}
//LRESULT CDemoClientView::OnServerShutdown(UINT wParam, LPARAM lparam)
//{
// OnOpcDisconnect();
// return (0);
//}
void CDemoClientView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if (nIDEvent == DISPLAY_TICK)
{
CTime timestamp;
CString tmpStr;
CItem *pItem;
char buf[100];
int i=0;
CListCtrl& pList = GetListCtrl();
while ( (i<pList.GetItemCount()) )
{
pItem = (CItem *)pList.GetItemData(i);
FormatDataType(&(pItem->Value),buf);
pList.SetItemText(i,1,buf);
FormatVariant(&(pItem->Value),buf);
pList.SetItemText(i,2,buf);
timestamp = CTime::CTime(pItem->TimeStamp);
pList.SetItemText(i,3,timestamp.Format("%Y-%m-%d %H:%M:%S"));
FormatOpcQuality(pItem->Quality,buf);
pList.SetItemText(i,4,buf);
/*
if (!pItem->Active)
pList.SetItemState(i,INDEXTOSTATEIMAGEMASK(3),TVIS_STATEIMAGEMASK );
else if ( pItem->Writable )
pList.SetItemState(i,INDEXTOSTATEIMAGEMASK(1),TVIS_STATEIMAGEMASK );
else
pList.SetItemState(i,INDEXTOSTATEIMAGEMASK(2),TVIS_STATEIMAGEMASK );
*/
i++;
}
return;
}
CListView::OnTimer(nIDEvent);
}
void CDemoClientView::OnDestroy()
{
CListView::OnDestroy();
// TODO: Add your message handler code here
KillTimer(DISPLAY_TICK);
OnOpcDisconnect();
}
void CDemoClientView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_nSelectedIndex = GetListCtrl().HitTest(point, NULL);
CListView::OnLButtonDown(nFlags, point);
}
void CDemoClientView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CListView::OnRButtonDown(nFlags, point);
m_nSelectedIndex = GetListCtrl().HitTest(point, NULL);
if (m_nSelectedIndex != -1 )
{
// map the point that is passed to the
// function from client coordinates
// to screen coordinates
ClientToScreen(&point);
CMenu Menu;
if ( Menu.LoadMenu(IDR_ITEM) )
{
CMenu* pSubMenu = Menu.GetSubMenu(0);
if (pSubMenu!=NULL)
{
// Display the context menu
pSubMenu->TrackPopupMenu(
TPM_LEFTALIGN | TPM_RIGHTBUTTON,
point.x, point.y, this);
}
}
}
}
void CDemoClientView::OnItemRead()
{
// TODO: Add your command handler code here
CItem *pItem;
pItem = (CItem *)GetListCtrl().GetItemData(m_nSelectedIndex);
VARIANT Value;
VariantInit (&Value);
FILETIME ftTime;
DWORD dwQuality;
BOOL bResult = KOC_ReadItem(m_hConnect,
m_hGroup,
pItem->hItem,
&Value,
&ftTime,
&dwQuality );
if (bResult)
{
TRACE("Read Succ.\n");
VariantCopy(&pItem->Value,&Value);
pItem->TimeStamp = ftTime;
pItem->Quality = dwQuality;
}
else TRACE("Read Failed.\n");
VariantClear(&Value);
}
void CDemoClientView::OnItemWrite()
{
// TODO: Add your command handler code here
CItem *pItem;
pItem = (CItem *)GetListCtrl().GetItemData(m_nSelectedIndex);
CItemWriteDlg dlg;
if (dlg.DoModal() != IDOK ) return;
COleVariant vt( dlg.m_strValue ); // initialize as a string
vt.ChangeType( pItem->Value.vt ); // let COleVariant convert!
BOOL bResult = KOC_WriteItem(m_hConnect,
m_hGroup,
pItem->hItem,
vt,
dlg.m_bAsync);
if (!bResult)
AfxMessageBox("Write Interface Failed", MB_OK);
}
void CDemoClientView::OnOpcItemActive()
{
// TODO: Add your command handler code here
CListCtrl& pList = GetListCtrl();
CItem *pItem;
pItem = (CItem *)pList.GetItemData(m_nSelectedIndex);
BOOL bRet = FALSE;
bRet = KOC_ActiveItem( m_hConnect, m_hGroup, pItem->hItem,!pItem->Active );
if (bRet) pItem->Active = !pItem->Active;
if (!pItem->Active)
pList.SetItemState(m_nSelectedIndex,INDEXTOSTATEIMAGEMASK(3),TVIS_STATEIMAGEMASK );
else if ( pItem->Writable )
pList.SetItemState(m_nSelectedIndex,INDEXTOSTATEIMAGEMASK(1),TVIS_STATEIMAGEMASK );
else
pList.SetItemState(m_nSelectedIndex,INDEXTOSTATEIMAGEMASK(2),TVIS_STATEIMAGEMASK );
}
void CDemoClientView::OnUpdateOpcItemActive(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
if ( m_nSelectedIndex>=0 )
{
pCmdUI->Enable( TRUE );
CItem *pItem;
pItem = (CItem *)GetListCtrl().GetItemData(m_nSelectedIndex);
pCmdUI->SetCheck( pItem->Active ? TRUE : FALSE );
}
else
{
pCmdUI->Enable( FALSE );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -