【编者按】网学网VC与C++类别频道为大家收集整理了“基于VC++可视化编程环境的虚拟测试平台“提供大家参考,希望对大家有所帮助!
客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn |
1 实现代码及其效果介绍 1.1 程序效果介绍 该平台它能够对各同学编写完成的虚拟器件进行测试,首先要做的是将编写好的器件封装成的DLL库以及存放器件信息的TXT文件的名字告诉平台,然后平台就可以对其进行装载,并且将器件显示在器件图中,之后就可以开始对器件进行简单的测试。 1.2 主要函数介绍 1.2.1 对DLL库进行装载 下面一段代码实现了对DLL函数库的加载以及对DLL库里的函数调用,具体方法是用HMODULE hMod = LoadLibrary(m_LibName+"Dll.dll");对指定的DLL库进行了加载,然后再以pComp = pfnEF((LPVOID )pDoc)导出函数返回了一个指针值,然后就可以以这个指针来调用其中的函数。 void CTestComponentDlg::OnBtnLoad() { // TODO: Add your control notification handler code here UpdateData(TRUE); HMODULE hMod = LoadLibrary(m_LibName+"Dll.dll"); typedef DComponent* (*PExportedFn)(LPVOID ); PExported FnpfnEF=(PExportedFn)GetProcAddress(hMod,"Create"+m_LibName); pComp = pfnEF((LPVOID )pDoc); // int ver = pComp->GetVersion(); UpdateData(FALSE); } 1.2.2 读取器件信息 下面这段代码可以将指定的.TXT文本文档中的器件信息进行读取,其中包括器件位置(画图时开始的位置)、管脚信息等相关信息。 它首先是打开了一个文档,该文档的开始地址给了FP这个指针然后用自己编写的一个函数pComp->ReadInfo(fp,pDoc)对该文档的内容进行了读取。 void CTestComponentDlg::OnBtnReadinfo() { // TODO: Add your control notification handler code here FILE *fp ; UpdateData(TRUE); fp = fopen(m_CompMsg,"rt"); pComp->ReadInfo(fp,pDoc); fclose(fp); UpdateData(FALSE); } 1.2.3 显示器件 这段代码完成的是画出器件图的功能,它根据读取器件代码所读取到的信息来完成器件图的显示。 void CTestComponentDlg::OnBtnDisp() { // TODO: Add your control notification handler code here CDC *pdc = c_Field.GetDC(); // int ver = pComp->GetVersion(); // char *pName = pComp->GetMyName() ; pComp->DrawObject(pdc); c_Field.ReleaseDC(pdc); } 1.2.4 对单一管脚施加信号 这是对单一管脚的信号施加代码段m_Pin是管脚编号,SigVal是信号值。 void CTestComponentDlg::OnBtnaddsig() { // TODO: Add your control notification handler code here UpdateData(TRUE); pComp->OutSig(m_Pin,m_SigVal); //m_Pin是管脚编SigVal是信号 UpdateData(FALSE); } 1.2.5 连续信号施加 在这里由于要施加连续信号,所以使用了一个定时器SetTimer(100,500,NULL)函数,在定时器内打开了一个TXT文档,在这文档中提取出了2个整形参数(管脚编号与信号值)再将它赋给相对应的管脚。在读完文档后释放了fp指针。 void CTestComponentDlg::OnButton1() { // TODO: Add your control notification handler code here SetTimer(100,500,NULL); fp = fopen("cmd.txt","r"); } void CTestComponentDlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default char buf[250]; if(fp != NULL) { int pin,s; fgets(buf,250,fp); sscanf(buf,"%d,%d",&pin,&s); pComp->OutSig(pin,s); // c_ListMsg.AddString(buf); if(feof(fp)) { fclose(fp); fp = NULL ; } } CDialog::OnTimer(nIDEvent); } 1.2.6 鼠标操作 这是一段操作鼠标的代码,它留出了很多接口函数由编写器件时程序员自己对它进行实现。当在器件编码中完成对这些接口的实现后,在本程序中就可以在显示出的器件图上通过鼠标点击来触发一些事件,比如开关开启等。本程序在测试8255器件时并没有使用到该功能。 #include "line.h" class CVisualexDoc; class DComponent { public: CLine *Pin; //保存引脚信息 char **pPinName; int iPinNum ; CString sComName ; CPoint Position; //位置信息 int cx; int cy; //器件的大小 protected: CVisualexDoc *pParent ; public: DComponent(CVisualexDoc *p,int ); virtual ~DComponent(); virtual int OutSig(int iPinNo,int iSigVal)=0; virtual char * GetMyName() {return "null";}; virtual int GetVersion(){return 1;}; virtual int DrawObject(CDC* pDC);//{return 1;}; virtual int ReadInfo(FILE* file,CVisualexDoc* pDoc); // 查找一个引脚 virtual int FindPin(CVisualexDoc* pDoc,CPoint point,int ele); virtual CLine* FindPin(int iPinNo,int iSigVal); virtual int MouseEvent(int event , CPoint pt) {return 1 ;}; }; |
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT |
本文选自计算机毕业设计http://myeducs.cn |