SCRollBar


void DVGraphViewLM::OnHScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar )
{
if(pScrollBar)
pScrollBar->BringWindowToTop();

SCROLLINFO info;
pScrollBar->GetScrollInfo(&info, SIF_ALL);
int curpos = info.nPos;
switch(nSBCode)
{
case SB_BOTTOM:
curpos = info.nMax;
break;
case SB_TOP:
curpos = info.nMin;
break;
case SB_LINEDOWN:
if (curpos < info.nMax - (int)info.nPage + 1)
{
++curpos;
}
break;
case SB_LINEUP:
if (curpos > info.nMin)
{
--curpos;
}
break;
case SB_PAGEDOWN:
curpos += info.nPage;
if (curpos > info.nMax - (int)info.nPage + 1)
{
curpos = info.nMax - (int)info.nPage + 1;
}
break;
case SB_PAGEUP:
curpos -= info.nPage;
if (curpos < info.nMin)
{
curpos = info.nMin;
}
break;
case SB_THUMBPOSITION:
curpos = nPos;
break;
case SB_THUMBTRACK:
curpos = nPos;
break;
default:
curpos = info.nPos;
break;
}

BOOL flag = pScrollBar->SetScrollPos(curpos);

m_GraphManager.ReAlignGraphs();

BCSCViewView::OnHScroll(nSBCode, nPos, pScrollBar);

Invalidate(); //更新视图
}

void DVGraphViewLM::OnVScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar )
{
if(pScrollBar)
pScrollBar->BringWindowToTop();

SCROLLINFO info;
pScrollBar->GetScrollInfo(&info, SIF_ALL);
int curpos = info.nPos;
switch(nSBCode)
{
case SB_BOTTOM:
curpos = info.nMax;
break;
case SB_TOP:
curpos = info.nMin;
break;
case SB_LINEDOWN:
if (curpos < info.nMax - (int)info.nPage + 1)
{
++curpos;
}
break;
case SB_LINEUP:
if (curpos > info.nMin)
{
--curpos;
}
break;
case SB_PAGEDOWN:
curpos += info.nPage;
if (curpos > info.nMax - (int)info.nPage + 1)
{
curpos = info.nMax - (int)info.nPage + 1;
}
break;
case SB_PAGEUP:
curpos -= info.nPage;
if (curpos < info.nMin)
{
curpos = info.nMin;
}
break;
case SB_THUMBPOSITION:
curpos = nPos;
break;
case SB_THUMBTRACK:
curpos = nPos;
break;
default:
curpos = info.nPos;
break;
}

BOOL flag = pScrollBar->SetScrollPos(curpos);

m_GraphManager.ReAlignGraphs();

BCSCViewView::OnVScroll(nSBCode, nPos, pScrollBar);

Invalidate(); //更新视图
}

 


void DVCoordSystemLM::UpdateCrollBar()
{
DVPreferenceGDIManager* pGdiObjectManager = DVPreferenceGDIManager::GetInstance();
DVGraphGdiObjManager* pGdiObjMananger = m_pGraph->GetGdiObjManager();

DVChart* pChart = m_pGraph->GetChart();
pChart->ParpareLastSignalFrames();
int num = pChart->GetSignalCount();
if (num == 0)
{
return;
}
int iDataWidth;
if (m_bHorOrVer)
{
iDataWidth = m_DataGraphRect.Width(); //数据区宽度
}
else
{
iDataWidth = m_DataGraphRect.Height();
}

int iInputWidth = iDataWidth/num - INTERVAL_WIDTH; //数据宽度
CRect rc;

pGdiObjMananger->GetTextRect(pGdiObjectManager->GetLMDataFont(), _T("123"), rc);
int iTextWidth = rc.Height(); //字体宽度
//数据宽度 [字体宽度*2, 字体宽度*5]

//判断, 确定数据宽度
if (iInputWidth > iTextWidth * 5)
{
iInputWidth = iTextWidth * 5;
}
if (iInputWidth < iTextWidth * 2)
{
iInputWidth = iTextWidth * 2;
}
m_iInputWidth = iInputWidth;
//确定一个页面放置几个数据块
int iPageNum = iDataWidth/(iInputWidth+INTERVAL_WIDTH);
m_iPageNum = iPageNum;

SCROLLINFO info;
if (!m_pHCScrollBar)
{
m_pHCScrollBar = new CScrollBar;
m_pHCScrollBar->Create(SBS_HORZ, CRect(0,0,0,0), m_pGraph->GetGraphView(), HSCROLL_ID);

m_pVCScrollBar = new CScrollBar;
m_pVCScrollBar->Create(SBS_VERT, CRect(0,0,0,0), m_pGraph->GetGraphView(), VSCROLL_ID);

info.cbSize = sizeof(SCROLLINFO);
info.fMask = SIF_ALL;
info.nMin = 0;
info.nMax = num - iPageNum;
info.nPage = 1;
info.nPos = 0;

m_pHCScrollBar->SetScrollInfo(&info, TRUE);
m_pVCScrollBar->SetScrollInfo(&info, TRUE);
}

if (m_bHorOrVer)
{
m_pHCScrollBar->GetScrollInfo(&info, SIF_ALL);
}
else
{
m_pVCScrollBar->GetScrollInfo(&info, SIF_ALL);
}
//m_pVCScrollBar->GetScrollInfo(&info, SIF_ALL);
info.nMax = num - iPageNum;

m_pHCScrollBar->SetScrollInfo(&info, TRUE);
m_pVCScrollBar->SetScrollInfo(&info, TRUE);

if (iPageNum >= num)
{
m_pHCScrollBar->ShowWindow(SW_HIDE);
m_pVCScrollBar->ShowWindow(SW_HIDE);
m_DataGraphRect.bottom += SCROLL_SIZE;
m_TitleRect.bottom += SCROLL_SIZE;
m_YAxisRect.bottom += SCROLL_SIZE;
return;
}

if (m_bHorOrVer)
{
m_pHCScrollBar->MoveWindow(m_ScrollRect, TRUE);
m_pHCScrollBar->ShowWindow(SW_SHOW);
m_pVCScrollBar->ShowWindow(SW_HIDE);
}
else
{
m_pVCScrollBar->MoveWindow(m_ScrollRect, TRUE);
m_pHCScrollBar->ShowWindow(SW_HIDE);
m_pVCScrollBar->ShowWindow(SW_SHOW);
}
}

posted @ 2013-11-22 16:36  Zucc_zt  阅读(353)  评论(0编辑  收藏  举报