📄 mainfrm.cpp
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "CUS_OPCClient.h"
#include "MainFrm.h"
#include "LeftView.h"
#include "OPCClientView.h"
#include "messageView.h" //系统消息
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code !
ON_WM_CREATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
}
CMainFrame::~CMainFrame()
{
}
IOPCServer *m_pIOPCServer;
IOPCItemMgt *m_pIOPCItemMgt;
IOPCGroupStateMgt *m_pIOPCGroupStateMgt;
IOPCAsyncIO2 *m_pIOPCAsyncIO2;
OPCITEMRESULT *m_pItemResult;
HRESULT *m_pErrors;
OPCHANDLE m_GrpSrvHandle;
#include "opctest/callback.h"
void Connect();
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
return 0;
}
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{
// create splitter window
if (!m_wndSplitter.CreateStatic(this, 1, 2))
return FALSE;
CRect client_rect;
GetClientRect(&client_rect);
CSize size = client_rect.Size();
size.cx /= 4;
if (!m_wndSplitter.CreateView(
0,
0,
RUNTIME_CLASS(CLeftView), size,
pContext)){
m_wndSplitter.DestroyWindow();
return false;
}
/*
!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(OPCClientView), CSize(100, 100), pContext))
{
m_wndSplitter.DestroyWindow();
return FALSE;
}
*/
if(!m_wndSplitter1.CreateStatic(
&m_wndSplitter,
2,
1,
WS_CHILD|WS_VISIBLE,
m_wndSplitter.IdFromRowCol(0, 1))){
return false;
}
size.cx *= 3;
size.cy *= 2;
size.cy /= 3;
if(!m_wndSplitter1.CreateView(
0,
0,
RUNTIME_CLASS(OPCClientView),
size,
pContext)){
m_wndSplitter1.DestroyWindow();
return false;
}
size.cy /= 2;
if(!m_wndSplitter1.CreateView(
1,
0,
RUNTIME_CLASS(MessageView),
size,
pContext)){
m_wndSplitter1.DestroyWindow();
return false;
}
return TRUE;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style &= ~FWS_ADDTOTITLE;
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
OPCClientView* CMainFrame::GetRightPane()
{
CWnd* pWnd = m_wndSplitter.GetPane(0, 1);
OPCClientView* pView = DYNAMIC_DOWNCAST(OPCClientView, pWnd);
return pView;
}
//通用
LPWSTR ConvertMultiByteToWideChar(LPCSTR ttt)
{
try{
size_t aLen = strlen( ttt ) + 1;
int wLen = MultiByteToWideChar(
CP_ACP,
0,
ttt,
aLen,
NULL,
0);
LPOLESTR tempID= new WCHAR [wLen];
int nreturn=MultiByteToWideChar(CP_ACP,0,ttt,aLen,tempID,wLen);
return (LPWSTR)tempID;
}catch(...){
return L"";
}
}
void Connect()
{
HRESULT r1;
CLSID clsid;
COSERVERINFO sin, *sinptr;
MULTI_QI mqi;
LPWSTR LszNodeName;
DWORD clsctx;
LONG TimeBias = 0;
FLOAT PercentDeadband = 0.0;
DWORD RevisedUpdateRate;
// LPWSTR ErrorStr1,ErrorStr2;
CString szErrorText;
DWORD m_dwAdvise;
// r1 = CoInitialize(NULL);
LPWSTR Lopcservername;
Lopcservername=ConvertMultiByteToWideChar("KEPware.KEPServerEx.V4");
r1 = CLSIDFromProgID(Lopcservername, &clsid);
sinptr = &sin;
sin.dwReserved1 = sin.dwReserved2 = 0;
LszNodeName = ConvertMultiByteToWideChar("CSIT-ZKS");
sin.pwszName = LszNodeName; // szNodeName为本地或远程计算机名
sin.pAuthInfo = 0;
clsctx = CLSCTX_REMOTE_SERVER;//远程
mqi.pIID = &IID_IOPCServer;
mqi.hr = 0;
mqi.pItf = 0;
clsctx = CLSCTX_REMOTE_SERVER;//远程
r1 = CoCreateInstanceEx(clsid, NULL, clsctx, sinptr, 1, &mqi);// 创建OPC服务器的浏览器对象
m_pIOPCServer = (IOPCServer*)mqi.pItf;
r1=m_pIOPCServer->AddGroup(
L"grp1", // [in] group name
false, // [in] not active, so no OnDataChange callback
500, // [in] Request this Update Rate from Server
1000, // [in] Client Handle, not necessary in this sample
&TimeBias, // [in] No time interval to system UTC time
&PercentDeadband, // [in] No Deadband, so all data changes are reported
0, // [in] Server uses english language to for text values
&m_GrpSrvHandle, // [out] Server handle to identify this group in later calls
&RevisedUpdateRate, // [out] The answer from Server to the requested Update Rate
IID_IOPCGroupStateMgt,
(LPUNKNOWN*)&m_pIOPCGroupStateMgt); // [out] pointer to the requested interface
CComObject<COPCDataCallback>* pCOPCDataCallback; // Pointer to Callback Object
CComObject<COPCDataCallback>::CreateInstance(&pCOPCDataCallback);
LPUNKNOWN pCbUnk;
pCbUnk = pCOPCDataCallback->GetUnknown();
r1 = AtlAdvise( m_pIOPCGroupStateMgt, // [in] IUnknown Interface of the Connection Point
pCbUnk, // [in] IUnknown Interface of the Callback object
IID_IOPCDataCallback,// [in] Connection Point ID: The OPC Data Callback
&m_dwAdvise // [out] Cookie that that uniquely identifies the connection
);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -