📄 wgl_32view.cpp
字号:
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 + -