• MFC MFC对话框滚动条的使用


        对话框的(上下/左右)滚动事件,比如,把一个比较大的对话框放入tab控件的某一页时,就需要添加滚动条。在使用了java和qt等图形界面化的集成开发环境之后,再使用MFC,就会发现,想要让一个对话框滚动是多么麻烦的一件事情。下面我记录一下自己在使用MFC对话框自己带的垂直滚动条的过程。

      (1)设置对话框的vertical scrollbar属性为true;

      (2)初始化滚动条,如下:    

     
    void Dlg_WholeTest_Test::initScrollbar()
    {
    SCROLLINFO scrollinfo;
    GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
    scrollinfo.nPage=10; //设置滑块大小
    scrollinfo.nMax=75; //设置滚动条的最大位置0--75
    SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
    }
     

      在OnInitDialog函数中调用该初始化函数即可。

      (3)重新实现OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)消息处理函数。

     
    void MyDialog::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)   //对话框的滚动效果
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值

    SCROLLINFO scrollinfo;
    GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
    int unit=3;
    switch (nSBCode)
    {
    case SB_LINEUP: //Scroll one line up
    scrollinfo.nPos -= 1;
    if (scrollinfo.nPos<scrollinfo.nMin)
    {
    scrollinfo.nPos = scrollinfo.nMin;
    break;
    }
    SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
    ScrollWindow(0,unit);
    break;
    case SB_LINEDOWN: //Scroll one line down
    scrollinfo.nPos += 1;
    if (scrollinfo.nPos+scrollinfo.nPage>scrollinfo.nMax) //此处一定要注意加上滑块的长度,再作判断
    {
    scrollinfo.nPos = scrollinfo.nMax;
    break;
    }
    SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
    ScrollWindow(0,-unit);
    break;
    case SB_PAGEUP: //Scroll one page up.
    scrollinfo.nPos -= 5;
    if (scrollinfo.nPos<=scrollinfo.nMin)
    {
    scrollinfo.nPos = scrollinfo.nMin;
    break;
    }
    SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
    ScrollWindow(0,unit*5);
    break;
    case SB_PAGEDOWN: //Scroll one page down
    scrollinfo.nPos += 5;
    if (scrollinfo.nPos+scrollinfo.nPage>=scrollinfo.nMax) //此处一定要注意加上滑块的长度,再作判断
    {
    scrollinfo.nPos = scrollinfo.nMax;
    break;
    }
    SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
    ScrollWindow(0,-unit*5);
    break;
    case SB_ENDSCROLL: //End scroll
    break;
    case SB_THUMBPOSITION: //Scroll to the absolute position. The current position is provided in nPos
    break;
    case SB_THUMBTRACK: //Drag scroll box to specified position. The current position is provided in nPos
    ScrollWindow(0,(scrollinfo.nPos-nPos)*unit);
    scrollinfo.nPos = nPos;
    SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
    break;
    }

    CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
    }
     
  • 相关阅读:
    汇编学习笔记(25)
    在QT C++中调用 Python并将软件打包发布(裸机可运行)
    集合类
    解决python matplotlib 中文字体的显示乱码-Windows系统;RuntimeWarning: Glyph
    元数据库设计
    解决方案sln工程csproj
    托管代码和非托管代码的区别
    IIS安装和使用URL重写工具-URL Rewrite
    SSL证书及使用
    rpc和rpcwithcert两个虚拟目录
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/6013922.html
Copyright © 2020-2023  润新知