在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例C/C++网络编程 → CCD通讯 示例源码(c++)

CCD通讯 示例源码(c++)

C/C++网络编程

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.43M
  • 下载次数:27
  • 浏览次数:378
  • 发布时间:2018-01-18
  • 实例类别:C/C++网络编程
  • 发 布 人:wenjian
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 通讯 CCD

实例介绍

【实例简介】CCD通讯

【实例截图】

from clipboard

【核心代码】


// CCDView.cpp : implementation of the CCCDView class
//

#include "stdafx.h"
#include "CCD.h"
#include "SetDlg.h"
#include "CCDDoc.h"
#include "CCDView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define DEFSCALE 0.5
#define MAX 65535
#define MAXX 5000
#define DEFSIZE 50
#define MIDDATA 30000
/////////////////////////////////////////////////////////////////////////////
// CCCDView

IMPLEMENT_DYNCREATE(CCCDView, CScrollView)

BEGIN_MESSAGE_MAP(CCCDView, CScrollView)
	//{{AFX_MSG_MAP(CCCDView)
	ON_WM_TIMER()
	ON_COMMAND(ID_START, OnStart)
	ON_COMMAND(ID_PAUSE, OnPause)
	ON_COMMAND(ID_STOP, OnStop)
	ON_COMMAND(ID_SET, OnSet)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCCDView construction/destruction


CCCDView::CCCDView()
{
	RESET=1;
	pData1=NULL;
	pData2=NULL;

	CWinApp* pApp = AfxGetApp();
	m_nBaseAddr=pApp->GetProfileInt("CCD","BaseAddr",0);
	m_nPixelNum1=pApp->GetProfileInt("CCD","PixelNum1",1000);
	m_nPixelNum2=pApp->GetProfileInt("CCD","PixelNum2",1000);
	m_time=pApp->GetProfileInt("CCD","Time",500);
	m_UserScale=pApp->GetProfileInt("CCD","UserScale",1);
	m_ShowType=pApp->GetProfileInt("CCD","ShowType",0);

	hMod=LoadLibrary("ADA11GH2-AT.dll");
	if(hMod!=NULL)
	pfunc=(CCD_DATA)GetProcAddress(hMod,"CCD_DataAcquisition");
	else
	{
		MessageBox("Can't load dll function!\r\nPrograme will stop!","Warning");
		exit(0);
	}
	// TODO: add construction code here

}

CCCDView::~CCCDView()
{
	if(hMod!=NULL)
		FreeLibrary(hMod);

    CWinApp* pApp = AfxGetApp();

	pApp->WriteProfileInt("CCD","BaseAddr",m_nBaseAddr);
	pApp->WriteProfileInt("CCD","PixelNum1",m_nPixelNum1);
	pApp->WriteProfileInt("CCD","PixelNum2",m_nPixelNum2);
	pApp->WriteProfileInt("CCD","Time",m_time);
	pApp->WriteProfileInt("CCD","UserScale",m_UserScale);
	pApp->WriteProfileInt("CCD","ShowType",m_ShowType);

}

BOOL CCCDView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CCCDView drawing

void CCCDView::OnDraw(CDC* pDC)
{
	CCCDDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if(m_nNum)
	{
		CRect rect;
		GetClientRect(&rect);
		
		int rectx=rect.Width();
		int recty=rect.Height();

		CPen pen1,pen2;
		CPen *OldPen;
		CString str;
		pen1.CreatePen(PS_DOT,1,RGB(125,125,125));
		pen2.CreatePen(PS_SOLID,1,RGB(0,0,255));

		int i,j,k;

		if(m_ShowType)
		{
			CSize sizeTotal;
			sizeTotal.cx=rect.Width();
			sizeTotal.cy=(m_nNum 2)*10;
			SetScrollSizes(MM_TEXT, sizeTotal);

			OldPen=pDC->SelectObject(&pen1);
			for(i=1;i<m_nNum 1;i  )
			{
				pDC->MoveTo(0,i*20);
				pDC->LineTo(rect.Width(),i*20);
			}
			pDC->MoveTo(rect.Width()/4,0);
			pDC->LineTo(rect.Width()/4,sizeTotal.cy);

			pDC->MoveTo(rect.Width()/2,0);
			pDC->LineTo(rect.Width()/2,sizeTotal.cy);

			pDC->MoveTo(rect.Width()*3/4,0);
			pDC->LineTo(rect.Width()*3/4,sizeTotal.cy);

			pDC->SelectObject(&pen2);
			pDC->TextOut(0,0,"测量次数");
			pDC->TextOut(rect.Width()/4,0,"测量数值");
			pDC->TextOut(rect.Width()/2,0,"测量次数");
			pDC->TextOut(rect.Width()*3/4,0,"测量数值");
			
			for(i=1;i<(m_nNum 1);i  )
			{
				k=i%2 ? 0:rect.Width()/2;
				j=(i 1)/2;
				str.Format("%d",i);
				pDC->TextOut(0 k,j*20,str);
				str.Format("%d",m_pData[i-1]);
				pDC->TextOut(rect.Width()/4 k,j*20,str);
			}
			pDC->SelectObject(OldPen);			
			
		}else
		{
			
			double defscale=(double)(rectx)/20/m_UserScale;
			
			CSize sizeTotal;
			sizeTotal.cx=((m_nNum*defscale rectx/20)>rect.Width() ? (m_nNum*defscale rectx/20):rect.Width());
			sizeTotal.cy = rect.Height();
			SetScrollSizes(MM_TEXT, sizeTotal);
			// TODO: add draw code for native data here
			
			int startx=rectx/20;
			int starty=sizeTotal.cy-recty/20;
			
			OldPen=pDC->SelectObject(&pen1);
			j=sizeTotal.cy*20/recty;
			k=(sizeTotal.cx*20)/rectx (sizeTotal.cx*20)%rectx*2;
			double scaley=((double)(MAX*j))/(sizeTotal.cy*(j-1));
			double scalex=((double)(sizeTotal.cx-startx)/m_nNum);
			double stepx=(double)rectx/20;
			double stepy=(double)recty/20;
			for(i=1;i<j;i  )
			{
				pDC->MoveTo(0,stepy*i);
				pDC->LineTo(sizeTotal.cx,stepy*i);
				str.Format("%d",(j-i-1)*MAX/(j-1));
				pDC->TextOut(0,stepy*i,str);
			}
			for(i=1;i<k;i  )
			{
				pDC->MoveTo(stepx*i,0);
				pDC->LineTo(stepx*i,sizeTotal.cy);
				str.Format("%d",(i-1)*MAXX/(k-1));
				pDC->TextOut(stepx*i,starty,str);
			}
			
			pDC->SelectObject(&pen2);
			
			pDC->MoveTo(startx,0);
			pDC->LineTo(startx,starty);
			pDC->LineTo(sizeTotal.cx,starty);
			
			pDC->MoveTo(startx,starty-m_pData[0]*scaley);
			double tempx,tempy;
			for(i=0;i<m_nNum;i  )
			{
				tempx=i*scalex;
				tempx =startx;
				tempy=starty-m_pData[i]/scaley;
				pDC->LineTo(tempx,tempy);
			}
			pDC->SelectObject(OldPen);
		}
	}
	// TODO: add draw code for native data here
}

void CCCDView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();

	CSize sizeTotal;
	// TODO: calculate the total size of this view
	sizeTotal.cx = sizeTotal.cy = 100;
	SetScrollSizes(MM_TEXT, sizeTotal);
}

/////////////////////////////////////////////////////////////////////////////
// CCCDView printing

BOOL CCCDView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CCCDView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CCCDView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CCCDView diagnostics

#ifdef _DEBUG
void CCCDView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CCCDView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

CCCDDoc* CCCDView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCCDDoc)));
	return (CCCDDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CCCDView message handlers

void CCCDView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if(pfunc(m_nBaseAddr,pData1,pData2,m_nPixelNum1,m_nPixelNum2))
	{
		int index1=0;
		int index2=0;
		UINT i=0;
		for(i=0;i<m_nPixelNum1&&pData1[i]>=MIDDATA;i  );
		index1=i;
		for(i=0;i<m_nPixelNum2&&pData2[i]<=MIDDATA;i  );
		index2=i;
		if(m_nNowIndex>=m_nMax)
		{
			m_nMax*=2;
			int *pTemp=new int[m_nMax];
			delete m_pData;
			m_pData=pTemp;
		}
		m_pData[m_nNowIndex]=m_nPixelNum1-index1 index2;
		m_nNowIndex  ;
		m_nNum  ;
	}

	InvalidateRect(NULL);

	CScrollView::OnTimer(nIDEvent);
}

void CCCDView::OnStart() 
{
	// TODO: Add your command handler code here
	if(RESET)
	{
		m_nNowIndex=0;
		m_nNum=0;
		if(m_pData!=NULL)
			delete m_pData;
		m_pData=new int[DEFSIZE];
		m_nMax=DEFSIZE;
		
		if(pData1!=NULL)
			delete pData1;
		if(pData2!=NULL)
			delete pData2;
		if(m_nPixelNum1)
			pData1=new short int[m_nPixelNum1];
		if(m_nPixelNum2)
			pData2=new short int[m_nPixelNum2];
	}

	SetTimer(1,m_time,NULL);
	
}

void CCCDView::OnPause() 
{
	// TODO: Add your command handler code here
	KillTimer(1);
	RESET=0;
	
}

void CCCDView::OnStop() 
{
	// TODO: Add your command handler code here
	KillTimer(1);
	RESET=1;

	
}

void CCCDView::OnSet() 
{
	// TODO: Add your command handler code here
	CSetDlg dlg;
	dlg.m_intertime=m_time;
	char szbase[256];
	sprintf(szbase,"%x",m_nBaseAddr);
	dlg.m_nBaseAddr=szbase;
	dlg.m_nNum1=m_nPixelNum1;
	dlg.m_nNum2=m_nPixelNum2;
	dlg.m_nENum=m_UserScale;
	dlg.m_ShowType=m_ShowType;
	if(dlg.DoModal()==IDOK)
	{
		sscanf(dlg.m_nBaseAddr,"%x",&m_nBaseAddr);
		m_nPixelNum1=dlg.m_nNum1;
		m_nPixelNum2=dlg.m_nNum2;
		m_time=dlg.m_intertime;
		m_UserScale=dlg.m_nENum;
		m_ShowType=dlg.m_ShowType;
	}
	InvalidateRect(NULL);
}


标签: 通讯 CCD

实例下载地址

CCD通讯 示例源码(c++)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警