📄 drawvw.cpp
字号:
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 + -