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

📄 cgeview.cpp

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