在具有多个CWnd Children的CWnd中实现滚动

时间:2013-08-07 02:38:31

标签: c++ visual-c++ mfc scroll scrollbar

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

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

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

是否有一种更简单的方法来滚动CWnd,它只包含儿童CWnd对象?我是否需要在重新绘制时手动跟踪滚动位置和我的孩子CWW上的MoveWindow()到负面位置(在添加或删除孩子时这是必要的)?

[1]

http://www.codeproject.com/Articles/10902/Add-Scrolling-to-a-CWnd-or-CDialog-using-a-C-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;
        }
    }
}

0 个答案:

没有答案