Уважаемые господа программисты !
Необходимо сделать smoothscroll в CListBox, который содержит дочерние окна (например кнопки), но при этом использовать
standard scrollbar (который есть у каждого окна по-умолчанию).
Проблема: в процессе плавной прокрутки (весь цикл смещения на высоту элемента вверх или вниз разбивается на несколько
тактов) появляется копия внедрённой кнопки в смещённых координатах и двигается вместе с оригиналом... в реалтайме это
выглядит так, что проскакивает какая-то фигня при прокрутке.
Что я делаю:
1. Создаю CListBox.
2. Набиваю элементами и дочерними окнами (кнопками).
3. Перехватываю события WM_MOVE у каждой кнопки (которое отсылается из функции ScrollWindowEx в недрах standard scroll
bara, который по-умолчанию прилеплен к любому CommonContorl'у (известно, что при включенном smooth scrolle, эта функция
разбивает процесс скроллинга на несколько тактов с задержками)).
4. Оказывается, что между приходом первого WM_MOVE и следующим тактом smoothscroll-инга что-то ляпает мне мои дочерние окна
по смещённым координатам (причём ниже родных координат где-то на 150% высоты кнопки, да ещё и вправо сдвигает на пару
пикселей).
5. На втором такте WM_MOVE я пытался сделать pParent->RedrawWindow(), this->RedrawWindow(). Работает, пока я ещё в
обработчике кнопочного WM_MOVE'a... после ухода в недра выньды — опять ляпа... (но уже смещённая на 1 пиксель — урра !!! — в
Microsoft продумали всё до мелочей, и решили, что это неправильно оставлять изменившиеся окна без надзора).
6. Дальше — больше. Ляпа начинает ползти вверх вместе с находящимся почти над ним настоящим изображением кнопки.
7. В итоге получаем нашу кнопку, которая кое-как доползла до нового места, ну и ессесно её копию прямо под ней и правее на
пару пикселов).
www.codeguru.com — нет решения (есть похожие примеры, но там тот же глюк)
www.codeproject.com — нет решения
www.rsdn.ru — ...
... — ...
www.google.com — нет похожих ситуаций.....
Впринципе, если перехватить в CListBox ещё и WM_VSCROLL, да перед отдачей управления родному окну поставить всем дочерним
кнопкам SetRedraw(0), а потом у них в WM_MOVE поставить SetRedraw(1), причём без всяких pParent->RedrawWindow() и
this->RedrawWindow(), — тогда всё работает, но при этом кнопка мерцает при прокрутке....
Вопрос на засыпку:
Как мне сделать нормальный List, который может содержать кнопки, которые бы прокручивалися вместе со строками этого List
???
Откройте священную тайну !!!
АААА !!!! Помогите кто-нибудь....

Неужели писать свой CNormalSmoothScroll ???