?? 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 }
//顯示下級連通圖,就是在主井已經(jīng)顯示,然后將其相連的井的下級連通圖再顯示出來
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
//打開數(shù)據(jù)庫連接
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');
//斷開與數(shù)據(jù)庫的連接
m_AdoConn.ExitConnect();
}
}
}
//顯示選擇井的連通圖
void CDrawView::CmdMenuLinkstruct()
{
// TODO: Add your command handler code here
try
{
if (m_pDlg == NULL)
{
//得到主窗口,找到第一頁,轉(zhuǎn)換成區(qū)塊選擇對象
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(); //點連通圖時,將已經(jīng)畫的全部清空,但下級連通圖不能清空
//m_ArrayWell.RemoveAll();
ArrayDestory();
RemoveAllObject('Y');
int i = m_pDlg->m_listwells.GetCurSel();
if (i == -1 ) return; //如果沒有選擇井,返回;選擇了井,就進行下面的操作
//如果區(qū)塊變化了,需要重新計算范圍
// 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); //得到初始設(shè)備坐標(biāo)的范圍(客戶坐標(biāo)轉(zhuǎn)換成文檔坐標(biāo))
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(); //清空前面的數(shù)據(jù)
//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 }
//剖面的區(qū)塊選擇
//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; //關(guān)聯(lián)井記錄集
//DEL
//DEL if (!pWellNO.IsEmpty() && pWellNO !="")
//DEL {
//DEL ////查詢井的基本信息 ,將來有坐標(biāo)表時,還應(yīng)該從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 //一口井在此表應(yīng)該只有一條記錄信息
//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 //斷開與數(shù)據(jù)庫的連接
//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(); //前面不關(guān)閉,這里不用再初始化
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); //關(guān)聯(lián)的井號
//添加層
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;
}
//修改:前面只判斷此層是否連接,現(xiàn)在是如果連接,將主井的小層號(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; //轉(zhuǎn)換字符
_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表中得到連接的層,能對應(yīng)上的就是可以在圖上畫出來的層 設(shè)置標(biāo)識 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(); //前面不關(guān)閉,這里不用再初始化
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"); // 電測解釋結(jié)果
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"); // 鏈接主井層號 有字符 表鏈接目標(biāo)層,空字符表沒鏈接
//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; //調(diào)試用的例子 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 {
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -