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

📄 sdbview.cpp

📁 用Visual C++实现关系数据库的图形编程.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		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 + -