滚动子窗口“溢出”到父窗口

时间:2017-05-19 14:03:11

标签: winapi mfc

我有一个父窗口和一个子窗口,类似于:

class CChildDlg : public CDialog
{
    ...
}

class CParentDlg : public CDialog
{
    CChildDlg m_cChildDlg;
    ...
}

在父亲的OnInitDialog函数中,我创建子窗口:

m_cChildDlg.CreateEx(0,
                     WC_STATIC,
                     NULL,
                     WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_HSCROLL|SS_NOTIFY,
                     {0,0,width,height},
                     this,
                     0);

我可以使用m_cChildDlg.ScrollWindow(xAmount, yAmount)轻松滚动子窗口。

问题是我在子窗口正上方的父窗口中有一些其他控件(工具栏等),子窗口在向上滚动时会“覆盖”。

我尝试调用SetWindowPos以便将子窗口设置在其他控件后面,但这似乎没有任何区别。

这就是MSDN对这两个功能所说的内容:

但是我找不到任何与此问题有关的内容,所以我猜这里可能还有其他一些我不知道的东西。

谢谢。

1 个答案:

答案 0 :(得分:2)

您没有将剪辑矩形(参数lpClipRect)传递给ScrollWindow()。来自reference

  

如果lpClipRect为NULL,则不对滚动执行剪裁   矩形。

这就是你获得溢出的原因。

你可以这样解决:

CRect rc; 
m_cChildDlg.GetClientRect(rc);
m_cChildDlg.ScrollWindow(xAmount, yAmount, nullptr, rc);