📄 cgeview.cpp
字号:
// m_viewY0 = 10;
dBPoint.x = -1;
dBPoint.y = -1;
m_nhscrollpos = 0;
m_nvscrollpos =0;
m_nMaxX = GetSystemMetrics(SM_CXSCREEN);
m_nMaxY = GetSystemMetrics(SM_CYSCREEN);//??放大时只显示到23
height = 90;//滚动条长度默认值
//m_nMaxY = 2400;
CDC* pDC = GetDC();
//创建显示DC的兼容内存DC
m_MemDC.CreateCompatibleDC(pDC);
// 创建显示内存位图
m_Bitmap.CreateCompatibleBitmap( pDC,
m_nMaxX,
m_nMaxY );
//2400,16000);
// 将设备和位图产生关联
CBitmap* pOldBitmap = m_MemDC.SelectObject( &m_Bitmap );
//m
CClientDC dc(this);
memDC.CreateCompatibleDC(&dc);
CBitmap bm;
bm.CreateCompatibleBitmap(GetDC(), height, 20);
memDC.SelectObject(&bm);
bm.DeleteObject();
//m
m_path[5] = "00_1"; //线
m_path[1] = "10.00";//检波
m_path[4] = "2.0";//偏移
m_path[3] = "2.00";//炮
m_path[2] = "2.0";//源
m_path[0] = "seg2file_1";//源
CTime tNow;
tNow = CTime::GetCurrentTime();
m_path[6] = tNow.Format("%Y/%m/%d");
m_path[7] = tNow.Format("%H:%M");//m46
CCgeDoc* pDoc = GetDocument();
if(pDoc->recentpath)
{
for(int i=0;i<10;i++ )
{
m_path[i] = pDoc->m_pa[i];
}
}
return 0;
}
/* LL
void CCgeView::OnMouseMove(UINT nFlags, CPoint point)
{
CTime tNow(1999,3,10,22,5,0);
CString tds,sNow,sedit_f("66"),m_Mcishus;
CCgeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//数据从Document类到CWiew类
sNow = _T("通道:")+pDoc->s[0]+_T(" 陷波:")+pDoc->s[3];
sNow += _T(" 触发:")+pDoc->s[7]+_T(" 低截:")+pDoc->s[2];
sNow += _T(" 高截:")+pDoc->s[1]+_T(" 间隔:")+pDoc->s[4];
sNow += _T(" 长度:")+pDoc->s[5]+_T(" 延时:")+pDoc->s[6];
pSB->SetPaneText(0,sNow);
m_Mcishus.Format("%d",pDoc->m_Mcishu);
pSB->SetPaneText(1,_T(" 叠加次数:")+m_Mcishus);
tNow = CTime::GetCurrentTime();
tds = tNow.Format("%Y-%m-%d");
//%H:%M:%S %a %m %d %Y");
//pSB->SetPaneText(2,tds);
tds = tNow.Format("%H:%M");
pSB->SetPaneText(2,tds);
m_isdtlKey = true;
//CClientDC* pDC = new CClientDC(this); //注意释放
CRect rect;
GetClientRect(&rect);
CDC* pDC = GetDC();
OnPrepareDC(pDC);
pDC->DPtoLP(&rect);
pDC->DPtoLP(&point);
if(m_drawgdtlKey)
{
int OldROP2_Mode; //move dynamicLine
CPen NewPen;
CPen* pOldPen;
int MaxCy = GetSystemMetrics(SM_CYSCREEN);
NewPen.CreatePen(PS_SOLID,1,m_gdlCr);
pOldPen = pDC->SelectObject(&NewPen);
OldROP2_Mode = pDC->SetROP2(R2_NOTXORPEN); //R2_XORPEN
dEPoint = dBPoint;
pDC->MoveTo (dEPoint.x,0);
pDC->LineTo (dEPoint.x,MaxCy);
// 将变化的部分从位图拷贝到屏幕上//???
rect.left = dEPoint.x+3;
rect.top = 50-2;
rect.right = dEPoint.x+18;//15;
rect.bottom = 50+20;
pDC->BitBlt( rect.left, rect.top,
50,50,
&m_MemDC,
//&pDC,
rect.left, rect.top,
SRCCOPY );
//拷贝到内存
dBPoint = point;
rect.left = dBPoint.x+3;
rect.top = 50-2;
rect.right = dBPoint.x+18;//15;
rect.bottom = 50+20;
m_MemDC.BitBlt(rect.left, rect.top,
//rect.Width(), rect.Height(),
50,50,
pDC,
rect.left, rect.top,
SRCCOPY );
pDC->MoveTo (dBPoint.x,0);
pDC->LineTo (dBPoint.x,MaxCy);
float m_CurrentPoint;
CString mCurrtime;
if(pDoc->fullScreen)
{
m_CurrentPoint = (dBPoint.x - pDoc->m_viewX0) * pDoc->full_timelabel ;}//???pDoc->m_stepX ;} //满屏刻度调整
else
{
//m_CurrentPoint = (((dBPoint.x + m_nhscrollpos - pDoc->m_viewX0) ) *
//pDoc->m_jiange * pDoc->Num_FScishu) ;
m_CurrentPoint = dBPoint.x;
}
//m_CurrentPoint = (((dBPoint.x + m_nhscrollpos - pDoc->m_viewX0) * pDoc->m_stepX ) * pDoc->m_jiange ) / 1000.0;//???-1
mCurrtime.Format("%f", m_CurrentPoint);//得到当前滚动坐标对应的时间
mCurrtime = mCurrtime.Left (6);
pDC->SetBkColor (RGB(0,255,0));
pDC->TextOut (dBPoint.x+5,50,mCurrtime);
pDC->SetBkColor (m_TextBkCr);
pDC->SetROP2(OldROP2_Mode); //二元光栅
pDC->SelectObject(pOldPen);
}
CString s;
pDLGBAR->GetDlgItem(IDC_DLGBAREDIT1)->GetWindowText(s);
CScrollView::OnMouseMove(nFlags, point);
ReleaseDC( pDC);
//m_MemDC.DeleteDC();
}*/
// LL
void CCgeView::OnMouseMove(UINT nFlags, CPoint point)
{
CTime tNow = CTime::GetCurrentTime();
CCgeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CString string;
//数据从Document类到CWiew类
string = _T("通道:")+pDoc->s[0]+_T(" 陷波:")+pDoc->s[3];
string += _T(" 触发:")+pDoc->s[7]+_T(" 低截:")+pDoc->s[2];
string += _T(" 高截:")+pDoc->s[1]+_T(" 间隔:")+pDoc->s[4];
pDoc->s[6].Format("%d",atoi(pDoc->s[6]));
string += _T(" 长度:")+pDoc->s[5]+_T(" 延时:")+pDoc->s[6];
pSB->SetPaneText(0,string);
string.Format("%d",pDoc->m_Mcishu);
pSB->SetPaneText(1,_T(" 叠加次数:")+string);
string = tNow.Format("%Y-%m-%d");
//%H:%M:%S %a %m %d %Y");
// pSB->SetPaneText(2,string);
//pSB->SetPaneText(2,tds);
string = tNow.Format("%H:%M");
pSB->SetPaneText(2,string);
if(m_drawgdtlKey && !nFlags)
{
CRect rect;
GetClientRect(&rect);
CClientDC dc(this);
OnPrepareDC(&dc);
dc.DPtoLP(&rect);
dc.DPtoLP(&point);
//m
//CClientDC dc(this);
/* memDC.CreateCompatibleDC(&dc);
CBitmap bm;
bm.CreateCompatibleBitmap(GetDC(), 50, 20);
memDC.SelectObject(&bm); */
//m
CPen m_ScrollPen;
m_ScrollPen.CreatePen(PS_SOLID, 1, RGB(0,255,0));
//m_ScrollPen.CreatePen(PS_SOLID, 1, m_gdlCr);//RGB(0,255,0));
CPen* oldpen = dc.SelectObject(&m_ScrollPen);
dc.SetROP2(R2_XORPEN);
dc.MoveTo(m_nFlowXY, rect.top);
dc.LineTo(m_nFlowXY, rect.bottom);
dc.MoveTo(point.x, rect.top);
dc.LineTo(point.x, rect.bottom);
dc.SetROP2(R2_COPYPEN);
dc.SelectObject(oldpen);
CString s;
//s.Format("%d", int((point.x+1)*pDoc->m_jiange/pDoc->m_stepX));
//s.Format("%.5f", ((point.x)*pDoc->m_jiange/pDoc->m_stepX));
s.Format("%.3f", ((point.x)*pDoc->m_jiange/pDoc->m_stepX));
dc.BitBlt(m_nFlowXY+3, rect.top+10, m_nFlowXY+height+3, rect.top+30, &memDC, 0, 0, SRCINVERT);
CBrush brush;
CRect d_rect(0,0,height,20);
brush.CreateSolidBrush(RGB(0,255,0)^RGB(255,255,255));
//memDC.FillRect(CRect(0,0,50,20), &brush);
memDC.FillRect(d_rect, &brush);
memDC.SetBkColor(RGB(0,255,0)^RGB(255,255,255));
memDC.SetTextColor(RGB(0,0,255)^RGB(255,255,255));
//memDC.DrawText(s, CRect(0,0,50,20), DT_CENTER);
memDC.DrawText(s, d_rect, DT_CENTER);
memDC.SelectObject(oldpen);
dc.BitBlt(point.x+3, rect.top+10, point.x+height+3, rect.top+30, &memDC, 0, 0, SRCINVERT);
m_nFlowXY=point.x;
m_ScrollPen.DeleteObject();
brush.DeleteObject();
}
CScrollView::OnMouseMove(nFlags, point);
}
void CCgeView::OnXianshi4() //设置字底颜色
{
m_TextBkCr = RGB(255,255,255);
CColorDialog fontBkCrDlg(m_TextBkCr,0,this);
if(fontBkCrDlg.DoModal()==IDOK)
m_TextBkCr = fontBkCrDlg.GetColor();
RedrawWindow(NULL,NULL);
}
void CCgeView::OnXianshi5() //曲线颜色
{
m_LineCr = RGB(0,0,0);
CColorDialog ColorDlg(m_LineCr,0,this);
if(ColorDlg.DoModal()==IDOK)
m_LineCr = ColorDlg.GetColor();
//m_baslineCr = m_LineCr;
m_IsLining = true;
//ReleaseDC(pDoc);
//UpdateAllViews(NULL);//通知视窗类(文档类中使用)数据已经发生变化
//pDoc->UpdateAllViews(NULL); //重画视窗(视窗类中使用)
RedrawWindow(NULL,NULL);// or 重画视窗中指定区域中的内容(Cwnd类中的函数)
}
void CCgeView::OnXianshi6() //设置字的颜色
{
// TODO: Add your command handler code here
m_TextCr = RGB(0,0,255);
CColorDialog TxCrDlg(m_TextCr,0,this);
if(TxCrDlg.DoModal()==IDOK)
m_TextCr = TxCrDlg.GetColor();
RedrawWindow(NULL,NULL);
}
void CCgeView::OnXianshi9() //视窗颜色
{
m_ViewBkCr = RGB(255,255,255);
CColorDialog VieCrDlg(m_ViewBkCr,0,this);
if(VieCrDlg.DoModal()==IDOK)
m_ViewBkCr = VieCrDlg.GetColor();
// m_fillKey = true;
RedrawWindow(NULL,NULL);
}
void CCgeView::OnGongjv1()
{
m_TestData = true;
//RedrawWindow(NULL,NULL);
}
void CCgeView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: Add your specialized code here and/or call the base class
/*
//在OnDraw(CDC* pDC)以前调用该方法,因此应该在OnPrepareDC()函数中设置mapping方式
RECT clientRect,windowRect;
GetClientRect(&clientRect);
GetWindowRect(&windowRect);
pDC->SetMapMode(MM_ANISOTROPIC);
//pDC->SetMapMode(MM_ISOTROPIC);//想要X:Y=1:1则 MM_ISOTROPIC
pDC->SetWindowExt(1000,1000);//windowRect.right,windowRect.bottom);
//pDC->SetViewportExt(windowRect.right,-windowRect.bottom);
pDC->SetViewportExt(clientRect.right,-clientRect.bottom);
//pDC->SetWindowOrg(windowRect.left,windowRect.bottom);
pDC->SetViewportExt(clientRect.left/2,clientRect.bottom/2);
CPen NewPen;
CPen* pOldPen;
//CBrush NewBrush;
CBrush *pOldBrush;
NewPen.CreatePen(PS_SOLID,1,m_LineCr);
pOldPen = pDC->SelectObject(&NewPen);
pDC->SetBkColor(m_TextBkCr);
pDC->SetTextColor(m_TextCr);
NewBrush.CreateSolidBrush( m_ViewBkCr );
pOldBrush = pDC->SelectObject(&NewBrush);
*/
CScrollView::OnPrepareDC(pDC, pInfo);
}
void CCgeView::m_Coordinate(CDC* pDC,int Xmax, int Ymax, COLORREF m_coordCr)//???
{
CPen NewPen;
CPen* pOldPen;
int startX = 5;
int startY = 5;
NewPen.CreatePen(PS_SOLID,1,m_coordCr);
pOldPen = pDC->SelectObject(&NewPen);
pDC->MoveTo(startX,startY);
pDC->LineTo(Xmax,startY);
pDC->MoveTo(startX,startY);
pDC->LineTo(startX,Ymax);
pDC->SelectObject(pOldPen);
}
void CCgeView::OnXianshiDtlcr() //范围时标颜色
{
CColorDialog VieCrDlg(m_dtlCr,0,this);
if(VieCrDlg.DoModal()==IDOK)
m_dtlCr = VieCrDlg.GetColor();
RedrawWindow(NULL,NULL);
}
void CCgeView::OnLButtonDown(UINT nFlags, CPoint point)
{
if(!m_drawgdtlKey)
{
return;
}
int OldROP2_Mode;
//int EBX;
CString sEB;
CPen NewPen;
CPen* pOldPen;
CCgeDoc* pDoc= GetDocument();
CClientDC* pDC = new CClientDC(this);
NewPen.CreatePen(PS_SOLID,1,m_dtlCr);
pOldPen = pDC->SelectObject(&NewPen);
OldROP2_Mode = pDC->SetROP2(R2_NOTXORPEN); //R2_XORPEN
if(!pDoc->m_CMyLineList.IsEmpty())
{
if(!m_dtlBKey || !m_dtlEKey )
if(!m_dtlBKey)
{ BPoint.x = point.x;
BPoint.y = point.y;
pDC->MoveTo (BPoint.x,0);
pDC->LineTo (BPoint.x,GetSystemMetrics(SM_CYSCREEN));
m_dtlBKey = true;
}
else
{ EPoint.x = point.x;
EPoint.y = point.y;
pDC->MoveTo (EPoint.x,0);
pDC->LineTo (EPoint.x,GetSystemMetrics(SM_CYSCREEN));
pDLGBAR->GetDlgItem(IDC_DLGBARUSORMS)->SetWindowText(pDoc->s[4].Right(3));
//sEB.Format("%d", (EPoint.x-BPoint.x)*pDoc->m_jiange);
//sEB.Format("%f", (EPoint.x-BPoint.x)*pDoc->m_jiange);
float m_EBt;
m_EBt = (EPoint.x-BPoint.x)*pDoc->m_jiange / pow(2,pDoc->m_H );
sEB.Format("%f", m_EBt);
pDLGBAR->GetDlgItem(IDC_DLGBARUSORMS)->SetWindowText(sEB+pDoc->s[4].Right(2));
m_dtlEKey = true;
}
}
pDC->SetROP2(OldROP2_Mode);
pDC->SelectObject(pOldPen);
delete pDC;
CScrollView::OnLButtonDown(nFlags, point);
}
void CCgeView::OnContextMenu(CWnd*, CPoint point)//弹出右健菜单
{
// CG: This block was added by the Pop-up Menu component { if (point.x == -1 && point.y == -1){ //keystroke invocation CRect rect; GetClientRect(rect); ClientToScreen(rect); point = rect.TopLeft(); point.Offset(5, 5); } CMenu menu; VERIFY(menu.LoadMenu(CG_IDR_POPUP_CGE_VIEW)); CMenu* pPopup = menu.GetSubMenu(0); ASSERT(pPopup != NULL); CWnd* pWndPopupOwner = this; while (pWndPopupOwner->GetStyle() & WS_CHILD) pWndPopupOwner = pWndPopupOwner->GetParent(); pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, pWndPopupOwner); }
}
void CCgeView::OnEditReset()
{
m_EditReset();
//OnViewgdsb();
}
void CCgeView::OnUpdateEditReset(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_dtlBKey || m_dtlEKey || m_invertKey);
//pCmdUI->SetCheck(m_dtlBKey || m_dtlEKey || m_invertKey);
}
void CCgeView::DrawScale(CDC *pDC,CCgeDoc* pDoc)//画刻度尺
{
CPen* pOldPen;
CPen NewPen;
int i;
char istr[10];
NewPen.CreatePen(PS_SOLID,1,RGB(0,0,0));
pOldPen = pDC->SelectObject(&NewPen);
pDC->SetBkColor (RGB(255,255,255));
i = 0;
do
{ itoa(i/100,istr,10);
pDC->TextOut (pDoc->m_viewX0 + i,5,istr);
pDC->MoveTo(pDoc->m_viewX0 + i+2*25,0);
pDC->LineTo(pDoc->m_viewX0 + i+2*25,10); // draw "|"
i += 100;
}while(i<(pDoc->Num_Pointes*pDoc->m_stepX+10));
pDC->SelectObject(pOldPen);
pDC->SetBkColor (m_TextBkCr);
}
void CCgeView::OnViewgdsb() //滚动时标
{
CCgeDoc* pDoc = GetDocument();
//CDC* pDC = GetDC();
if(!pDoc->m_CMyLineList.IsEmpty())
{
m_drawgdtlKey = !m_drawgdtlKey;
int OldROP2_Mode;
CPen NewPen;
CPen* pOldPen;
CClientDC* pDC = new CClientDC(this);
NewPen.CreatePen(PS_SOLID,1,m_gdlCr);
pOldPen = pDC->SelectObject(&NewPen);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -