0

我正在使用 ScrollHelper [1] 代码尝试在我的 CWnd (ProgressListWnd) 对象中实现滚动。在这个 CWnd 中,我有多个子 CWnd 对象 (ProgressWnd) 被放置在父 ProgressListWnd 中。我发现的一切都是处理在 CWnd 中绘制的图像或文本/形状,而不是仅处理带有子 CWnd 的父 CWnd。

实现 ScrollHelper 似乎“工作”,但我的问题是在 ProgressListWnd 中的 OnPaint 中,我重新定位每个子对象。我读到,当调用 OnScroll 时,它以向窗口发送绘制事件结束。由于我从 0,0 开始并向下重新定位孩子,因此似乎没有任何移动。

我的父窗口的 onPaint 如下。任何与滚动条相关的内容都直接来自 ScrollHelper 类。

是否有一种更简单的方法可以在仅包含子 CWnd 对象的 CWnd 中滚动?重新绘制时,我是否需要手动跟踪我的孩子 CWnds 上的滚动位置和 MoveWindow() 到负位置(添加或删除孩子时需要这样做)?

[1]

http://www.codeproject.com/Articles/10902/Add-Scrolling-to-a-CWnd-or-CDialog-using-aC-Helpe

void CProgressListWnd::OnPaint()
{
    CPaintDC dc(this); // device context for painting

    POSITION pos = m_ProgressMap.GetStartPosition();
    int corner = 0;
    while(pos != NULL)
    {
        int uid = 0;
        CProgressWnd* pWnd = NULL;
        m_ProgressMap.GetNextAssoc(pos, uid, pWnd);
        if(pWnd != NULL)
        {
            pWnd->MoveWindow(0,corner,400,90);
            corner = corner + 90;
        }
    }
}
4

0 回答 0