+ -
当前位置:首页 → 问答吧 → 拖动对话框窗体滚动条, 窗体内Static控件中的视频刷新出问题!!!

拖动对话框窗体滚动条, 窗体内Static控件中的视频刷新出问题!!!

时间:2011-12-26

来源:互联网

窗体上拖放50个Static控件,
把Static控件的句柄传给厂商提供的DLL,用来播放视频。

出现的问题是: 滚动条向下或向右拖动时,拖动滚动条的时候,左上角会有花屏。

对话框窗体属性中,风格设置显示水平和垂直滚动条。


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

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

    return TRUE; 
}

//处理水平滚动条
void CDlgScrollDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
    // TODO: Add your message handler code here and/or call default
    SCROLLINFO scrollinfo;  

    GetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);  
    switch (nSBCode)  
    {  
    case SB_LEFT:  
        ScrollWindow((scrollinfo.nPos-scrollinfo.nMin)*10,0);  
        scrollinfo.nPos = scrollinfo.nMin;  
        SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);  
        break;  
    case SB_RIGHT:  
        ScrollWindow((scrollinfo.nPos-scrollinfo.nMax)*10,0);  
        scrollinfo.nPos = scrollinfo.nMax;  
        SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);  
        break;  
    case SB_LINELEFT:  
        scrollinfo.nPos -= 1;  
        if (scrollinfo.nPos)
        {  
            scrollinfo.nPos = scrollinfo.nMin;  
            break;  
        }  
        SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);  
        ScrollWindow(10,0);  
        break;  
    case SB_LINERIGHT:  
        scrollinfo.nPos += 1;  
        if (scrollinfo.nPos>scrollinfo.nMax)  
        {  
            scrollinfo.nPos = scrollinfo.nMax;  
            break;  
        }  
        SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);  
        ScrollWindow(-10,0);  
        break;  
    case SB_PAGELEFT:  
        scrollinfo.nPos -= 5;  
        if (scrollinfo.nPos)
        {  
            scrollinfo.nPos = scrollinfo.nMin;  
            break;  
        }  
        SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);  
        ScrollWindow(10*5,0);  
        break;  
    case SB_PAGERIGHT:  
        scrollinfo.nPos += 5;  
        if (scrollinfo.nPos>scrollinfo.nMax)  
        {  
            scrollinfo.nPos = scrollinfo.nMax;  
            break;  
        }  
        SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);  
        ScrollWindow(-10*5,0);  
        break;  
    case SB_THUMBPOSITION:  
        break;  
    case SB_THUMBTRACK:  
        ScrollWindow((scrollinfo.nPos-nPos)*10,0);  
        scrollinfo.nPos = nPos;  
        SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);  
        break;  
    case SB_ENDSCROLL:  
        break;  
    }  

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

//处理垂直滚动条
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-26

在滚动条事件中, 填加this->Invalidate(TURE);或者UpdateWindow();

这个问题还是不可以解决。

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