📄 sdbview.cpp
字号:
// SDBView.cpp : implementation of the CSDBView class
//
#include "stdafx.h"
#include "SDB.h"
#include "SDBDoc.h"
#include "SDBView.h"
#include "ADOSQL.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSDBView
IMPLEMENT_DYNCREATE(CSDBView, CView)
BEGIN_MESSAGE_MAP(CSDBView, CView)
//{{AFX_MSG_MAP(CSDBView)
ON_WM_LBUTTONDOWN()
ON_COMMAND(ID_POINT_CIRCLE, OnPointCircle)
ON_COMMAND(ID_POINT_RECTANGLE, OnPointRectangle)
ON_COMMAND(ID_POINT_TRIANGLE, OnPointTriangle)
ON_COMMAND(ID_COLOR, OnSetColor)
ON_COMMAND(ID_READ_DB, OnReadDB)
ON_COMMAND(ID_DEL_POINT, OnDelPoint)
ON_COMMAND(ID_LINE_LINE, OnDrawLine)
ON_COMMAND(ID_LINE_CIRCLE, OnLineCircle)
ON_COMMAND(ID_LINE_RECTANGLE, OnLineRectangle)
ON_WM_MOUSEMOVE()
ON_COMMAND(ID_READ_LINEENTITY, OnReadLineEntity)
ON_COMMAND(ID_EDIT_POINTENTITY, OnEditPointentity)
ON_COMMAND(ID_DEL_LINE, OnDelLine)
ON_COMMAND(ID_DEL_CIRCLE, OnDelCircle)
ON_COMMAND(ID_DEL_LINEENTITY, OnDelLineEntity)
ON_COMMAND(ID_DEL_RECTLINE, OnDelRectline)
ON_COMMAND(ID_DEL_ARC, OnDelArc)
ON_COMMAND(ID_DEL_RECT, OnDelRect)
ON_COMMAND(ID_DEL_TRIANGLE, OnDelTriangle)
ON_COMMAND(ID_PLOYLINE, OnPloyline)
ON_WM_RBUTTONDOWN()
ON_COMMAND(ID_MAKEAREA, OnMakearea)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSDBView construction/destruction
CSDBView::CSDBView()
{
// TODO: add construction code here
flag=0; //类型标志
m_Color=RGB(0,0,0);
m_OpenDB=false;
m_Drag=0;
m_nStartX=m_nStartY=m_nMidX=m_nMidY=m_nEndX=m_nEndY=0;
m_nStep=0;
m_Edit=0; //编辑标志
m_Refesh=0;
m_Del=0;
m_Stop=false;
}
CSDBView::~CSDBView()
{
}
BOOL CSDBView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CSDBView drawing
void CSDBView::OnDraw(CDC* pDC)
{
CSDBDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if(m_Drag==1&&m_Refesh>0) OnReadDB();
if(m_Del>0&&m_Del<4&&m_Refesh>0) OnReadDB();
if(m_Del>4&&m_Del<10&&m_Refesh>0) OnReadLineEntity();
}
/////////////////////////////////////////////////////////////////////////////
// CSDBView printing
BOOL CSDBView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CSDBView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CSDBView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CSDBView diagnostics
#ifdef _DEBUG
void CSDBView::AssertValid() const
{
CView::AssertValid();
}
void CSDBView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CSDBDoc* CSDBView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSDBDoc)));
return (CSDBDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CSDBView message handlers
void CSDBView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDC *pDC=GetDC();
CPen newpen(PS_SOLID,1,m_Color); //构造画笔
CPen *pOldPen=pDC->SelectObject(&newpen); //将画笔选入设备环境
//////////////////////////////点元/////////////////////////////////
if(flag>0&&flag<4)
{
if(flag==1) //数据库中type为1表示为圆形点元
pDC->Ellipse(point.x,point.y,point.x+10,point.y+10);
if(flag==2) //数据库中type为2表示为矩形点元
pDC->Rectangle(point.x-5,point.y-5,point.x+5,point.y+5);
if(flag==3) //数据库中type为3表示为三角形点元
{
POINT polygon[3]={{point.x+5,point.y+8},{point.x,point.y},{point.x+10,point.y}};
pDC->Polygon(polygon,3);
}
sp.InsertPoint(point,flag); //插入点坐标
sp.InsertPointEntity(flag,m_Color); //插入点元
}
//////////////////////////////线元/////////////////////////////////
else if(flag>4&&flag<10)
{
if(flag==5) //画直线
{
if(m_nStep==0)
{
m_nStartX=point.x;
m_nStartY=point.y;
m_nStep++; //操作步数加1
sp.InsertPoint(point,flag); //插入点坐标
SetCapture(); //捕做鼠标
}
else
{
pDC->MoveTo(m_nStartX,m_nStartY);
pDC->LineTo(point);
m_nStep=0;
m_nStartX=m_nStartY=0;
m_nEndX=m_nStartX=0;
::ReleaseCapture();
sp.InsertPoint(point,flag); //插入点坐标
sp.InsertIineEntity(flag,m_Color);
}
}
if(flag==6) //画弧线
{
if(m_nStep==0)
{
m_nStartX=point.x;
m_nStartY=point.y;
m_nStep++; //操作步数加1
sp.InsertPoint(point,flag); //插入点坐标
SetCapture(); //捕做鼠标
}
else
{
pDC->Arc(m_nStartX,m_nStartY,point.x,point.y,0,0,0,0);
m_nStep=0;
m_nStartX=m_nStartY=0;
m_nEndX=m_nStartX=0;
::ReleaseCapture();
sp.InsertPoint(point,flag); //插入点坐标
sp.InsertIineEntity(flag,m_Color); //插入点元
}
/* else if(m_nStep==1)
{
m_nMidX=point.x;
m_nMidY=point.y;
m_nStep++; //操作步数加1
sp.InsertPoint(point); //插入点坐标
SetCapture(); //捕做鼠标
}
else
{
pDC->Arc(m_nStartX,m_nStartY,m_nMidX,m_nMidY,point.x,point.y,0,0);
m_nStep=0;
m_nStartX=m_nStartY=0;
m_nMidX=m_nMidY=0;
m_nEndX=m_nStartX=0;
::ReleaseCapture();
sp.InsertPoint(point); //插入点坐标
sp.InsertIineEntity(flag,m_Color); //插入点元
}
*/}
if(flag==7) //画矩形
{
pDC->SetROP2(R2_NOTXORPEN);
if(m_nStep==0)
{
m_nStartX=point.x;
m_nStartY=point.y;
m_nEndX=point.x;
m_nEndY=point.y;
m_nStep++; //操作步数加1
sp.InsertPoint(point,flag); //插入点坐标
SetCapture(); //捕做鼠标
}
else
{
// pDC->Rectangle(m_nStartX,m_nStartY,point.x,point.y);
m_nStep=0;
m_nStartX=m_nStartY=0;
m_nEndX=m_nStartX=0;
::ReleaseCapture();
sp.InsertPoint(point,flag); //插入点坐标
sp.InsertIineEntity(flag,m_Color);
}
}
if(flag==8)
{
if(m_nStep==0)
{
m_nStartX=point.x;
m_nStartY=point.y;
m_nStep++; //操作步数加1
sp.InsertPoint(point,flag); //插入点坐标
SetCapture(); //捕做鼠标
}
else
{
if(m_nStep>10)
{
m_Stop=true;
MessageBox("输入的点数不能超过10!");
}
if(m_Stop)
{
::ReleaseCapture();
m_nStep=0;
m_nStartX=m_nStartY=0;
m_nEndX=m_nStartX=0;
m_Stop=false;
}
else
{
pDC->MoveTo(m_nStartX,m_nStartY);
pDC->LineTo(point);
m_nStep++;
m_nStartX=point.x;
m_nStartY=point.y;
// m_nStartX=m_nStartY=0;
m_nEndX=m_nEndY=0;
}
sp.InsertPoint(point,flag); //插入点坐标
}
}
}
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
else
{
if(m_Drag==1) //删除点元
{
for(int i=point.x-5;i<=point.x+5;i++)
for(int j=point.y-5;j<=point.y+5;j++)
{
sp.DelPointEntity(i,j);
Invalidate(TRUE); //更新界面
m_Refesh++;
}
}
if(m_Edit==1) //编辑点元
{
for(int i=point.x-5;i<=point.x+5;i++)
for(int j=point.y-5;j<=point.y+5;j++)
{
if(int m=sp.CheckPoint(i,j)>0) //如果点被选中
{
itoa(m,s,10);
int x1;
CString sql;
sql="SELECT * FROM PointEntity WHERE PNum=";
sql+=s;
m_Rst=m_ado.GetRecordSet((_bstr_t)sql);
while(m_Rst->adoEOF==0)
{
CString xx((LPCTSTR)(_bstr_t)m_Rst->GetCollect("Type"));
// varValue=m_Recond->GetFields()->GetItem("ID")->Value;
x1=atoi(xx);
m_Rst->MoveNext();
}
// CString yy((LPCTSTR)(_bstr_t)m_Rst->GetCollect("Color"));
// int x1=atoi(xx);
// int y1=atoi(yy);
CPen newpen2(PS_SOLID,1,RGB(0,255,255)); //构造画笔
CPen *pOldPen=pDC->SelectObject(&newpen2); //将画笔选入设备环境
if(x1==1) //画圆形点元
{
pDC->Ellipse(i,j,i+10,j+10);
}
if(x1==2) //画矩形点元
{
pDC->Rectangle(i-5,j-5,i+5,j+5);
}
if(x1==3) //画三角形点元
{
POINT polygon[3]={{i+5,j+8},{i,j},{i+10,j}};
pDC->Polygon(polygon,3);
}
// m_nStartX=point.x;
// m_nStartY=point.y;
m_nStep++;
flag=11;
}
// sp.EditPointEntity(i,j);
// m_Refesh++;
}
if(flag==10)
{
sp.EditPointEntity(m_nStartX,m_nStartY,point.x,point.y,m_Color);
Invalidate(TRUE); //更新界面
m_Refesh++;
}
}
}
pDC->SelectObject(pOldPen);
ReleaseDC(pDC);
CView::OnLButtonDown(nFlags, point);
}
void CSDBView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDC *pDC=GetDC();
CPen newpen(PS_SOLID,1,m_Color); //构造画笔
CPen *pOldPen=pDC->SelectObject(&newpen); //将画笔选入设备环境
CClientDC dc(this);
if(flag==5)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -