winapi - 将子窗口 "overflows"滚动到父窗口

标签 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 上对这两个函数是这么说的:

但是我还没有找到与这个问题相关的任何内容,所以我猜测我可能还遗漏了其他东西。

谢谢。

最佳答案

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

If lpClipRect is NULL, no clipping is performed on the scroll rectangle.

这就是为什么你会溢出。

你可以这样修复它:

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

关于winapi - 将子窗口 "overflows"滚动到父窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44072111/

相关文章:

c++ - 使用 VirtualDisk API 创建 VHD 文件

c# - 遗留 16 位应用程序的 Kiosk 模式

c - NtDll是否真的导出C运行时函数,并且可以在我的应用程序中使用它们吗?

c++ - 获取光标位置和权限

c++ - 将项目转换为支持 Unicode 后,CreateProcess 不运行 .cmd 文件

c++ - 可用的 Visual Studio 2008 c++ 项目平台的优缺点?

c++ - 确定与 URI 方案关联的默认图标

c - VB6字符串到char*转换: avoid null character

c++ - MFC:为什么加速器不起作用?

c++ - Windows.h错误