📄 rulerview.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 + -