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

📄 cgeview.cpp

📁 《面向对象程序设计实用教程》一书的源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
       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 + -