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

📄 drawvw.cpp

📁 连接oracle
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		PasteEmbedded(*pDataObject, point);

	// update the document and views
	GetDocument()->SetModifiedFlag();
	GetDocument()->UpdateAllViews(NULL, 0, NULL);      // including this view

	return TRUE;
}

void CDrawView::OnDragLeave()
{
	CClientDC dc(this);
	if (m_prevDropEffect != DROPEFFECT_NONE)
	{
		dc.DrawFocusRect(CRect(m_dragPoint,m_dragSize)); // erase previous focus rect
		m_prevDropEffect = DROPEFFECT_NONE;
	}
}


void CDrawView::OnContextMenu(CWnd* /*pWnd*/, CPoint point) 
{
	// make sure window is active
	GetParentFrame()->ActivateFrame();

	CPoint local = point;
	ScreenToClient(&local);
	ClientToDoc(local);

	CDrawObj* pObj;
	pObj = GetDocument()->ObjectAt(local);
	if(pObj != NULL)
	{
	    if(!IsSelected(pObj))
			Select( pObj, FALSE );			// reselect item if appropriate
		UpdateWindow();

		CMenu menu;
		if (menu.LoadMenu(ID_POPUP_MENU))
		{
			CMenu* pPopup = menu.GetSubMenu(0);
			ASSERT(pPopup != NULL);

			pPopup->InsertMenu(4,MF_BYPOSITION,MF_SEPARATOR);
			//修改:如果是井,才显示添加下级连通图菜单项 2006-11-10 hjq
#if 0
			if (pObj->m_sWellNO.GetLength()>0 && pObj->m_sXCH.GetLength()==0 && pObj->m_cSubList!='Y')
			{
				//pPopup->InsertMenu(4,MF_BYPOSITION,MF_SEPARATOR);
				pPopup->InsertMenu(5,MF_BYPOSITION,ID_MENU_SUBLINK,"下级连通图(&S)");
			}
#endif
			
			pPopup->InsertMenu(5,MF_BYPOSITION,ID_MENU_WELLSORT,"井组成管理(&G)");
			if (pObj->m_sWellNO.GetLength()>0 && pObj->m_sXCH.GetLength()==0 && pObj->m_DShape == ellipse)
			{
				//pPopup->InsertMenu(4,MF_BYPOSITION,MF_SEPARATOR);
				pPopup->InsertMenu(6,MF_BYPOSITION,ID_MENU_SUBLINK,"下级连通图(&S)");
				pPopup->InsertMenu(7,MF_BYPOSITION,ID_MENU_REMOVEWELL,"移除此井(&R)");
			}	
			else if (pObj->m_sWellNO.GetLength()>0 && pObj->m_sXCH.GetLength()>0 )
			{
				pPopup->InsertMenu(6,MF_BYPOSITION,ID_MENU_REMOVELAYER,"移除此油层(&A)");
			}
			pPopup->TrackPopupMenu(TPM_RIGHTBUTTON | TPM_LEFTALIGN,
								   point.x, point.y,
								   AfxGetMainWnd()); // route commands through main window
			
		}
	}
}

void CDrawView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
#if !defined(_MAC)
	if (pInfo->m_bPreview == FALSE)
		((CDrawDoc*)GetDocument())->m_pSummInfo->RecordPrintDate();
#endif
	OnDraw(pDC);
}

void CDrawView::CmdMenuWell1() 
{
	// TODO: Add your command handler code here
	m_pDlg = new CListWell();
    m_pDlg->Create(IDD_LISTWELL, this);
	m_pDlg->ShowWindow(SW_NORMAL);
}

//DEL void CDrawView::CmdMenuWell2() 
//DEL {
//DEL 	// TODO: Add your command handler code here
//DEL 	m_pDlgSWS = new CListWellPM();
//DEL     m_pDlgSWS->Create(IDD_LISTWELL_PM, this);
//DEL 	m_pDlgSWS->ShowWindow(SW_NORMAL);
//DEL }

//显示下级连通图,就是在主井已经显示,然后将其相连的井的下级连通图再显示出来
void CDrawView::CmdMenuDispSubLink()
{
	//MessageBox("lll");
	if (m_selection.GetCount() == 1 &&
			   CDrawTool::c_drawShape == selection)
	{
		CDrawObj* pObj = m_selection.GetHead();
		if (pObj->m_sWellNO.GetLength()>0 && pObj->m_sXCH.GetLength()==0)
		{
#if 0
			//更新此井号,以免其再次显示下级连通图
			int icnt = m_ArrayWell.GetSize();
			for(int i=0; i<icnt; i++)
			{
				CString strXCH,strLink2xch;
				CDWell* cwell = (CDWell *)m_ArrayWell[i];
				if (cwell->sWellNO.Compare(pObj->m_sWellNO) == 0 )
				{
					cwell->cSubList = 'Y';
//					UpdateWellLayerInfo(cwell); 
					break;
				}
			}
			SetupWellLink(pObj->m_sWellNO);
#endif
			
			//打开数据库连接
			m_AdoConn.OnInitADOConn();
			CString strPreWellNOs;
			CString strNewWellNOs = RetrievalSingleInfo(pObj->m_sWellNO);
			
			int icnt = m_ArrayWell.GetSize();
			
			for(int i=0; i<icnt ; i++)
			{
				CDWell* cwell = (CDWell *)m_ArrayWell[i];
				if(strNewWellNOs.Find(cwell->sWellNO) == -1)
				{
					strNewWellNOs += ",'" + cwell->sWellNO + "'";
				}
				strPreWellNOs += "'" + cwell->sWellNO + "'";
			}
			
			//GetDocument()->RemoveAll();	
			//m_ArrayWell.RemoveAll();
			RemoveAllObject('Y');
			m_OffsetX = 0;
			m_OffsetY = 0;
			
//			SetWellBaseArray(&strNewWellNOs,'Y',strPreWellNOs);
//			SetWellLayerArray(&strNewWellNOs,'Y',strPreWellNOs);
//			SetWellFaultArray(&strNewWellNOs);
//			SetFreeMapRange(&strNewWellNOs,'Y');
			//开始划图
			DrawFreeWellLink('2');
			
			//断开与数据库的连接 
			m_AdoConn.ExitConnect();
		}
	}
}

//显示选择井的连通图
void CDrawView::CmdMenuLinkstruct() 
{
	// TODO: Add your command handler code here
	try
	{
		if (m_pDlg == NULL) 
		{
			//得到主窗口,找到第一页,转换成区块选择对象
			CMainFrame *pWnd = (CMainFrame*)AfxGetMainWnd();
			CCoolTabCtrl::CPageItem *pItem = (CCoolTabCtrl::CPageItem *)pWnd->m_TabWell.GetPageItem(0);
			m_pDlg = (CListWell *)pItem->m_pWnd;
			if (m_pDlg == NULL) return;
		}
		//GetDocument()->RemoveAll();		//点连通图时,将已经画的全部清空,但下级连通图不能清空
		//m_ArrayWell.RemoveAll();
		ArrayDestory();
		RemoveAllObject('Y');
		int i = m_pDlg->m_listwells.GetCurSel();
		if (i == -1 ) return;			//如果没有选择井,返回;选择了井,就进行下面的操作
		//如果区块变化了,需要重新计算范围
//		CString strQKDY = "";
//		m_pDlg->m_listqkdy.GetText(m_pDlg->m_listqkdy.GetCurSel(),strQKDY);
//		if ("" != strQKDY && strQKDY != m_sQKDY)
//		{
//			SetMapRange(strQKDY);
//			m_sQKDY = strQKDY ;
//		}
		CRect rect;
		GetClientRect(rect);
		m_OffsetX = 0;
		m_OffsetY = 0;
		m_CanvasHeight	= rect.Height() ;//* g_fZoom;
		m_CanvasWidth	= rect.Width();//  * g_fZoom;
		
		if(m_CanvasHeight<600) m_CanvasHeight = 600;
		if(m_CanvasWidth<800) m_CanvasWidth	= 800;
		if(m_NewWidth!= m_CanvasWidth || m_NewHeight !=m_CanvasHeight)
		{
			CSize sizeTotal;
			sizeTotal.cx = m_CanvasWidth;//+iMoveX+iX2+120;
			sizeTotal.cy = m_CanvasHeight;//+iMoveY+iY2+120;
			SetScrollSizes(MM_TEXT, sizeTotal);
		}
		m_NewHeight = m_CanvasHeight;
		m_NewWidth = m_CanvasWidth;
		m_CanvasRect.left = 0;
		m_CanvasRect.top = 0;
		m_CanvasRect.right = m_CanvasWidth;
		m_CanvasRect.bottom = m_CanvasHeight;
		ClientToDoc(m_CanvasRect);	//得到初始设备坐标的范围(客户坐标转换成文档坐标) 
		m_NewRect = m_CanvasRect;

		CString strSelWell ;
		m_pDlg->m_listwells.GetText(i,strSelWell);
		SetupWellLink(strSelWell,'Y');
		
	}
	catch(_com_error &e)
	{
		m_AdoConn.ExitConnect();
		BSTR err=SysAllocString(e.Description ());
		_bstr_t	errorDesc  =err;
		ErrorRaise(errorDesc);
	}
}

//DEL void CDrawView::CmdMenuCutaway() 
//DEL {
//DEL 	// TODO: Add your command handler code here
//DEL 	//画剖面图
//DEL 	if (m_pDlgSWS == NULL) return;
//DEL 	//ASSERT(m_pDlgSWS != NULL);
//DEL 
//DEL 	POSITION pos = m_pDlgSWS->m_ListWells.GetFirstSelectedItemPosition();
//DEL 	if (pos == NULL)
//DEL 	   TRACE0("没有选择一口油井!\n");
//DEL 	else
//DEL 	{
//DEL 		m_ArrayWell.RemoveAll();			//清空前面的数据
//DEL 		while (pos)
//DEL 		{
//DEL 			int nItem = m_pDlgSWS->m_ListWells.GetNextSelectedItem(pos);
//DEL 			CString strWell=m_pDlgSWS->m_ListWells.GetItemText(nItem,0);
//DEL 			SetWellArrayPM(strWell);
//DEL 			//TRACE1("Item %d was selected!\n", nItem);
//DEL 			// you could do your own processing on nItem here
//DEL 		}
//DEL 	}
//DEL 	DrawWellLink('0');
//DEL }
//剖面的区块选择
//DEL BOOL CDrawView::SetWellArrayPM(CString pWellNO)
//DEL {
//DEL 	BOOL ret = TRUE;
//DEL 	try
//DEL 	{
//DEL 		//CString strSelWell ;
//DEL 		_bstr_t vSQL;
//DEL 		CDWell* cwell = NULL ;					//井
//DEL 
//DEL 		_RecordsetPtr m_pRecordset;	//关联井记录集
//DEL 		
//DEL 		if (!pWellNO.IsEmpty() && pWellNO !="")
//DEL 		{
//DEL 			////查询井的基本信息 ,将来有坐标表时,还应该从daa02中将XY等位置信息取出
//DEL 			vSQL = "select * from daa01 where trim(jh)=trim('"+ pWellNO +"') ";
//DEL 			m_AdoConn.OnInitADOConn();
//DEL 			m_pRecordset = m_AdoConn.GetRecordSet(vSQL);
//DEL 
//DEL 			//没有记录
//DEL 			if (m_pRecordset->ADOEOF)
//DEL 				return FALSE;
//DEL 			cwell = new CDWell;
//DEL 			cwell->sWellNO = pWellNO;
//DEL 			//一口井在此表应该只有一条记录信息
//DEL 			cwell->sMQJB = (char *)(_bstr_t)m_pRecordset->GetCollect("MQJB");
//DEL 			//cwell->fX =  
//DEL 			//cwell->fY =  
//DEL 			//添加层
//DEL 			GetDLayer((_bstr_t)pWellNO,"",&cwell->pLayers);
//DEL 				
//DEL 			m_ArrayWell.Add(cwell);
//DEL 			//开始划图
//DEL 			//DrawWell();
//DEL 			ret = TRUE;
//DEL 			//断开与数据库的连接 
//DEL 			m_AdoConn.ExitConnect();
//DEL 		}
//DEL 	}
//DEL 	catch(_com_error &e)
//DEL 	{
//DEL 		ret = FALSE;
//DEL 		m_AdoConn.ExitConnect();
//DEL 		BSTR err=SysAllocString(e.Description ());
//DEL 		_bstr_t	errorDesc  =err;
//DEL 		ErrorRaise(errorDesc);
//DEL 	}
//DEL 	return ret;
//DEL }

BOOL CDrawView::SetWellArray(_bstr_t pJH, _bstr_t pMainJH, _bstr_t pIndex/*, CStringArray *pJoins*/)
{
	BOOL ret = TRUE;
	CDWell* cwell = new CDWell;					//井
	_bstr_t vSQL;
	_RecordsetPtr m_pRecordset;					//层的记录集
	VARIANT va;

	cwell->sWellNO = (LPCSTR)pJH;				//井号
	//cwell->sParentNO = (LPCSTR)pMainJH;
	if (pMainJH.operator !=(L""))
	{
		cwell->m_ArrParentNO.Add((LPCSTR)pMainJH);
		cwell->cSubList = 'N';
	}
	else
	{
		cwell->cSubList = 'Y';
	}
	cwell->cMoveFlag = 'N';
	
	vSQL = "select A.*,B.ZZBX as Y,B.HZBY as X from daa01 A,daa02 B where trim(A.jh) = trim(B.JH) and trim(A.jh)=trim('"+ pJH +"')";
	//m_AdoConn.OnInitADOConn();	//前面不关闭,这里不用再初始化
	m_pRecordset = m_AdoConn.GetRecordSet(vSQL);
	if(!m_pRecordset->ADOEOF)
	{
		cwell->sMQJB = (char *)(_bstr_t)m_pRecordset->GetCollect("MQJB");

		VariantInit(&va); 
		va.vt = VT_DECIMAL;
		va = m_pRecordset->GetCollect("X"); // X 
		VarR4FromDec(&va.decVal,&cwell->fX);

		VariantInit(&va); 
		va.vt = VT_DECIMAL;
		va = m_pRecordset->GetCollect("Y"); // Y 
		VarR4FromDec(&va.decVal,&cwell->fY);

	}
	
//	if (pJoins->GetSize() > 0)
//		cwell->pJoinWellNO.Copy(*pJoins);	//关联的井号
	//添加层
	if (pIndex.operator !=("-2"))
	{
		cwell->cFault = 'N';
		GetDLayer(pJH,pMainJH,&cwell->pLayers);
	}
	else
	{
		cwell->cFault = 'Y';
		GetDLayer(pJH,"",&cwell->pLayers);
	}
	
		
	//if (pIndex.operator != (L"-1"))
	//{
		m_ArrayWell.Add(cwell);
	//}
	//else
	//{
		//m_ArrayWell.RemoveAt(i);
	//	m_ArrayWell.InsertAt(0,cwell);	//主井,就放在第一个
	//}
	//delete cwell;
		//在此来处理断层
	return ret;
}

//修改:前面只判断此层是否连接,现在是如果连接,将主井的小层号(XCH)记录下来,用一别名link2xch 2006-11-3
BOOL CDrawView::GetDLayer(_bstr_t pJH, _bstr_t pMainJH, CPtrArray *retArray)
{
	VARIANT va;
	CDLayer* clayer = NULL;				//层
	_bstr_t vSQL;
	basic_stringstream<wchar_t> strSQLStatement; //转换字符
	_RecordsetPtr m_pRecordset;		//层的记录集

	if (pMainJH.operator ==(L""))
		vSQL = "select A.*,(0) as link2xch from daa05 A where trim(A.jh)=trim('"+ pJH +"') order by A.xcxh ";
	else
	{
		//从表daa05中得到层,从daa052表中得到连接的层,能对应上的就是可以在图上画出来的层 设置标识 1 否则 0 
		//select A.*,(case when B.LTCH1 is null then 1 else 0 end) as ISLink  from daa05 A,(select trim(LTCH1) as LTCH1 from daa052 where jh='8F10-32') B where A.jh='8F10-34' and trim(A.XCH)=trim(B.LTCH1(+))
		strSQLStatement << L" select A.*,(case when B.LTCH1 is null then '' else B.linkxch end) as link2xch from daa05 A,"
				<< L"(select trim(xch) as linkxch,LTCH1 as LTCH1 from daa052 where trim(jh)=trim('"
				<< static_cast<wchar_t*>(pMainJH)
				<< L"')) B "
				<< L" where trim(A.jh)=trim('"
				<< static_cast<wchar_t*>(pJH)
				<< L"') and trim(A.XCH)=trim(B.LTCH1(+))  order by A.xcxh ";
		vSQL = strSQLStatement.str().c_str();
	}		
	

	//m_AdoConn.OnInitADOConn();	//前面不关闭,这里不用再初始化
	m_pRecordset = m_AdoConn.GetRecordSet(vSQL);
	while(!m_pRecordset->ADOEOF)
	{
		clayer = new CDLayer;
		//iType = 1;								//类型

		VariantInit(&va); // 初始化
		va.vt = VT_BSTR;
		va = m_pRecordset->GetCollect("YCZMC"); // 油层组名称 
		clayer->strYCZMC = va.bstrVal; 

		VariantInit(&va); 
		va.vt = VT_BSTR;
		va = m_pRecordset->GetCollect("XCH"); // 小层号 
		clayer->strXCH = va.bstrVal; 

		VariantInit(&va); 
		va.vt = VT_DECIMAL;
		va = m_pRecordset->GetCollect("SYHD"); // 沙岩厚度 
		VarR4FromDec(&va.decVal,&clayer->fSYHD);
		
		VariantInit(&va); 
		va.vt = VT_DECIMAL;
		va = m_pRecordset->GetCollect("YXHD"); // 有效厚度 
		VarR4FromDec(&va.decVal,&clayer->fYXHD);

		VariantInit(&va); 
		va.vt = VT_DECIMAL;
		va = m_pRecordset->GetCollect("STL");	// 渗透率 
		VarR4FromDec(&va.decVal,&clayer->fSTL);

		VariantInit(&va); 
		va.vt = VT_BSTR;
		va = m_pRecordset->GetCollect("DCJSJG"); // 电测解释结果 
		char* tmp = (char *)va.bstrVal; 

		clayer->cDCJSJG = tmp[0]; 

		if (pMainJH.operator !=(L""))
		{
			//修改:2006-11-14 主井及链接的层,第一级连通图与子级都需要检查一下
			VariantInit(&va); 
			va.vt = VT_BSTR;
			va = m_pRecordset->GetCollect("link2xch"); // 链接主井层号 有字符 表链接目标层,空字符表没链接
			//clayer->strLink2xch = va.bstrVal; 
			if (VT_NULL != va.vt)
			{
				tagLayerLink2xch *tagLink2xch = new tagLayerLink2xch;
				tagLink2xch->sWellNO = (LPSTR)pMainJH;				//主(父)井
				tagLink2xch->sLayerNO = va.bstrVal;			//主井中的层
				clayer->m_ArrLink2xch.Add(tagLink2xch);		//将链接到的主井信息存入层中
			}
		}
		retArray->Add(clayer);

		m_pRecordset->MoveNext();
	}
	return TRUE;
}
//此方法是前面用于测试的,测试画几种形状的图形
//DEL void CDrawView::CmdMenuDrawrect() 
//DEL {
//DEL 	// TODO: Add your command handler code here
//DEL 	int i=1;	//调试用的例子 0画矩形,1画多边形
//DEL 	if (i==1)
//DEL 	{
//DEL 		CRect client;
//DEL 		client.left=-324;
//DEL 		client.top=553;
//DEL 		client.right=88;
//DEL 		client.bottom=407;
//DEL 		CDrawRect* pObj = new CDrawRect(fault_line,client,"");
//DEL 		GetDocument()->Add(pObj);
//DEL 		Select(pObj);
//DEL 		return;
//DEL 	}
//DEL 	if (i==4)
//DEL 	{

⌨️ 快捷键说明

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