📄 cgeview.cpp
字号:
OldROP2_Mode = pDC->SetROP2(R2_NOTXORPEN);
if(!m_drawgdtlKey)
{
pDC->MoveTo (dBPoint.x,0); //清除最后的线
pDC->LineTo (dBPoint.x,GetSystemMetrics(SM_CYSCREEN));
// 将变化的部分从位图拷贝到屏幕上,清除最后的字
pDC->BitBlt( rect.left, rect.top,
//pDC->BitBlt( rect.left, rect.top,
50,50,
&m_MemDC,
rect.left, rect.top,
SRCCOPY );
OnEditReset();
//Invalidate();
//InvalidateRect(rect.left-5,m_viewrect.top,rect.right+5,m_viewrect.bottom));
}
else
{
dBPoint.x = -100; //刚进入时不画线,刚进入时不贴
dBPoint.y = -100;
strcpy(m_svalu,"");
//Invalidate();
//OnEditReset() ;
}
pDC->SetROP2(OldROP2_Mode);
pDC->SelectObject(pOldPen);
pDC->DeleteDC ();
NewPen.DeleteObject ();
Invalidate();
}
}
void CCgeView::OnUpdateViewgdsb(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_drawgdtlKey);
}
void CCgeView::OnViewgdtlcr() //滚动时标颜色
{
CColorDialog VieCrDlg(m_gdlCr,0,this);
if(VieCrDlg.DoModal()==IDOK)
m_gdlCr = VieCrDlg.GetColor();
}
void CCgeView::OnXianshi1() //基线颜色
{
m_baslineCr = RGB(255,255,255);
CColorDialog fontBkCrDlg(m_baslineCr,0,this);
if(fontBkCrDlg.DoModal()==IDOK)
m_baslineCr = fontBkCrDlg.GetColor();
//m_LineCr = m_baslineCr;
RedrawWindow(NULL,NULL);
}
void CCgeView::DrawBasLine(CCgeDoc *pDoc, CDC *pDC)//画基线
{
CPen* pOldPen;
CPen NewPen;
int i,No;
CString sb;
char str_No[10];
CPoint fpoint;
i = pDoc->m_No.Find("-");
sb = pDoc->m_No.Left(i);
No = atoi(sb);
NewPen.CreatePen(PS_SOLID,1,m_baslineCr);
pOldPen = pDC->SelectObject(&NewPen);
//m_baslineCr= m_LineCr;//!!!!use FloodFill必须是同色边界
for (i=0; i<pDoc->Num_Line; i++)
{ fpoint.x = pDoc->m_viewX0+pDoc->Num_Pointes*pDoc->m_stepX + pDoc->m_HAddX;
fpoint.y = i*pDoc->basline+pDoc->m_viewY0;
pDC->MoveTo(0,fpoint.y);
itoa(No,str_No,10);
pDC->LineTo(fpoint.x,fpoint.y);
No++;
}
pDC->SelectObject(pOldPen);
NewPen.DeleteObject();
}
void CCgeView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CCgeDoc* pDoc = GetDocument();
if(nSBCode == SB_THUMBTRACK)
return;
CScrollView::OnHScroll(nSBCode, nPos, pScrollBar);
//pDoc->HPos = GetScrollPos (SB_HORZ);
}
/*
void CCgeView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CCgeDoc* pDoc = GetDocument();
OnEditReset() ;
if(nSBCode==SB_ENDSCROLL)
{
scrollkey=false;
}
else
{
scrollkey=true;
}
int OldROP2_Mode;
CPen NewPen;
CPen* pOldPen;
CDC m_MemDC;
//CClientDC* pDC = new CClientDC(this);
CDC *pDC = GetDC();
m_MemDC.CreateCompatibleDC(pDC);
NewPen.CreatePen(PS_SOLID,1,m_gdlCr);
pOldPen = pDC->SelectObject(&NewPen);
if(m_drawgdtlKey && m_isdtlKey) //关闭滚动轴
{
OldROP2_Mode = pDC->SetROP2(R2_NOTXORPEN); //R2_XORPEN
pDC->MoveTo (dBPoint.x,0); //清除最后的线
pDC->LineTo (dBPoint.x,GetSystemMetrics(SM_CYSCREEN));
pDC->SetROP2(OldROP2_Mode);
// 将变化的部分从位图拷贝到屏幕上,清除最后的字
pDC->BitBlt( rect.left, rect.top,
50,50,
&m_MemDC,
rect.left, rect.top,
SRCCOPY );
}
CPoint pt,ptTotal;
pt = GetScrollPosition();
m_nhscrollpos = pt.x;
ptTotal = GetTotalSize();
int bakpt;
switch(nSBCode)
{ case SB_LINEDOWN:
bakpt = m_nhscrollpos;
m_nhscrollpos = m_nhscrollpos + pDoc->m_TimelabelStep ;
break;
case SB_PAGEDOWN:
bakpt = m_nhscrollpos;
m_nhscrollpos = m_nhscrollpos + pDoc->m_TimelabelStep * int(m_viewrect.right / pDoc->m_TimelabelStep);//移动一屏
break;
case SB_LINEUP:
m_nhscrollpos = m_nhscrollpos - pDoc->m_TimelabelStep ;
break;
case SB_PAGEUP:
m_nhscrollpos = m_nhscrollpos - pDoc->m_TimelabelStep * int(m_viewrect.right / pDoc->m_TimelabelStep);
break;
default:
break;
}
pt.x = m_nhscrollpos;
if(pt.x < 0 )
{
pt.x = 0;
// return;
}
//if(pt.x + pDoc->m_TimelabelStep > pDoc->Num_TimelabelStep)// > ptTotal.x )//???
//{
// pt.x = bakpt ;
// return;
//}
if( (pt.x % pDoc->m_TimelabelStep) != 0 )
{
pt.x = int((pt.x + pDoc->m_TimelabelStep) / pDoc->m_TimelabelStep)
* pDoc->m_TimelabelStep;
}
ScrollToPosition(pt);
//CScrollView::OnHScroll(nSBCode, nPos, pScrollBar);
if(m_isdtlKey) //再显滚动轴
m_isdtlKey = false;
pDoc->HPos = m_nhscrollpos = pt.x;
//pDoc->UpdateAllViews(NULL); //view2
pDoc->UpdateAllViews(this); //不重画当前的视窗
// pDoc->HPos = m_nhscrollpos = pt.x;
m_MemDC.DeleteDC();
//pDC->DeleteDC();
}*/
//DEL void CCgeView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
//DEL {
//DEL /* OnEditReset() ;
//DEL if(nSBCode==SB_ENDSCROLL)
//DEL {
//DEL scrollkey=false;
//DEL }
//DEL else
//DEL {
//DEL scrollkey=true;
//DEL }
//DEL int OldROP2_Mode;
//DEL CPen NewPen;
//DEL CPen* pOldPen;
//DEL CDC m_MemDC;
//DEL
//DEL CClientDC* pDC = new CClientDC(this);
//DEL m_MemDC.CreateCompatibleDC(pDC);
//DEL NewPen.CreatePen(PS_SOLID,1,m_gdlCr);
//DEL pOldPen = pDC->SelectObject(&NewPen);
//DEL CCgeDoc* pDoc = GetDocument();
//DEL
//DEL if(m_drawgdtlKey && m_isdtlKey) //关闭滚动轴
//DEL {
//DEL OldROP2_Mode = pDC->SetROP2(R2_NOTXORPEN); //R2_XORPEN
//DEL pDC->MoveTo (dBPoint.x,0); //清除最后的线
//DEL pDC->LineTo (dBPoint.x,GetSystemMetrics(SM_CYSCREEN));
//DEL pDC->SetROP2(OldROP2_Mode);
//DEL // 将变化的部分从位图拷贝到屏幕上,清除最后的字
//DEL pDC->BitBlt( rect.left, rect.top,
//DEL
//DEL 50,50,
//DEL &m_MemDC,
//DEL rect.left, rect.top,
//DEL SRCCOPY );
//DEL
//DEL }
//DEL
//DEL CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);
//DEL m_nvscrollpos = GetScrollPos(SB_VERT);//滚动后再取
//DEL
//DEL if(m_isdtlKey) //再显滚动轴
//DEL m_isdtlKey = false;
//DEL
//DEL pDoc->VPos = m_nvscrollpos;
//DEL //GetScrollPos(SB_VERT);
//DEL
//DEL //pDoc->UpdateAllViews(NULL); //view2
//DEL */// pDoc->UpdateAllViews(NULL);//(this); //不重画当前的视窗
//DEL // m_MemDC.DeleteDC();
//DEL // pDC->DeleteDC();
//DEL }
void CCgeView::OnSelchangeDlgbarcombo1() //获得基线
{
CCgeDoc* pDoc = GetDocument();
CString s;
CComboBox* combo = (CComboBox*) pDLGBAR->GetDlgItem(IDC_DLGBARCOMBO1);
int index = combo->GetCurSel( );
if (index != CB_ERR )
{
combo->GetLBText(index,s);
}
else
{
combo ->GetWindowText(s);
}
TRACE("\n Windowstet %s ",s);
pDoc->basline = atoi(s);
pDoc->UpdateAllViews(NULL);
CRect rect;
pDoc->view2->GetClientRect(&rect);
pDoc->view2->InvalidateRect(&rect,TRUE);
TRACE("\nbase line change to %d \n",pDoc->basline);
RedrawWindow(NULL,NULL);
}
void CCgeView::OnStartLine()
{
int OldROP2_Mode;
CPen NewPen;
CPen* pOldPen;
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(m_dtlBKey)
{
pDC->MoveTo (BPoint.x,0);
pDC->LineTo (BPoint.x,GetSystemMetrics(SM_CYSCREEN));
m_dtlBKey = false;
}
pDC->SetROP2(OldROP2_Mode);
pDC->SelectObject(pOldPen);
pDC->DeleteDC();
}
void CCgeView::OnUpdateStartLine(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck (m_dtlBKey);
pCmdUI->Enable(!m_invertKey);
}
void CCgeView::OnEndLine()
{
int OldROP2_Mode;
CPen NewPen;
CPen* pOldPen;
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(m_dtlEKey){
pDC->MoveTo (EPoint.x,0);
pDC->LineTo (EPoint.x,GetSystemMetrics(SM_CYSCREEN));
m_dtlEKey = false;
}
pDC->SetROP2(OldROP2_Mode);
pDC->SelectObject(pOldPen);
delete pDC;
}
void CCgeView::OnUpdateEndLine(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck (m_dtlEKey);
pCmdUI->Enable(!m_invertKey);
}
void CCgeView::OnInvert()
{
CClientDC* pDC = new CClientDC(this);
m_rect.left = BPoint.x;
m_rect.top = 0;
m_rect.right = EPoint.x;
m_rect.bottom = GetSystemMetrics(SM_CYSCREEN);
/*if(m_dtlBKey && m_dtlEKey)
{
if(m_drawgdtlKey ) //关闭滚动轴
{ OnViewgdsb();
m_isdtlKey = true;
}
*/
pDC->InvertRect(&m_rect);
m_invertKey = !m_invertKey;
/*
if(m_isdtlKey) //再显滚动轴
{ OnViewgdsb();
m_isdtlKey = false;
}
}*/
pDC->DeleteDC();
}
void CCgeView::OnUpdateInvert(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_invertKey);
//pCmdUI->SetCheck(m_dtlBKey && m_dtlEKey);
pCmdUI->Enable(m_dtlBKey && m_dtlEKey);
}
void CCgeView::OnUpdateViewHstretch(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(NULL);
}
void CCgeView::OnTimelabel()
{
TimelabelKey = !TimelabelKey;
Invalidate();//(true);
//UpdateAllViews(NULL);//大于时滚动抽样
}
void CCgeView::DrawTimeStep(CCgeDoc *pDoc, CDC* pDC)//画静态时标
{
CPen* pOldPen;
CPen NewPen;
//NewPen.CreatePen(PS_SOLID,1,m_dtlCr );//RGB(0,255,0)); m_baslineCr //M_607
NewPen.CreatePen(PS_SOLID,1,m_baslineCr );//RGB(0,255,0)); m_baslineCr
pOldPen = pDC->SelectObject(&NewPen);
//GetClientRect(&pDoc->ViewRect);
pDoc->HPos = GetScrollPos(SB_HORZ);
pDoc->VPos = GetScrollPos(SB_VERT);
int i;
int m_kdgs,Lt;
CString Ls,Ls2;
m_kdgs = atoi(Ls2) + 1;
Lt = pDoc->ViewRect.right / pDoc->m_TimelabelStep;//pDoc->Num_Pointes;// * pDoc->m_stepX;
Ls.Format("%d",Lt);
Ls2 = Ls.Left(2);
m_kdgs = atoi(Ls2) + 1;
for(i=0;i<m_kdgs;i++)
{
pDC->MoveTo( pDoc->m_viewX0 + pDoc->HPos + i*pDoc->m_TimelabelStep, pDoc->ViewRect.top + pDoc->VPos);
pDC->LineTo( pDoc->m_viewX0 + pDoc->HPos + i*pDoc->m_TimelabelStep, pDoc->ViewRect.bottom + pDoc->VPos); // draw "|"
}
pDC->SelectObject(pOldPen);
NewPen.DeleteObject();
}
void CCgeView::OnUpdateTimelabel(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(TimelabelKey);
}
/*void CCgeView::OnJiequ() //截取
{
//1. 能对任何一条曲线截取所选择的区域
//2. 对所截取区域内的数据改写为零重新填入连表
//注意:连表已该为只保存了 Y 的值,关于 X 值的
//计算请参考CCgeDoc::DrawLine()函数
//3. 对所截取区域内的曲线应以 Y=0 重画
}
*/
void CCgeView::fill(bool up)
{
CCgeDoc *pDoc = GetDocument();
CMyLine* pMyLine;
CPoint fpoint;
CRect m_rect;
CClientDC* pDC = new CClientDC(this);
pDC->SelectStockObject(BLACK_BRUSH);
int i,j,xp1,yp1,xp2,yp2;
POSITION m_position;
int d_x=0,d_y=0;
int xp,yp;
if(!pDoc->m_CMyLineList.IsEmpty())
{
m_position = pDoc->m_CMyLineList.GetHeadPosition();
for(i=0;i<pDoc->Num_Line;i++)
{
pMyLine = (CMyLine* )pDoc->m_CMyLineList.GetNext(m_position);
xp1 = pDoc->m_viewX0-pDoc->HPos; //注意调节步长
yp1 = (pMyLine->y * pDoc->m_stepY + i*pDoc->basline+pDoc->m_viewY0);//-pDoc->VPos);
pDC->MoveTo(xp1,yp1);
for(j=0;j<pDoc->Num_Pointes-1;j++)
{
pMyLine = (CMyLine* )pDoc->m_CMyLineList.GetNext(m_position);
xp2 = j * pDoc->m_stepX + pDoc->m_viewX0-pDoc->HPos;
yp2 = pMyLine->y * pDoc->m_stepY + i * pDoc->basline + pDoc->m_viewY0;//-pDoc->VPos;
if(up)
{
if(yp2<i*pDoc->basline+pDoc->m_viewY0-1)
{
pDoc->FillKey=true;
xp=xp2;
yp=yp2;
}
else
{
if(yp2>i*pDoc->basline+pDoc->m_viewY0-1)
{
if(pDoc->FillKey) //==true)
{
if(pDoc->fullScreen==false)
{
pDC->FloodFill(xp-1,yp-pDoc->VPos+1,m_LineCr);
}
else
{
pDC->FloodFill(xp-1,yp+1,m_LineCr);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -