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

📄 cgeview.cpp

📁 《面向对象程序设计实用教程》一书的源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// cgeView.cpp : implementation of the CCgeView class
//

#include "stdafx.h"
#include "cge.h"
#include "MainFrm.h"
#include "cgeDoc.h"
#include "cgeView.h"
#include "math.h"
#include "resource.h"
#include "MyLine.h"
#include "NewFile.h"
#include "FilePath.h"
#include <direct.h>
#include "FFT.h"
#include "SinDia.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CCgeView

IMPLEMENT_DYNCREATE(CCgeView, CScrollView)

BEGIN_MESSAGE_MAP(CCgeView, CScrollView)
	ON_WM_CONTEXTMENU()
	//{{AFX_MSG_MAP(CCgeView)
	ON_WM_CREATE()
	ON_WM_MOUSEMOVE()
	ON_COMMAND(ID_XIANSHI4, OnXianshi4)
	ON_COMMAND(ID_XIANSHI5, OnXianshi5)
	ON_COMMAND(ID_XIANSHI6, OnXianshi6)
	ON_COMMAND(ID_XIANSHI9, OnXianshi9)
	ON_COMMAND(ID_GONGJV1, OnGongjv1)
	ON_COMMAND(ID_VIEWGDSB, OnViewgdsb)
	ON_COMMAND(ID_VIEWGDTLCR, OnViewgdtlcr)
	ON_COMMAND(ID_XIANSHI_DTLCR, OnXianshiDtlcr)
	ON_WM_LBUTTONDOWN()
	ON_COMMAND(ID_EDIT_RESET, OnEditReset)
	ON_UPDATE_COMMAND_UI(ID_EDIT_RESET, OnUpdateEditReset)
	ON_UPDATE_COMMAND_UI(ID_VIEWGDSB, OnUpdateViewgdsb)
	ON_COMMAND(ID_XIANSHI1, OnXianshi1)
	ON_WM_HSCROLL()
	ON_CBN_SELCHANGE(IDC_DLGBARCOMBO1, OnSelchangeDlgbarcombo1)
	ON_COMMAND(ID_START_LINE, OnStartLine)
	ON_UPDATE_COMMAND_UI(ID_START_LINE, OnUpdateStartLine)
	ON_COMMAND(ID_END_LINE, OnEndLine)
	ON_UPDATE_COMMAND_UI(ID_END_LINE, OnUpdateEndLine)
	ON_COMMAND(ID_INVERT, OnInvert)
	ON_UPDATE_COMMAND_UI(ID_INVERT, OnUpdateInvert)
	ON_UPDATE_COMMAND_UI(ID_VIEW_HSTRETCH, OnUpdateViewHstretch)
	ON_COMMAND(ID_TIMELABEL, OnTimelabel)
	ON_UPDATE_COMMAND_UI(ID_TIMELABEL, OnUpdateTimelabel)
	ON_COMMAND(ID_CUT_HEAD, OnCutHead)
	ON_UPDATE_COMMAND_UI(ID_CUT_HEAD, OnUpdateCutHead)
	ON_COMMAND(ID_CUT_SCALE, OnCutScale)
	ON_UPDATE_COMMAND_UI(ID_CUT_SCALE, OnUpdateCutScale)
	ON_COMMAND(ID_PARFILE, OnParfile)
	ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1)
	ON_COMMAND(ID_S_FANG, OnSFang)
	ON_UPDATE_COMMAND_UI(ID_S_FANG, OnUpdateSFang)
	ON_COMMAND(ID_SHOW_BASLINEKEY, OnShowBaslinekey)
	ON_UPDATE_COMMAND_UI(ID_SHOW_BASLINEKEY, OnUpdateShowBaslinekey)
	ON_WM_VSCROLL()
	ON_WM_DESTROY()
	ON_COMMAND(ID_PARA_NEW, OnParRfile)
	ON_COMMAND(ID_FILE_NEW, OnFileNew)
	ON_COMMAND(ID_JUXING, OnJuxing)
	ON_COMMAND(ID_XUEBO, OnXuebo)
	ON_UPDATE_COMMAND_UI(ID_XUEBO, OnUpdateXuebo)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCgeView construction/destruction

CCgeView::CCgeView()
{

	scrollkey=false;
	checkup=0;
	checkdown=0;
	m_SBKey = true;

}

CCgeView::~CCgeView()
{
   CCgeDoc *pDoc = (CCgeDoc *)GetDocument();
   if(!pDoc->m_CMyLineList.IsEmpty())
   {	
		//m_CMyLineList.RemoveAll();// CAge's aren't destroyed.	
		//ASSERT(m_CMyLineList.IsEmpty()); // Yes it is.			
		CMyLine *pMyLine;
		POSITION ps;
		ps = pDoc->m_CMyLineList.GetHeadPosition();
		while ( ps != NULL )
		{
			pMyLine = (CMyLine *)pDoc->m_CMyLineList.GetNext(ps);
			delete pMyLine; // Now delete the CAge objects.
		}
		pDoc->m_CMyLineList.RemoveAll();// CAge's aren't destroyed.	
		ASSERT(pDoc->m_CMyLineList.IsEmpty()); // Yes it is.			
   }
}

BOOL CCgeView::PreCreateWindow(CREATESTRUCT& cs)
{

	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CCgeView drawing
/* LL
void CCgeView::OnDraw(CDC* pDC)
{
	CCgeDoc* pDoc = (CCgeDoc* )GetDocument();
	ASSERT_VALID(pDoc);
	

	GetClientRect(&m_viewrect);		//???
	//GetClientRect(&(pDoc->ViewRect));  
	pDoc->ViewRect = m_viewrect;
    //pDC->LineTo(Rect.right ,Rect.bottom);
	CPen NewPen;
	CPen* pOldPen;
	CBrush NewBrush;
    CBrush* pOldBrush;

    CMainFrame* pFrame = (CMainFrame* ) AfxGetApp()->m_pMainWnd;

    NewPen.CreatePen(PS_SOLID,1,m_LineCr); 
	pOldPen = pDC->SelectObject(&NewPen);
	pDC->SetBkColor(m_TextBkCr);
	pDC->SetTextColor(m_TextCr);
	CBrush NewBrush;
    CBrush* pOldBrush;
	NewBrush.CreateSolidBrush( m_ViewBkCr );  //实心底
	//NewBrush.CreateHatchBrush( HS_CROSS,m_ViewBkCr ); //网格底
    pOldBrush = pDC->SelectObject(&NewBrush); 

	OnEditReset() ;
    SetScrollSizes(MM_TEXT, pDoc->m_xyAxisSize);//set scrollbar size    			

	CString s;
    s.Format("%4d",pDoc->m_Ndb*6 );  	//分贝
	//s.Format("%4.0f",pDoc->m_stepY*6.0/m_stepY0 );  	//分贝
	pDLGBAR->GetDlgItem(IDC_DLGBAREDIT1)->SetWindowText(s); 
	//s.Format("%4.0f", pDoc->m_stepX );  	
	s.Format("%4d", pDoc->m_H );  	
	pDLGBAR->GetDlgItem(IDC_DLGBAREDIT2)->SetWindowText(s); 	
	
	
	pCombo1 = (CComboBox* )pDLGBAR->GetDlgItem(IDC_COMBO1);	
    pCombo1->ResetContent();
    pCombo1->AddString(pDoc->s[0]); 
	int i,bd,ed;
	CString bes;
	i = pDoc->s[0].Find("-");		 
	bd = atoi(pDoc->s[0].Left(i));
	ed = atoi(pDoc->s[0].Mid(i+1));
	
	for(i=bd;i<ed+1;i++)
	{
		bes.Format("%d",i); 
		pCombo1->AddString(bes); 
	}
	pDLGBAR->GetDlgItem(IDC_COMBO1)->SetWindowText(pDoc->Fangs);
	//bes.Format("%3d",pDoc->m_Mcishu);
	//pDLGBAR->GetDlgItem(IDC_DCISHU)->SetWindowText(bes);

	//调用画线函数
	if(!pDoc->m_CMyLineList.IsEmpty() && baslineKey)
	{
		DrawBasLine(pDoc, pDC);	
	}
	if(!pDoc->m_CMyLineList.IsEmpty() )  //&& !pDoc->fullScreen)
	{
		pDoc->DrawLine(pDC);	
	}

	if( TimelabelKey )
	{
		DrawTimeStep(pDoc, pDC);
	}

  	   //DrawScale(pDC,pDoc);	  //在CView中画水平标尺
	   //pDoc->DrawLine(pDC);

	   dBPoint.x = -1000;//关闭再显滚动轴

//	   pDC->SelectObject(pOldPen);	
//	   pDC->SelectObject(pOldBrush);

        //测试
	    CString sc;
		sc.Format("%f",pDoc->m_stepY);
		pDC->TextOut (200,100,sc);

		//测试	
		sc.Format("%d",pDoc->ViewRect.right);
		pDC->TextOut (200,200,sc);

		//测试	
		sc.Format("%d",m_viewrect.right);
		pDC->TextOut (200,300,sc);	

		//测试	
		sc.Format("%d",	pDoc->m_viewY0);
		pDC->TextOut (300,400,sc);	
	
       //if(m_fillKey && !scrollkey)//修改如下  fill(up);
	   if(m_fillKey)
	   {
		   m_fill(up);  //Release 
	   }
	   
	   //ReleaseDC(pDoc);
	   //pDC->ReleaseDC(pOldPen);
	   //ReleaseObject(pOldBrush);

} //end view	
*/
void CCgeView::OnDraw(CDC* pDC)
{	
	CCgeDoc* pDoc = (CCgeDoc* )GetDocument();
	ASSERT_VALID(pDoc);
	//GetClientRect(&(pDoc->ViewRect));//m412
	m_nFlowXY = -55;
	
	L_Draw(pDC);
	if( TimelabelKey )
	{
		DrawTimeStep(pDoc, pDC);
	}

	//pDC->TextOut (20,50,"afadsf");
}

void CCgeView::L_Draw(CDC *pDC)
{
	CCgeDoc *pDoc = GetDocument();
    if(!pDoc->m_CMyLineList.IsEmpty())
	{
    	CRect rect;
		GetClientRect(&rect);
		pDoc->ViewRect = rect;
		CMyLine* pMyLine;
		pDC->DPtoLP(&rect);
		pDoc->m_ViewLeft = rect.left;
		int x,y;
		int n = rect.top - pDoc->m_viewY0;//重画视窗
		int start = n/pDoc->basline;
		if(start<0)
			start = 0;
		//int end = (n + rect.Height())/pDoc->basline + 2;
	    
		CBrush NewBrush;
		CBrush* pOldBrush;
		NewBrush.CreateSolidBrush( m_ViewBkCr );  //实心底
		//NewBrush.CreateHatchBrush( HS_CROSS,m_ViewBkCr ); //网格底
		pOldBrush = pDC->SelectObject(&NewBrush); 
		pDC->FillRect(&rect,&NewBrush);
		NewBrush.DeleteObject ();

		if(!pDoc->m_CMyLineList.IsEmpty() && baslineKey)
		{
			DrawBasLine(pDoc, pDC);	
		}
        POSITION pos = pDoc->m_CMyLineList.GetHeadPosition();
		CPen pen;
		pen.CreatePen(PS_SOLID, 1, m_LineCr);//线与填充
		CPen* pold = pDC->SelectObject(&pen);
		
		BOOL Draw_T = false;
		int  Draw_i;
		if(pDoc->Fangs==pDoc->s[0] ) Draw_T = true;
		Draw_i = atoi(pDoc->Fangs)-1;
		//ENp = Num_Pointes;
		//for(int i = start;i < end && i < pDoc->Num_Line;i++)
	    //m82
		float basline_y;
	    for(int i = 0; i < pDoc->Num_Line;i++)
		{
			pMyLine = (CMyLine* )pDoc->m_CMyLineList.GetNext(pos);
			x = 0;   
			//y = pMyLine->y * pDoc->m_stepY + i * pDoc->basline + pDoc->m_viewY0;
			//m82
			basline_y = pMyLine->y * pDoc->m_stepY;
			if(m_SBKey)
			{
				if(basline_y >= 0.8 * pDoc->basline )
				{
					basline_y = 0.8 * pDoc->basline;
				}
				if( basline_y <= -0.8 * pDoc->basline )
				{
					basline_y = -0.8 * pDoc->basline;
				}
			}

			y = basline_y + i * pDoc->basline + pDoc->m_viewY0;
			
	    if(i == start)
			{
				pDoc->m_FirstBase = i * pDoc->basline + pDoc->m_viewY0 - rect.top;
				pDoc->m_nCurChannel = i;
				pDoc->UpdateView();
			}
			pDC->MoveTo(x ,y);
//			if(FangsKey)
//			{
//				pDC->LineTo(pDoc->GetDocSize().cx, y);
//				pDC->MoveTo(x ,y);
//			}
			for(int j = 1;j < pDoc->Num_Pointes;j++)
			{			
				pMyLine = (CMyLine* )pDoc->m_CMyLineList.GetNext(pos);
				x = j * pDoc->m_stepX;   
				//m82
				basline_y = pMyLine->y * pDoc->m_stepY;
				if(m_SBKey)
				{
					if(basline_y >= 0.8 * pDoc->basline )
					{
						basline_y = 0.8 * pDoc->basline;
					}
					if( basline_y <= -0.8 * pDoc->basline )
					{
						basline_y = -0.8 * pDoc->basline;
					}
				}
			
				y = basline_y + i * pDoc->basline + pDoc->m_viewY0;
				
				//m82
				if(Draw_T)
					{			
						y = basline_y  + i * pDoc->basline + pDoc->m_viewY0;  
					}else if(i == Draw_i)
					{
					 	y = basline_y  + i * pDoc->basline + pDoc->m_viewY0; 
					  	//单放其他道时,所有通道回到原来状态
					}else 
					{
						y = pMyLine->y * pDoc->old_m_stepY + i * pDoc->basline + pDoc->m_viewY0;  
					}
				//m82				
				pDC->LineTo(x, y);
				//if(j%2 != 0 && (pDoc->m_Fill == 1 && pMyLine->y <= 0 || pDoc->m_Fill == 2 && pMyLine->y >= 0))		
				if((pDoc->m_Fill == 1 && pMyLine->y <= 0 || pDoc->m_Fill == 2 && pMyLine->y >= 0))
				{
					pDC->SelectStockObject(BLACK_PEN);//填充是黑色
					pDC->MoveTo(x, i* pDoc->basline + pDoc->m_viewY0);
					pDC->LineTo(x, y);
					pDC->SelectObject(&pen);
				}	
			}
		}
		//if( TimelabelKey )
		//{
		//	DrawTimeStep(pDoc, pDC);
		//}
		pDC->SelectObject(pold);
		pen.DeleteObject();
	}
}

void CCgeView::OnInitialUpdate()
{  
	/*GetDC()->SetViewportExt(10,10);	
	SetScrollSizes( MM_TEXT, pDoc->m_xyAxisSize );
    ResizeParentToFit( );   // Default bShrinkOnly argument
    
	注:该函数的调用有如下情况(可以在此初始化部分视窗类的数据)
	1. 用户启动应用程序时
	2. 选择 File 菜单中的 New 选项时
	3. 选择 File 菜单中的 Open 选项时	
	   
		 然后自动调用OnDraw()函数	
	*/
	CScrollView::OnInitialUpdate();
	CCgeDoc* pDoc = (CCgeDoc* )GetDocument();
	ASSERT_VALID(pDoc);
	SetScrollSizes(MM_TEXT, pDoc->GetDocSize(), CSize(500*pDoc->m_stepX,pDoc->basline), CSize(50*pDoc->m_stepX,pDoc->basline));	
	m_nFlowXY = -55;
	//mm
/*	CClientDC dc(this);
	memDC.CreateCompatibleDC(&dc);
	CBitmap bm;
	bm.CreateCompatibleBitmap(GetDC(), 50, 20);
	memDC.SelectObject(&bm);			*/
	
	pSB = (CStatusBar* )AfxGetApp()->m_pMainWnd->GetDescendantWindow(AFX_IDW_STATUS_BAR);
    pDLGBAR = (CDialogBar* )AfxGetApp()->m_pMainWnd->GetDescendantWindow(CG_ID_VIEW_MYDIALOGBAR);
	//pDLGBAR->GetDlgItem(IDC_DLGBARUSORMS)->SetWindowText("  "+pDoc->s[4].Right(2));
	pDLGBAR->GetDlgItem(IDC_DLGBARUSORMS)->SetWindowText("  ms");
	
	//((CMainFrame*)GetParentFrame())->GetDlgBar().GetDlgItem(IDC_DLGBAREDIT1)->SetWindowText(s);
  
	pDoc->Fangs = pDoc->s[0];
	//memDC.DeleteDC();
	
//	pCombo1 = (CComboBox* )pDLGBAR->GetDlgItem(IDC_COMBO1);
    //pCombo1->ResetContent();
	//pCombo1->AddString("1-2");	    
	//CMainFrame *p = (CMainFrame *)AfxGetApp()->m_pMainWnd;
	//	p->m_hvbil = 9;
	//	TRACE("\n%d\n",p->m_hvbil);

	//HWND FindWindow(
   //LPCTSTR lpClassName,  // pointer to class name
   //LPCTSTR lpWindowName  // pointer to window name
   //);
 
}

/////////////////////////////////////////////////////////////////////////////
// CCgeView printing

BOOL CCgeView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CCgeView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	
}

void CCgeView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	
}

/////////////////////////////////////////////////////////////////////////////
// CCgeView diagnostics

#ifdef _DEBUG
void CCgeView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CCgeView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

CCgeDoc* CCgeView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCgeDoc)));
	return (CCgeDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CCgeView message handlers

int CCgeView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CScrollView::OnCreate(lpCreateStruct) == -1)
		return -1;
		
    m_TextCr = RGB(0,0,0);
	m_TextBkCr = 16776960;//RGB(0,0,0);青色
	m_ViewBkCr = RGB(255,255,255);
    //m_LineCr =   16711935;//RGB(0,0,0);//粉红色
	m_LineCr =   RGB(0,0,0);//黑色
	//m_baslineCr = m_LineCr;
		//16711935;//粉红色
	//m_xyAxisSize.cx = m_xyAxisSize.cy = 900;    
	//m_xyAxisSize.cx  = 1900;    
	m_fillKey = false;
    m_dtlCr  = RGB(0,255,0);
	m_gdlCr = 0x0000ff00;
	m_dtlBKey = false; //what mean
	m_dtlEKey = false;//what mean
	m_invertKey = false;
	m_drawgdtlKey = false;// what mean
	m_isdtlKey = false;// what mean
	TimelabelKey = false;
	baslineKey = true;
    up = true;
//	m_viewX0 = 20;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -