zoukankan      html  css  js  c++  java
  • 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);
    }
    }

  • 相关阅读:
    Git 上传本地项目
    virtual和override
    ASP .NET依赖注入理解
    dotnet不是内部或外部的命令,也不是可运行的程序或批处理文件
    C++ 简单选择排序
    C++ 排序
    iOS UIDynamic
    iOS Modal
    C++ 折半查找
    C++ 二叉链表
  • 原文地址:https://www.cnblogs.com/For-her/p/3437850.html
Copyright © 2011-2022 走看看