📄 edsdoc.cpp
字号:
// EdsDoc.cpp : CEdsDoc 类的实现
//
#include "stdafx.h"
#include "EdsChecker.h"
#include "EdsDoc.h"
#include ".\edsdoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#include "EdsView.h"
const char VDataType[8][MAX_LEN] = {
"nByte",
"nChar",
"nWord",
"nShort",
"nDWord",
"nInt",
"nFlaot",
"nDouble"
};
const char VDataIO[2][MAX_LEN] = {"Input","Output"};
// CEdsDoc
IMPLEMENT_DYNCREATE(CEdsDoc, CDocument)
BEGIN_MESSAGE_MAP(CEdsDoc, CDocument)
END_MESSAGE_MAP()
// CEdsDoc 构造/析构
CEdsDoc::CEdsDoc()
{
// TODO: 在此添加一次性构造代码
m_parrNode = new CArray<NODEINFO,NODEINFO&>;
}
CEdsDoc::~CEdsDoc()
{
}
// CEdsDoc 序列化
void CEdsDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: 在此添加存储代码
}
else
{
// TODO: 在此添加加载代码
}
}
// CEdsDoc 诊断
#ifdef _DEBUG
void CEdsDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CEdsDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
// CEdsDoc 命令
//BOOL CEdsDoc::OnOpenDocument(LPCTSTR lpszPathName)
//{
//
//}
BOOL CEdsDoc::OnNewDocument()
{
// TODO: 在此添加专用代码和/或调用基类
return CDocument::OnNewDocument();
}
BOOL CEdsDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
//清空列表视图
m_pEdsView->GetListCtrl().DeleteAllItems();
m_parrNode->RemoveAll();
CFile file;
CFileException e;
//打开EDS文件
if(!file.Open(lpszPathName,CFile::modeRead,&e))
{
e.ReportError();
return false;
}
HINSTANCE hInst = NULL;
//加载DLL来读取EDS数据
hInst = LoadLibrary("EDG.dll");
if(!hInst)
{
AfxMessageBox("未找到EDG.dll文件,该文件用于读取EDS信息.");
file.Close();
return true;
}
//加载数据读取函数
typedef bool(*EDSGET)(HWND hwnd,CFile& file,LPARRNODE parrNode);
EDSGET EdsGet = (EDSGET)GetProcAddress(hInst,"EdsDateGet");
if(!EdsGet)
{
AfxMessageBox("EDS.dll数据被破坏,请与厂家联系");
FreeLibrary(hInst);
file.Close();
return true;
}
LPARRNODE parrNode = new CArray<NODEINFO,NODEINFO&>;
if(EdsGet(AfxGetApp()->m_pMainWnd->m_hWnd,file,parrNode))
for(BYTE i=0;i<parrNode->GetSize();i++) m_parrNode->Add(parrNode->GetAt(i));
//加载数据释放函数
typedef void (*RELEASEEDSDATA)(LPARRNODE parrNode);
RELEASEEDSDATA ReleaseEdsData = (RELEASEEDSDATA)GetProcAddress(hInst,"ReleaseEdsData");
if(!ReleaseEdsData)
{
AfxMessageBox("EDS.dll数据被破坏");
FreeLibrary(hInst);
file.Close();
return false;
}
ReleaseEdsData(parrNode);
//释放DLL
FreeLibrary(hInst);
delete parrNode;
//关闭文件
file.Close();
if(!m_parrNode->GetSize()) return true;
//调用视图显示数据
CString str;
for(BYTE i=0;i<(m_parrNode->GetSize());i++)
{
str.Format("%d",m_parrNode->GetAt(i).strNodeName);
m_pEdsView->GetListCtrl().InsertItem(i,(m_parrNode->GetAt(i)).strNodeName,0);
m_pEdsView->GetListCtrl().SetItemText(i,1,str);
m_pEdsView->GetListCtrl().SetItemText(i,2,VDataType[m_parrNode->GetAt(i).nNodeDataType]);
m_pEdsView->GetListCtrl().SetItemText(i,3,m_parrNode->GetAt(i).strNodeUnit);
m_pEdsView->GetListCtrl().SetItemText(i,4,VDataIO[m_parrNode->GetAt(i).nNodeIOType]);
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -