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

📄 wgl_32view.cpp

📁 一个真正实用的应用程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		if( y < 0 ) return;
		rect.top = y*CurveHeigh;
		rect.bottom = rect.top+CurveHeigh;
		pDC->InvertRect( &rect );
	}
	pDC->SetROP2( DrawMode );
	pDC->SelectObject( GOldPen );
}

/////////////////////////////////////////////////////////////////////////////
// CWgl_32View diagnostics

#ifdef _DEBUG
void CWgl_32View::AssertValid() const
{
	CView::AssertValid();
}

void CWgl_32View::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}
#endif //_DEBUG

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

/////////////////////////////////////////////////////////////////////////////
// CWgl_32View Command handlers

/////////////////////////////////////////////////////////////////////////////
// Scrollbar command handlers

void CWgl_32View::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	CWgl_32Doc *pDoc = GetDocument();
	if(pDoc->bReadError) return;
    unsigned long& PageFromSampNum = pDoc->PageFromSampNum;
	unsigned long& PageFromSampNumMax = pDoc->PageFromSampNumMax;
	unsigned long PageFromSampNumOld = PageFromSampNum;
	switch(nSBCode)
	{
		case SB_LEFT:
			PageFromSampNum = 0;
			break;
		case SB_PAGELEFT:
			pDoc->GetPrevHPage(PageFromSampNum);
			break;
		case SB_LINELEFT:
			pDoc->GetPrevHLine(PageFromSampNum);
			break;
		case SB_PAGERIGHT:
			pDoc->GetNextHPage(PageFromSampNum);
			PageFromSampNum = min(PageFromSampNum, PageFromSampNumMax);
			break;
		case SB_LINERIGHT:
			pDoc->GetNextHLine(PageFromSampNum);
			PageFromSampNum = min(PageFromSampNum, PageFromSampNumMax);
			break;
		case SB_RIGHT:
			PageFromSampNum = pDoc->PageFromSampNumMax;
			break;
		case SB_THUMBPOSITION:
			PageFromSampNum = pDoc->GetHNumIndex(nPos);
			PageFromSampNum = min(PageFromSampNum, PageFromSampNumMax);
			break;
	}
	if(PageFromSampNumOld != PageFromSampNum)
	{
		SetScrollPos(SB_HORZ,pDoc->GetHNumIndex(PageFromSampNum));
		InvalidateRect( NULL );
		pDoc->UpdateView( FALSE, TRUE );
	}
}

void CWgl_32View::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	CWgl_32Doc *pDoc = GetDocument();
	if(pDoc->bReadError) return;
	int& m_ViewChannel = pDoc->m_ViewChannel;
	int m_ViewChannelMax = pDoc->m_ViewChannelMax;
	int m_ViewChannelMin = pDoc->m_ViewChannelMin;
	int m_NumPerView = pDoc->m_NumPerView;
	long m_ViewChannelOld = m_ViewChannel;
	ChannelNumber *m_pChannelIndex = pDoc->m_pChannelIndex;
	int i;
	switch(nSBCode) 
	{
		case SB_BOTTOM:
			m_ViewChannel = m_ViewChannelMax;
			break;
		case SB_PAGEDOWN:
			for(i=0; i<=m_NumPerView; i++)
			{
				while(m_ViewChannel<m_ViewChannelMax && m_pChannelIndex[m_ViewChannel].bShow==0)
					m_ViewChannel ++;
				m_ViewChannel ++;
			}
			m_ViewChannel --;
			m_ViewChannel = min(m_ViewChannel, m_ViewChannelMax);
			break;
		case SB_LINEDOWN:
			if(m_ViewChannel<m_ViewChannelMax) m_ViewChannel ++;
			while(m_ViewChannel<m_ViewChannelMax && m_pChannelIndex[m_ViewChannel].bShow==0)
				m_ViewChannel ++;
			break;
		case SB_PAGEUP:
			for(i=0; i<=m_NumPerView; i++)
			{
				while(m_ViewChannel>m_ViewChannelMin && m_pChannelIndex[m_ViewChannel].bShow==0)
					m_ViewChannel --;
				m_ViewChannel --;
			}
			m_ViewChannel ++;
			m_ViewChannel = max(m_ViewChannel, m_ViewChannelMin);
			break;
		case SB_LINEUP:
			if(m_ViewChannel>m_ViewChannelMin) m_ViewChannel --;
			while(m_ViewChannel>m_ViewChannelMin && m_pChannelIndex[m_ViewChannel].bShow==0)
				m_ViewChannel --;
			break;
		case SB_TOP:
			m_ViewChannel = m_ViewChannelMin;
			break;
		case SB_THUMBPOSITION:
			i = nPos;
			m_ViewChannel = m_ViewChannelMin;
			while(i)
			{
				m_ViewChannel ++;
				while(m_ViewChannel<m_ViewChannelMax && m_pChannelIndex[m_ViewChannel].bShow==0)
					m_ViewChannel ++;
				i--;
			}
			break;
	}
	if(m_ViewChannelOld != m_ViewChannel)
	{
		SetScrollPos(SB_VERT,pDoc->GetVScrollPos());
		InvalidateRect( NULL );
		pDoc->UpdateView( TRUE, FALSE );
	}
}

void CWgl_32View::SetResynScroll(int cx,int cy)
{
	CWgl_32Doc *pDoc = GetDocument();
	if(pDoc->bReadError) return;
	WORD CurveHeigh = pDoc->HalfCurveHeigh*2;
	int nRemaindSampl = cy/CurveHeigh;
	SCROLLINFO ScrollInfo;
	ScrollInfo.cbSize = sizeof(ScrollInfo);
	ScrollInfo.fMask  = SIF_RANGE | SIF_PAGE;
	ScrollInfo.nMin = 0;
	ScrollInfo.nMax = pDoc->mNumViewChannel-nRemaindCurve;
	ScrollInfo.nPage  = nRemaindSampl;
	SetScrollInfo(SB_VERT, &ScrollInfo, FALSE);
	pDoc->m_NumPerView = nRemaindSampl;

	double& m_XSizeFactor = pDoc->m_XSizeFactor;
	unsigned long NumHide;
	double hrange = pDoc->GetShowHRange(NumHide);
	if((cx-NumHide)<0)
	{
		MessageBeep(MB_ICONSTOP);
		MessageBox("隐藏的区间太多,请减少隐藏的区间数量!",
			"严重错误",
			MB_OK|MB_ICONSTOP);
		return;
	}
	m_MinFactorX = (cx-NumHide)/hrange;
	unsigned long& EndSampNum = pDoc->EndSampNum;
	m_MaxFactorX = (SHRT_MAX-NumHide)/hrange;
	if(m_MaxFactorX > cx/2)
		m_MaxFactorX = cx/2;
	unsigned long& PageFromSampNum = pDoc->PageFromSampNum;
	if(m_XSizeFactor >= m_MaxFactorX)
	{
		m_XSizeFactor = m_MaxFactorX;
		bZoomIn = FALSE;
		bZoomOut = TRUE;
	}
	if(m_XSizeFactor <= m_MinFactorX)
	{
		m_XSizeFactor = m_MinFactorX;
		bZoomIn = TRUE;
		bZoomOut = FALSE;
	}
	nRemaindSampl = int(cx/m_XSizeFactor);
	ScrollInfo.nMax = int(m_XSizeFactor*hrange+NumHide);
	ScrollInfo.nPage  = cx;
	SetScrollInfo(SB_HORZ, &ScrollInfo, FALSE);
	unsigned long tul = PageFromSampNum;
	PageFromSampNum = EndSampNum;
	pDoc->GetPrevHPage(PageFromSampNum);
	pDoc->PageFromSampNumMax = PageFromSampNum;
	if(tul > PageFromSampNum)
		PageFromSampNum = 0;
	else
		PageFromSampNum = tul;
	SetScrollPos(SB_VERT,pDoc->GetVScrollPos()*CurveHeigh);
	SetScrollPos(SB_HORZ,pDoc->GetHNumIndex(PageFromSampNum));
}

void CWgl_32View::OnSize(UINT nType, int cx, int cy)
{
	CWgl_32Doc *pDoc = GetDocument();
	pDoc->pageHWidth = cx;
	CView::OnSize(nType, cx, cy);
	SetResynScroll( cx, cy );
	pDoc->UpdateAllViews( NULL );
}

/////////////////////////////////////////////////////////////////////////////
// Toolbar and Menu command handlers

void CWgl_32View::OnEditZoomin() 
{
	CWgl_32Doc *pDoc = GetDocument();
	if(pDoc->bReadError) return;
	double& m_XSizeFactor = pDoc->m_XSizeFactor;
	double m_XSizeFactorOld=m_XSizeFactor;
	m_XSizeFactor *= 2.0;
	bZoomOut = TRUE;
	if(m_XSizeFactor>=m_MaxFactorX)
	{
		m_XSizeFactor = m_MaxFactorX;
		bZoomIn = FALSE;
	}
	if(m_XSizeFactorOld!=m_XSizeFactor)
	{
		CRect rect;
		GetClientRect( &rect );
		SetResynScroll(rect.right,rect.bottom);
		InvalidateRect( NULL );
		pDoc->UpdateView( FALSE, TRUE );
	}
}

void CWgl_32View::OnEditZoomout()
{
	CRect rect;
	CWgl_32Doc *pDoc = GetDocument();
	if(pDoc->bReadError) return;
	GetClientRect( &rect );
	double& m_XSizeFactor = pDoc->m_XSizeFactor;
	double m_XSizeFactorOld=m_XSizeFactor;
	m_XSizeFactor *= 0.5;
	bZoomIn = TRUE;
	if(m_XSizeFactor <= m_MinFactorX)
	{
		m_XSizeFactor = m_MinFactorX;
		pDoc->PageFromSampNum = 0;
		bZoomOut = FALSE;
	}
	if(m_XSizeFactorOld!=m_XSizeFactor)
	{
		SetResynScroll(rect.right,rect.bottom);
		InvalidateRect( NULL );
		pDoc->UpdateView( FALSE, TRUE );
	}
}

void CWgl_32View::OnEditRestore() 
{
	CWgl_32Doc *pDoc = GetDocument();
	if(pDoc->bReadError) return;
	ChannelNumber *m_pChannelIndex = pDoc->m_pChannelIndex;
	WORD m_ChannelNum = pDoc->m_ChannelNum;
	for(WORD wIndex=0; wIndex<m_ChannelNum; wIndex++)
		m_pChannelIndex[wIndex].YFactor = 1.0;
	pDoc->m_XSizeFactor = 1.0;
	bZoomOut = bZoomIn = TRUE;
	CRect rect;
	GetClientRect( &rect );
	SetResynScroll(rect.right,rect.bottom);
	InvalidateRect( NULL );
	pDoc->UpdateView( FALSE, TRUE );
}

void CWgl_32View::OnEditCopyCurve() 
{
	CWgl_32Doc *pDoc = GetDocument();
	if(pDoc->bReadError) return;
	int& nWhichCurve=pDoc->nWhichCurve;
	bCopyCurve = !bCopyCurve;
	if(bCopyCurve)
	{   
		bCopyArea = FALSE;
		bMove = FALSE;
		bVExpand = FALSE;
		bXExpand = FALSE;
		if(bEditYcursor && nWhichCurve>=0)
		{
			nWhichCurve = -1;
			InvalidateRect( NULL );
			pDoc->UpdateView( TRUE, FALSE );
		}
		bEditYcursor = FALSE;
		bShortSeg = FALSE;
		bDeleteCurve = FALSE;
		nSelectCurve = -1;
		SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)m_HBeforeMove);
	}
	else
		SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)HOldCursor);
	InvertRect();
}

void CWgl_32View::OnEditDelete() 
{
	CWgl_32Doc *pDoc = GetDocument();
	if(pDoc->bReadError) return;
	int& nWhichCurve=pDoc->nWhichCurve;
	bDeleteCurve = !bDeleteCurve;
	if(bDeleteCurve)
	{   
		bCopyArea = FALSE;
		bMove = FALSE;
		bVExpand = FALSE;
		bXExpand = FALSE;
		if(bEditYcursor && nWhichCurve>=0)
		{
			nWhichCurve = -1;
			InvalidateRect( NULL );
			pDoc->UpdateView( TRUE, FALSE );
		}
		bEditYcursor = FALSE;
		bShortSeg = FALSE;
		bCopyCurve = FALSE;
		SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)m_HBeforeMove);
	}
	else
		SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)HOldCursor);
	InvertRect();
}

void CWgl_32View::OnEditMove() 
{
	CWgl_32Doc *pDoc = GetDocument();
	if(pDoc->bReadError) return;
	int& nWhichCurve=pDoc->nWhichCurve;
	bMove = !bMove;
	if(bMove)
	{   
		bCopyArea = FALSE;
		bVExpand = FALSE;
		bXExpand = FALSE;
		if(bEditYcursor && nWhichCurve>=0)
		{
			nWhichCurve = -1;
			InvalidateRect( NULL );
			pDoc->UpdateView( TRUE, FALSE );
		}
		bEditYcursor = FALSE;
		bShortSeg = FALSE;
		bCopyCurve = FALSE;
		bDeleteCurve = FALSE;
		nSelectCurve = -1;
		SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)m_HBeforeMove);
	}
	else
		SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)HOldCursor);
	InvertRect();
}

void CWgl_32View::InvertRect()
{
	if( nSelectCurve >= 0 )
	{
		CWgl_32Doc *pDoc = GetDocument();
		WORD CurveHeigh=pDoc->HalfCurveHeigh*2;
		int kl = GetCurveDisplayIndex(nSelectCurve);
		if(kl > 0) 
		{
			CRect rect;
			CClientDC dc( this );
			GetClientRect( &rect );
			rect.top = kl*CurveHeigh;
			rect.bottom = rect.top+CurveHeigh;
			dc.InvertRect( &rect );
		}
		nSelectCurve = -1;
	}
}

void CWgl_32View::OnEditVexpand() 
{
	CWgl_32Doc *pDoc = GetDocument();
	if(pDoc->bReadError) return;
	int& nWhichCurve=pDoc->nWhichCurve;
	bVExpand = !bVExpand;
	if(bVExpand)
	{
		SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)m_HVExpand);
		bCopyArea = FALSE;
		bMove = FALSE;
		bXExpand = FALSE;
		if(bEditYcursor && nWhichCurve>=0)
		{
			nWhichCurve = -1;
			InvalidateRect( NULL );
			pDoc->UpdateView( TRUE, FALSE );
		}
		bEditYcursor = FALSE;
		bShortSeg = FALSE;
		bCopyCurve = FALSE;
		bDeleteCurve = FALSE;
	}
	else
		SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)HOldCursor);
	InvertRect();
}

void CWgl_32View::OnEditXexpand() 
{
	CWgl_32Doc *pDoc = GetDocument();
	if(pDoc->bReadError) return;
	int& nWhichCurve=pDoc->nWhichCurve;
	bXExpand = !bXExpand;
	if(!bZoomIn) bXExpand = FALSE;
	if(bXExpand) 
	{
		SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)m_HHExpand);
		bCopyArea = FALSE;
		bMove = FALSE;
		bVExpand = FALSE;
		if(bEditYcursor && nWhichCurve>=0)
		{
			nWhichCurve = -1;
			InvalidateRect( NULL );
			pDoc->UpdateView( TRUE, FALSE );
		}
		bEditYcursor = FALSE;
		bShortSeg = FALSE;
		bCopyCurve = FALSE;
		bDeleteCurve = FALSE;
	}
	else
		SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)HOldCursor);
	InvertRect();
}

void CWgl_32View::OnEditYcursor() 
{
	CWgl_32Doc *pDoc = GetDocument();
	if(pDoc->bReadError) return;
	bEditYcursor = !bEditYcursor;
	int& nWhichCurve = pDoc->nWhichCurve;
	if(bEditYcursor)
	{
		SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)m_HYValue);
		bCopyArea = FALSE;
		bMove = FALSE;
		bVExpand = FALSE;
		bXExpand = FALSE;
		bShortSeg = FALSE;
		bCopyCurve = FALSE;
		bDeleteCurve = FALSE;
		pDoc->LCursorA = 0;
		pDoc->RCursorA = 0;
		nWhichCurve = -1;
		InvertRect();
		return;

⌨️ 快捷键说明

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