滚动时对话框窗口无法正确重画?

时间:2019-04-16 00:47:25

标签: c++ mfc

我目前有一个对话框窗口,其参数(大小和控件)在资源文件中定义。此对话框被添加为MAINFRM.cpp中的子窗口,如下所示:

enter image description here

在分辨率较低的显示器上,由于底部被切开,因此我添加了滚动条以滚动底部内容。我遇到的问题是,每当我开始滚动时,无论是通过拖动栏还是单击向上/向下按钮,对话框窗口都会被线条扭曲:

enter image description here enter image description here

有问题的代码:

OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    int incrementor;

    // Switch statement code to determine incrementor value

    if (incrementor != 0)
    {
        ScrollWindow(0, -m_textHeight* incrementor, NULL, NULL);
        SetScrollPos(SB_VERT, m_scrollNpos, TRUE);
        UpdateWindow();
    }
}

我已经尝试搜索类似的问题,并用以下代码替换了if块代码,但无济于事:

RECT rect;
GetClientRect(&rect);
ScrollWindowEx(0, -m_textHeight* incrementor, &rect, NULL, NULL, NULL,
               SW_INVALIDATE| SW_SCROLLCHILDREN);
SetScrollPos(SB_VERT, m_scrollNpos, TRUE);
UpdateWindow();

也将UpdateWindow()替换为:

::RedrawWindow(m_hWnd, &rect, NULL, RDW_UPDATENOW | RDW_ALLCHILDREN);

是什么原因导致此问题?

谢谢!

0 个答案:

没有答案