📄 sdbview.cpp
字号:
if(m_nStep!=0)
{
dc.SetROP2(R2_NOTXORPEN); //设置线条模式
if(m_nEndX!=0)
{ //如果不是第一次画线,则擦除上一条线
dc.MoveTo(m_nStartX,m_nStartY);
dc.LineTo(m_nEndX,m_nEndY);
}
//更新终点坐标
m_nEndX=point.x;
m_nEndY=point.y;
//画出新的线段
dc.MoveTo(m_nStartX,m_nStartY);
dc.LineTo(m_nEndX,m_nEndY);
}
}
if(flag==6)
{
if(m_nStep==2)
{
dc.SetROP2(R2_NOTXORPEN); //设置线条模式
if(m_nEndX!=0)
{ //如果不是第一次画线,则擦除上一条线
dc.Arc(m_nStartX,m_nStartY,m_nMidX,m_nMidY,point.x,point.y,0,0);
}
//更新终点坐标
m_nEndX=point.x;
m_nEndY=point.y;
//画出新的线段
dc.Arc(m_nStartX,m_nStartY,m_nMidX,m_nMidY,m_nEndX,m_nEndY,0,0);
}
}
if(flag==7) //画矩形
{
if(m_nStep!=0)
{
dc.SetROP2(R2_NOTXORPEN); //设置线条模式
//如果不是第一次画线,则擦除上一条线
// dc.MoveTo(m_nStartX,m_nStartY);
// dc.LineTo(m_nEndX,m_nEndY);
dc.Rectangle(m_nStartX,m_nStartY,m_nEndX,m_nEndY);
//更新终点坐标
m_nEndX=point.x;
m_nEndY=point.y;
//画出新的线段
dc.Rectangle(m_nStartX,m_nStartY,m_nEndX,m_nEndY);
}
}
if(flag==8)
{
if(m_nStep!=0)
{
dc.SetROP2(R2_NOTXORPEN); //设置线条模式
if(m_nEndX!=0)
{ //如果不是第一次画线,则擦除上一条线
dc.MoveTo(m_nStartX,m_nStartY);
dc.LineTo(m_nEndX,m_nEndY);
}
//更新终点坐标
m_nEndX=point.x;
m_nEndY=point.y;
//画出新的线段
dc.MoveTo(m_nStartX,m_nStartY);
dc.LineTo(m_nEndX,m_nEndY);
}
}
if(flag==11)
{
if(m_nStep!=0)
{
dc.SetROP2(R2_NOTXORPEN); //设置线条模式
if(m_nEndX!=0)
{ //如果不是第一次画线,则擦除上一条线
dc.MoveTo(m_nStartX,m_nStartY);
dc.LineTo(m_nEndX,m_nEndY);
}
//更新终点坐标
m_nEndX=point.x;
m_nEndY=point.y;
//画出新的线段
dc.MoveTo(m_nStartX,m_nStartY);
dc.LineTo(m_nEndX,m_nEndY);
flag=10;
}
}
CView::OnMouseMove(nFlags, point);
}
void CSDBView::OnPointCircle() //圆点元
{
// TODO: Add your command handler code here
flag=1;
}
void CSDBView::OnPointRectangle() //矩形点元
{
// TODO: Add your command handler code here
flag=2;
}
void CSDBView::OnPointTriangle() //三角形点元
{
// TODO: Add your command handler code here
flag=3;
}
void CSDBView::OnSetColor() //得到颜色
{
// TODO: Add your command handler code here
CColorDialog dlg;
if(dlg.DoModal()==IDOK)
{
m_Color=dlg.GetColor();
}
}
void CSDBView::OnReadDB() //从数据库中读取点元数据
{
// TODO: Add your command handler code here
m_OpenDB=true;
CDC *pDC=GetDC();
_bstr_t strSQL; //sql命令
_bstr_t bstrSQL;
// CString strFieldValue = _T(""); //字段内容
// _variant_t FieldValue;
_RecordsetPtr m_pRecordset,m_Recond1,m_Recond2;
strSQL= "SELECT * FROM Point"; //读取点表
bstrSQL="SELECT * From PointEntity"; //读取点元表
m_Recond1=m_ado.GetRecordSet(bstrSQL);
CString SQL;
while (m_Recond1->adoEOF == 0)
{
CString pp((LPCTSTR)(_bstr_t)m_Recond1->GetCollect("PNum")); //点号
CString t((LPCTSTR)(_bstr_t)m_Recond1->GetCollect("Type")); //点元类型
CString c((LPCTSTR)(_bstr_t)m_Recond1->GetCollect("Color")); //点元颜色
int p=atoi(pp); //将string型转换为int型
int type=atoi(t);
COLORREF color=atoi(c);
CPen newpen(PS_SOLID,1,color); //构造画笔
CPen *pOldPen=pDC->SelectObject(&newpen); //将画笔选入设备环境
SQL="SELECT * FROM Point WHERE ID=";
SQL+=pp;
m_Recond2=m_ado.GetRecordSet((_bstr_t)SQL);
CString xx((LPCTSTR)(_bstr_t)m_Recond2->GetCollect("X")); //点的x坐标
CString yy((LPCTSTR)(_bstr_t)m_Recond2->GetCollect("Y")); //点的Y坐标
int x=atoi(xx);
int y=atoi(yy);
if(type==1) //画圆形点元
{
pDC->Ellipse(x,y,x+10,y+10);
}
if(type==2) //画矩形点元
{
pDC->Rectangle(x-5,y-5,x+5,y+5);
}
if(type==3) //画三角形点元
{
POINT polygon[3]={{x+5,y+8},{x,y},{x+10,y}};
pDC->Polygon(polygon,3);
}
pDC->SelectObject(pOldPen);
m_Recond1->MoveNext();
}
ReleaseDC(pDC);
}
void CSDBView::OnDelPoint() //删除点元
{
// TODO: Add your command handler code here
m_Drag=1;
}
void CSDBView::OnDrawLine() //画直线
{
// TODO: Add your command handler code here
flag=5;
}
void CSDBView::OnLineCircle() //画圆线
{
// TODO: Add your command handler code here
flag=6;
}
void CSDBView::OnLineRectangle() //画矩形线
{
// TODO: Add your command handler code here
flag=7;
}
void CSDBView::OnPloyline() //画折线
{
// TODO: Add your command handler code here
flag=8;
}
void CSDBView::OnReadLineEntity() //从数据库中读取线元
{
// TODO: Add your command handler code here
CDC *pDC=GetDC();
pDC->SetROP2(R2_NOTXORPEN);
_bstr_t strSQL; //sql命令
_bstr_t bstrSQL;
// CString strFieldValue = _T(""); //字段内容
// _variant_t FieldValue;
_RecordsetPtr m_pRecordset,m_Recond1,m_Recond2;
strSQL= "SELECT * FROM Point"; //读取点表
bstrSQL="SELECT * From Line"; //读取线元表
m_Recond1=m_ado.GetRecordSet(bstrSQL);
CString SQL,SQL1;
while (m_Recond1->adoEOF == 0)
{
CString nn1((LPCTSTR)(_bstr_t)m_Recond1->GetCollect("pBNO")); //线起点号
CString nn2((LPCTSTR)(_bstr_t)m_Recond1->GetCollect("pENO")); //线终点号
CString cc((LPCTSTR)(_bstr_t)m_Recond1->GetCollect("Color")); //线元颜色
CString tt((LPCTSTR)(_bstr_t)m_Recond1->GetCollect("Type")); //线元类型
//将string型转换为int型
int n1=atoi(nn1);
int n2=atoi(nn2);
COLORREF color=atoi(cc);
int type=atoi(tt);
CPen newpen(PS_SOLID,1,color); //构造画笔
CPen *pOldPen=pDC->SelectObject(&newpen); //将画笔选入设备环境
/* SQL="SELECT * FROM Point WHERE ID=";
SQL+=nn1;
m_Recond2=m_ado.GetRecordSet((_bstr_t)SQL);
CString xx((LPCTSTR)(_bstr_t)m_Recond2->GetCollect("X")); //点的x坐标
CString yy((LPCTSTR)(_bstr_t)m_Recond2->GetCollect("Y")); //点的Y坐标
int x1=atoi(xx);
int y1=atoi(yy);
SQL1="SELECT * FROM Point WHERE ID=";
SQL1+=nn2;
m_Recond2=m_ado.GetRecordSet((_bstr_t)SQL1);
CString x((LPCTSTR)(_bstr_t)m_Recond2->GetCollect("X")); //点的x坐标
CString y((LPCTSTR)(_bstr_t)m_Recond2->GetCollect("Y")); //点的Y坐标
int x2=atoi(x);
int y2=atoi(y);
*/
SQL1="SELECT * FROM Point WHERE ID>=";
SQL1+=nn1;
SQL1+=" and ID<=";
SQL1+=nn2;
m_Recond2=m_ado.GetRecordSet((_bstr_t)SQL1);
int k=0;
while(m_Recond2->adoEOF==0){
CString x((LPCTSTR)(_bstr_t)m_Recond2->GetCollect("X")); //点的x坐标
CString y((LPCTSTR)(_bstr_t)m_Recond2->GetCollect("Y")); //点的Y坐标
X[k]=atoi(x);
Y[k]=atoi(y);
k++;
m_Recond2->MoveNext();
}
if(type==5) //画直线
{
pDC->MoveTo(X[0],Y[0]);
pDC->LineTo(X[1],Y[1]);
}
if(type==6) //画圆线
{
// pDC->Arc(x1,y1,x2,y2,0,0,0,0);
pDC->Arc(X[0],Y[0],X[1],Y[1],0,0,0,0);
}
if(type==7) //画矩形线
{
pDC->Rectangle(X[0],Y[0],X[1],Y[1]);
}
if(type==8) //画矩形线
{
// POINT polygon[n2-n1+1]={};
pDC->Rectangle(X[0],Y[0],X[1],Y[1]);
}
pDC->SelectObject(pOldPen);
m_Recond1->MoveNext();
}
ReleaseDC(pDC);
}
void CSDBView::OnEditPointentity() //编辑点元
{
// TODO: Add your command handler code here
m_Edit=1;
// flag=10;
}
void CSDBView::OnDelLine() //删除线元
{
// TODO: Add your command handler code here
m_Drag=2;
}
//删除类型标志,1,2,3分别代表圆形,三角形,矩形点元,5,6,7代表直线,弧线,矩形线元
void CSDBView::OnDelCircle()
{
// TODO: Add your command handler code here
m_Del=1;
sp.DelClass(m_Del);
Invalidate(TRUE); //更新界面
m_Refesh++;
}
void CSDBView::OnDelTriangle()
{
// TODO: Add your command handler code here
m_Del=3;
sp.DelClass(m_Del);
Invalidate(TRUE); //更新界面
m_Refesh++;
}
void CSDBView::OnDelRect() //删除矩形点元
{
// TODO: Add your command handler code here
m_Del=2;
sp.DelClass(m_Del);
Invalidate(TRUE); //更新界面
m_Refesh++;
}
void CSDBView::OnDelLineEntity()
{
// TODO: Add your command handler code here
m_Del=5;
sp.DelClass(m_Del);
Invalidate(TRUE); //更新界面
m_Refesh++;
}
void CSDBView::OnDelArc()
{
// TODO: Add your command handler code here
m_Del=6;
sp.DelClass(m_Del);
Invalidate(TRUE); //更新界面
m_Refesh++;
}
void CSDBView::OnDelRectline()
{
// TODO: Add your command handler code here
m_Del=7;
sp.DelClass(m_Del);
Invalidate(TRUE); //更新界面
m_Refesh++;
}
void CSDBView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_Stop=true;
sp.InsertIineEntity(flag,m_Color);
CView::OnRButtonDown(nFlags, point);
}
void CSDBView::OnMakearea()
{
// TODO: Add your command handler code here
flag=10;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -