我正在使用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;
}
}
}