+ -
当前位置:首页 → 问答吧 → 垂直滚动条 移动对话框中的部分控件...

垂直滚动条 移动对话框中的部分控件...

时间:2011-12-28

来源:互联网

对话框窗体控件:第一行有两个Text控件,用来显示用户名和密码

下面有几十个Static控件,用来播放视频,
通过拖动垂直滚动条,显示多个通道的视频。

准备把几是个Static控件放在GroupBox中,
拖动鼠标时,只移动GroupBox和其中的Static控件,
第一行的Text控件不移动。

但是现在只可以整体移动所有控件,第一行的Text也跟着移动了。

作者: test111_112233   发布时间: 2011-12-28

C/C++ code
//初始化滚动条可移动范围
BOOL CDlgScrollDlg::OnInitDialog()
{
// TODO: Add extra initialization here
  SetScrollRange(SB_VERT, 0, 100);   //垂直滚动条

//调整窗体大小,因为同时拖放多个控件时的窗体比较大
//所以这里调整下大小
SetWindowPos(NULL,100,100,500,500,SWP_SHOWWINDOW);     

    return TRUE; 
}

//处理垂直滚动条
void CDlgScrollDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
    // TODO: Add your message handler code here and/or call default

    SCROLLINFO scrollinfo;

    GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
    switch (nSBCode)  
    {  
    case SB_BOTTOM:  
        ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMax)*10);  
        scrollinfo.nPos = scrollinfo.nMax;  
        SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
        break;  
    case SB_TOP:  
        ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMin)*10);  
        scrollinfo.nPos = scrollinfo.nMin;  
        SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
        break;  
    case SB_LINEUP:  
        scrollinfo.nPos -= 1;  
        if (scrollinfo.nPos)
        {  
            scrollinfo.nPos = scrollinfo.nMin;  
            break;  
        }  
        SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
        ScrollWindow(0,10);  
        break;  
    case SB_LINEDOWN:  
        scrollinfo.nPos += 1;  
        if (scrollinfo.nPos>scrollinfo.nMax)  
        {  
            scrollinfo.nPos = scrollinfo.nMax;  
            break;  
        }  
        SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
        ScrollWindow(0,-10);  
        break;  
    case SB_PAGEUP:  
        scrollinfo.nPos -= 5;  
        if (scrollinfo.nPos)
        {  
            scrollinfo.nPos = scrollinfo.nMin;  
            break;  
        }  
        SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
        ScrollWindow(0,10*5);  
        break;  
    case SB_PAGEDOWN:  
        scrollinfo.nPos += 5;  
        if (scrollinfo.nPos>scrollinfo.nMax)  
        {  
            scrollinfo.nPos = scrollinfo.nMax;  
            break;  
        }  
        SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
        ScrollWindow(0,-10*5);  
        break;  
    case SB_ENDSCROLL:  
        // MessageBox("SB_ENDSCROLL");  
        break;  
    case SB_THUMBPOSITION:  
        // ScrollWindow(0,(scrollinfo.nPos-nPos)*10);  
        // scrollinfo.nPos = nPos;  
        // SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
        break;  
    case SB_THUMBTRACK:  
        ScrollWindow(0,(scrollinfo.nPos-nPos)*10);  
        scrollinfo.nPos = nPos;  
        SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
        break;  
    }

    CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}

作者: test111_112233   发布时间: 2011-12-28

把需要滚动的放在一个子对话框里,子对话框加滚动,这就不会影响其它的控件了
要么就MoveWindow来实现

作者: zgl7903   发布时间: 2011-12-28

回复等加分

作者: hustgonia   发布时间: 2011-12-28