Я использую код ScrollHelper [1], чтобы попытаться реализовать прокрутку в моем объекте CWnd (ProgressListWnd). В этом CWnd у меня есть несколько дочерних объектов CWnd (ProgressWnd), помещаемых в родительский ProgressListWnd. Все, что я нашел, это работа с изображениями или текстом / фигурами, нарисованными в CWnd, а не только работа с родительским CWnd с дочерними CWnds.
Реализация ScrollHelper, кажется, «работает», но моя проблема в моей OnPaint в ProgressListWnd, я перемещаю каждый дочерний объект. Я читал, что когда вызывается OnScroll, он заканчивается отправкой события рисования в окно. Поскольку я начинаю с 0,0 и переставляю детей вниз, кажется, ничего не двигается.
Мой onPaint для родительского окна находится ниже. Все, что связано с полосой прокрутки, напрямую из класса ScrollHelper.
Есть ли более простой способ прокрутки в CWnd, который будет состоять только из дочерних объектов CWnd? Нужно ли вручную отслеживать позиции прокрутки и MoveWindow () на моих дочерних CWnds в отрицательные позиции при перерисовке (что будет необходимо при добавлении или удалении дочерних элементов)?
[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;
}
}
}
Задача ещё не решена.
Других решений пока нет …