⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rulerview.cpp

📁 电子尺源程序说明 本程序使用ADO访问Access2000的数据库。
💻 CPP
字号:
// RulerView.cpp : implementation of the CRulerView class
//

#include "stdafx.h"
#include "new ruler.h"
#include "saveDlg.h"
#include "listDlg.h"

#include "RulerDoc.h"
#include "RulerView.h"

#include "Target.h"

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

//申明全局变量
extern CRulerApp theApp;

/////////////////////////////////////////////////////////////////////////////
// CRulerView

IMPLEMENT_DYNCREATE(CRulerView, CFormView)

BEGIN_MESSAGE_MAP(CRulerView, CFormView)
	//{{AFX_MSG_MAP(CRulerView)
	ON_COMMAND(ID_MENU_START, OnMenuStart)
	ON_MESSAGE(WM_ENDCLICK, OnEndClick)
	ON_MESSAGE(WM_CANCELCLICK, OnCancelClick)
	ON_COMMAND(ID_FILE_SAVE, OnFileSave)
	ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_COMMAND(ID_FILE_NEW, OnFileNew)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRulerView construction/destruction

CRulerView::CRulerView()
	: CFormView(CRulerView::IDD),IsNew(FALSE),m_ID(0)
{
	//{{AFX_DATA_INIT(CRulerView)
	m_cm = _T("0");
	m_EndX = _T("0");
	m_EndY = _T("0");
	m_Inch = _T("0");
	m_mm = _T("0");
	m_Pixel = _T("0");
	m_StartX = _T("0");
	m_StartY = _T("0");
	m_AreaCir_Inch = _T("0");
	m_AreaCir_MM = _T("0");
	m_AreaCir_Pixel = _T("0");
	m_AreaRect_Inch = _T("0");
	m_AreaRect_MM = _T("0");
	m_AreaRect_Pixel = _T("0");
	//}}AFX_DATA_INIT
	// TODO: add construction code here

	//初始化连接
	HRESULT hr;
	try
	{
		///创建Connection对象
		hr = m_pConnection.CreateInstance("ADODB.Connection");
		if(SUCCEEDED(hr))
		{
			hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb","","",adModeUnknown);///连接数据库
			///上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为:Provider=Microsoft.Jet.OLEDB.3.51;
			hr = m_pRs.CreateInstance("ADODB.Recordset");
		}
	}
	catch(_com_error e)///捕捉异常
	{
		CString errormessage;
		errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
		AfxMessageBox(errormessage);///显示错误信息
	}

}

CRulerView::~CRulerView()
{
	m_pConnection->Close();
}

void CRulerView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRulerView)
	DDX_Text(pDX, IDC_EDIT_CM, m_cm);
	DDX_Text(pDX, IDC_EDIT_ENDX, m_EndX);
	DDX_Text(pDX, IDC_EDIT_ENDY, m_EndY);
	DDX_Text(pDX, IDC_EDIT_INCH, m_Inch);
	DDX_Text(pDX, IDC_EDIT_MM, m_mm);
	DDX_Text(pDX, IDC_EDIT_PIXEL, m_Pixel);
	DDX_Text(pDX, IDC_EDIT_STARTX, m_StartX);
	DDX_Text(pDX, IDC_EDIT_STARTY, m_StartY);
	DDX_Text(pDX, IDC_AREACIR_INCH, m_AreaCir_Inch);
	DDX_Text(pDX, IDC_AREACIR_MM, m_AreaCir_MM);
	DDX_Text(pDX, IDC_AREACIR_PIXEL, m_AreaCir_Pixel);
	DDX_Text(pDX, IDC_AREARECT_INCH, m_AreaRect_Inch);
	DDX_Text(pDX, IDC_AREARECT_MM, m_AreaRect_MM);
	DDX_Text(pDX, IDC_AREARECT_PIXEL, m_AreaRect_Pixel);
	//}}AFX_DATA_MAP
}

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

	return CFormView::PreCreateWindow(cs);
}

void CRulerView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();

}

/////////////////////////////////////////////////////////////////////////////
// CRulerView diagnostics

#ifdef _DEBUG
void CRulerView::AssertValid() const
{
	CFormView::AssertValid();
}

void CRulerView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

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

/////////////////////////////////////////////////////////////////////////////
// CRulerView message handlers

void CRulerView::OnMenuStart() 
{
	// TODO: Add your command handler code here
	//设置参照物的颜色
	CRulerDoc* pDoc=GetDocument();
	target.SetColor(pDoc->m_ColorAux, pDoc->m_ColorStart, pDoc->m_ColorFont);

	//使主窗口最小化
	CWnd* pMainWnd=AfxGetApp()->m_pMainWnd;
	pMainWnd->ShowWindow(SW_SHOWMINIMIZED);
	//阻塞100毫秒,使其有足够时间最小化
	Sleep(100);

	target.CreateTarget("Target", this);
	target.ShowWindow(SW_SHOWNORMAL);
	//仍然不能在qq的面板之上
	target.SetWindowPos(&wndTop, 0, 0, 0, 0,SWP_NOSIZE);

}

LRESULT CRulerView::OnEndClick(WPARAM wParam, LPARAM lParam)
{
	AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOWNORMAL);

	//设置长度控件
	m_cm.Format("%.2f",target.GetLength_MM()/10);
	m_mm.Format("%.2f",target.GetLength_MM());
	m_Pixel.Format("%d",target.GetLength_Pixel());
	m_Inch.Format("%.2f",target.GetLength_Inch());
	RECT recPoints;
	recPoints=target.GetPoints();
	//设置两点坐标控件
	m_StartX.Format("%d",recPoints.left);
	m_StartY.Format("%d",recPoints.top);
	m_EndX.Format("%d",recPoints.right);
	m_EndY.Format("%d",recPoints.bottom);
	//设置面积控件
	m_AreaCir_Inch.Format("%.2f", target.GetArea_Circle_Inch());
	m_AreaCir_MM.Format("%.2f", target.GetArea_Circle_MM());
	m_AreaCir_Pixel.Format("%d", target.GetArea_Circle_Pixel());
	m_AreaRect_Inch.Format("%.2f", target.GetArea_Rectangle_Inch());
	m_AreaRect_MM.Format("%.2f", target.GetArea_Rectangle_MM());
	m_AreaRect_Pixel.Format("%d", target.GetArea_Rectangle_Pixel());
	//更新控件的值
	UpdateData(FALSE);

	GetDocument()->m_recPoints=recPoints;

	//设置新测量标志
	IsNew=TRUE;

	//在标题栏上加“*”表示数据已改动
	CString topic;
	theApp.m_pMainWnd->GetWindowText(topic);
	topic+=" *";
	theApp.m_pMainWnd->SetWindowText(topic);

	return 0;
}

LRESULT CRulerView::OnCancelClick(WPARAM wParam, LPARAM lParam)
{
	AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOWNORMAL);
	return 0;
}

void CRulerView::OnFileSave() 
{
	// TODO: Add your command handler code here
	if(IsNew)
	{
		if(m_ID==0)
			OnFileSaveAs();
		else
		{
			//生成插入记录的SQL字符串
			CString strNum;
			CString cmd1="";	//字符串过长,需要连接两个CString对象
			CString cmd="Update Measure Set ";
			cmd+="[StartX]=" + m_StartX + ", ";
			cmd+="[StartY]=" + m_StartY + ", ";
			cmd+="[EndX]=" + m_EndX + ", ";
			cmd+="[EndY]=" + m_EndY + ", ";
			cmd+="[LenPixel]=" + m_Pixel + ", ";
			cmd+="[LenMM]=" + m_mm + ", ";
			cmd+="[LenInch]=" + m_Inch + ", ";
			cmd+="[AreaRectPixel]=" + m_AreaRect_Pixel + ", ";
			cmd+="[AreaRectMM]=" + m_AreaRect_MM + ", ";
			cmd+="[AreaRectInch]=" + m_AreaRect_Inch + ", ";
			cmd1+="[AreaCirPixel]=" + m_AreaCir_Pixel + ", ";
			cmd1+="[AreaCirMM]=" + m_AreaCir_MM + ", ";
			cmd1+="[AreaCirInch]=" + m_AreaCir_Inch + ",";
			COleDateTime current;
			current = COleDateTime::GetCurrentTime();
			cmd1+="[SaveDate]='" + current.Format("%Y-%m-%d %H:%M:%S") + "' ";
			strNum.Format("%d",m_ID);
			cmd1+="Where ID=" + strNum;
			
			//插入记录
			m_pConnection->Execute((_bstr_t)(cmd+cmd1),NULL,adCmdText);

			//重置标志为非新数据
			IsNew=FALSE;

			//去掉标题最后的“*”号
			CString topic;
			theApp.m_pMainWnd->GetWindowText(topic);
			topic=topic.Left(topic.GetLength()-1);
			theApp.m_pMainWnd->SetWindowText(topic);
		}
	}
}

void CRulerView::OnFileSaveAs() 
{
	// TODO: Add your command handler code here
	HRESULT hr=0;
	CSaveDlg saveDlg;

	if(saveDlg.DoModal()==IDOK)
	{
		try
		{
			hr = m_pRs->Open("Select ID From Measure Order by ID DESC",
				_variant_t((IDispatch *)m_pConnection,true),
				adOpenDynamic,
				adLockOptimistic,
				adCmdText);
			
			//确定ID值
			if(m_pRs->adoEOF)
				m_ID=1;
			else
			{
				m_ID=m_pRs->GetCollect("ID").intVal;
				m_ID++;
			}
			m_pRs->Close();
			
			//生成插入记录的SQL字符串
			CString strNum;
			CString cmd="Insert Into Measure Values (";
			strNum.Format("%d",m_ID);
			cmd+=strNum+",";
			cmd+="'" + saveDlg.m_name + "',";
			cmd+=m_StartX + ",";
			cmd+=m_StartY + ",";
			cmd+=m_EndX + ",";
			cmd+=m_EndY + ",";
			cmd+=m_Pixel + ",";
			cmd+=m_mm + ",";
			cmd+=m_Inch + ",";
			cmd+=m_AreaRect_Pixel + ",";
			cmd+=m_AreaRect_MM + ",";
			cmd+=m_AreaRect_Inch + ",";
			cmd+=m_AreaCir_Pixel + ",";
			cmd+=m_AreaCir_MM + ",";
			cmd+=m_AreaCir_Inch + ",";
			COleDateTime current;
			current = COleDateTime::GetCurrentTime();
			cmd+="'" + current.Format("%Y-%m-%d %H:%M:%S") + "',";
			cmd+="'" + saveDlg.m_desc + "')";
			
			//插入记录
			m_pConnection->Execute((_bstr_t)cmd,NULL,adCmdText);
			
			//重置标志为非新数据
			IsNew=FALSE;

			//用项目名称设置标题
			CString topic;
			topic=saveDlg.m_name;
			topic+=" - 电子尺";
			theApp.m_pMainWnd->SetWindowText(topic);
		}
		catch(_com_error e)///捕捉异常
		{
			CString errormessage;
			errormessage.Format("错误!\r\n错误信息:%s",e.ErrorMessage());
			AfxMessageBox(errormessage);///显示错误信息
		}
	}
}

void CRulerView::OnFileOpen() 
{
	// TODO: Add your command handler code here
	if(IsNew)
	{
		int ret;
		ret=AfxMessageBox("测量数据已经改变\n想保存吗?",MB_YESNOCANCEL);
		if(ret==IDCANCEL)
			return;
		if(ret==IDYES)
		{
			if(m_ID==0)
				OnFileSaveAs();
			else
				OnFileSave();
		}
	}

	CListDlg listDlg(m_pConnection);
	if(listDlg.DoModal()==IDOK)
	{
		//生成SQL命令
		CString cmd;
		cmd="Select * from measure where ID=";
		cmd+=listDlg.m_CurrentSel;
		//打开记录集
		m_pRs->Open((_bstr_t)cmd,
					_variant_t((IDispatch *)m_pConnection,true),
					adOpenDynamic,
					adLockOptimistic,
					adCmdText);

		//申明变量
		_variant_t vID,vName;
		_variant_t vStartX, vStartY, vEndX, vEndY;
		_variant_t vLenPixel, vLenMM, vLenInch;
		_variant_t vAreaRectPixel, vAreaRectMM, vAreaRectInch;
		_variant_t vAreaCirPixel, vAreaCirMM, vAreaCirInch;

		//获取数据
		vID=m_pRs->GetCollect("ID");
		vName=m_pRs->GetCollect("Name");
		
		vStartX=m_pRs->GetCollect("StartX");
		vStartY=m_pRs->GetCollect("StartY");
		vEndX=m_pRs->GetCollect("EndX");
		vEndY=m_pRs->GetCollect("EndY");

		vLenPixel=m_pRs->GetCollect("LenPixel");
		vLenMM=m_pRs->GetCollect("LenMM");
		vLenInch=m_pRs->GetCollect("LenInch");

		vAreaRectPixel=m_pRs->GetCollect("AreaRectPixel");
		vAreaRectMM=m_pRs->GetCollect("AreaRectMM");
		vAreaRectInch=m_pRs->GetCollect("AreaRectInch");

		vAreaCirPixel=m_pRs->GetCollect("AreaCirPixel");
		vAreaCirMM=m_pRs->GetCollect("AreaCirMM");
		vAreaCirInch=m_pRs->GetCollect("AreaCirInch");

		m_pRs->Close();

		//填写控件
		m_ID=vID.intVal;
		m_StartX=(LPCTSTR)(_bstr_t)vStartX;
		m_StartY=(LPCTSTR)(_bstr_t)vStartY;
		m_EndX=(LPCTSTR)(_bstr_t)vEndX;
		m_EndY=(LPCTSTR)(_bstr_t)vEndY;
		m_Pixel=(LPCTSTR)(_bstr_t)vLenPixel;
		m_mm=(LPCTSTR)(_bstr_t)vLenMM;
		m_cm.Format("%.2f",vLenMM.fltVal/10);
		m_Inch=(LPCTSTR)(_bstr_t)vLenInch;
		m_AreaRect_Pixel=(LPCTSTR)(_bstr_t)vAreaRectPixel;
		m_AreaRect_MM=(LPCTSTR)(_bstr_t)vAreaRectMM;
		m_AreaRect_Inch=(LPCTSTR)(_bstr_t)vAreaRectInch;
		m_AreaCir_Pixel=(LPCTSTR)(_bstr_t)vAreaCirPixel;
		m_AreaCir_MM=(LPCTSTR)(_bstr_t)vAreaCirMM;
		m_AreaCir_Inch=(LPCTSTR)(_bstr_t)vAreaCirInch;

		//刷新控件数据
		UpdateData(FALSE);

		//置标志为非新数据
		IsNew=FALSE;

		//用项目名称设置标题
		CString topic;
		topic=(LPCTSTR)(_bstr_t)vName;
		topic+=" - 电子尺";
		theApp.m_pMainWnd->SetWindowText(topic);
	}
	
}

void CRulerView::OnFileNew() 
{
	// TODO: Add your command handler code here
	if(IsNew)
	{
		int ret;
		ret=AfxMessageBox("测量数据已经改变\n想保存吗?",MB_YESNOCANCEL);
		if(ret==IDCANCEL)
			return;
		if(ret==IDYES)
		{
			if(m_ID==0)
				OnFileSaveAs();
			else
				OnFileSave();
		}
	}

	//初始化控件值
	m_StartX="0";
	m_StartY="0";
	m_EndX="0";
	m_EndY="0";
	m_Pixel="0";
	m_mm="0";
	m_cm="0";
	m_Inch="0";
	m_AreaRect_Pixel="0";
	m_AreaRect_MM="0";
	m_AreaRect_Inch="0";
	m_AreaCir_Pixel="0";
	m_AreaCir_MM="0";
	m_AreaCir_Inch="0";
	m_ID=0;
	IsNew=FALSE;

	//设置标题栏
	theApp.m_pMainWnd->SetWindowText("新测量 - 电子尺");


	UpdateData(FALSE);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -