А>Кто может посоветовать книжку или статью по отрисовке GUI.
Годится любая книжка из серии "Освой самостоятельно за ХХ дней".
Ключевые слова: WM_PAINT, GDI, CDC, CPaintDC (раз уж говорим о MFC).
Например вот
_____________________
С уважением,
Stanislav V. Zudin
Re[2]: Отрисовка GUI в MFC.
От:
Аноним
Дата:
06.07.12 06:50
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Здравствуйте, Аноним, Вы писали:
А>>Кто может посоветовать книжку или статью по отрисовке GUI.
SVZ>Годится любая книжка из серии "Освой самостоятельно за ХХ дней". SVZ>Ключевые слова: WM_PAINT, GDI, CDC, CPaintDC (раз уж говорим о MFC). SVZ>Например вот
Спасибо. Это уже освоено. У меня больше интересует ключевое слово WM_ERASEBKGND,
что бы оптимизировать отрисовку большого количества дочерних окон.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>>Здравствуйте, Аноним, Вы писали:
А>>>Кто может посоветовать книжку или статью по отрисовке GUI.
SVZ>>Годится любая книжка из серии "Освой самостоятельно за ХХ дней". SVZ>>Ключевые слова: WM_PAINT, GDI, CDC, CPaintDC (раз уж говорим о MFC). SVZ>>Например вот
А>Спасибо. Это уже освоено. У меня больше интересует ключевое слово WM_ERASEBKGND, А>что бы оптимизировать отрисовку большого количества дочерних окон.
Гм, WM_ERASEBKGND вместе с "большим количеством дочерних окон" — интересное сочетание.
Скины?
Т.к. задача не ясна, а ты не колешься, то для начала напомню про флаг WS_CLIPCHILDREN.
Если дочерних контролов действительно много и это действительно необходимо, то возможно стоит перейти на windowless контролы. Например посмотреть в сторону htmlayout. С MFC оно хорошо стыкуется.
_____________________
С уважением,
Stanislav V. Zudin
Здравствуйте, MasterZiv, Вы писали:
MZ>On 07/06/2012 08:57 AM, Аноним 717 wrote:
>> Кто может посоветовать книжку или статью по отрисовке GUI.
MZ>Фень Юань, Великий Мастер WinGUI.
+100500
Был еще очень толковый двухтомник Чарльза Петзольда — Программирование для Windows.
Но это все больше по Win-API, по MFC — была отличная книжка авторов Круглинский, Уингоу, Шефферд.
На самом деле надо отделять программирование GUI в Win32/64/16 от MFC, поскольку
MFC кроме предоставления каких-то утилит, достаточно полезных в общем, особенно
ничего не делает для того, чтобы как-то изменить программирование GUI -- этим
он кстати и хорош, потому что ничего не запрещает делать и ничего не скрывае.
Только помогает.
Так что надо искать две книги -- одну по GUI/Win32, другую -- по MFC.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Отрисовка GUI в MFC.
От:
Аноним
Дата:
11.07.12 03:54
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:
А>>Спасибо. Это уже освоено. У меня больше интересует ключевое слово WM_ERASEBKGND, А>>что бы оптимизировать отрисовку большого количества дочерних окон.
SVZ>Гм, WM_ERASEBKGND вместе с "большим количеством дочерних окон" — интересное сочетание. SVZ>Скины? SVZ>Т.к. задача не ясна, а ты не колешься, то для начала напомню про флаг WS_CLIPCHILDREN.
SVZ>Если дочерних контролов действительно много и это действительно необходимо, то возможно стоит перейти на windowless контролы. Например посмотреть в сторону htmlayout. С MFC оно хорошо стыкуется.
Ситуация в следующем.
Имеется самописный сплитер (стиль сплитера WS_CLIPSIBLINGS | WS_CLIPCHILDREN).
В правой части которого размещается окно(стиль окна WS_CLIPSIBLINGS). Окно содержит стандартные элементы управления и OwnerDraw лист-контрол. В процессе работы периодически в Окно прилетает WM_ERASEBKGND . Оно приходит на изменения размера и еще в некоторых случаях (например после того как пропадает тул-тип на лист-контроле). Если я оставляю обработку WM_ERASEBKGND стандартную, то после пропадания тул-типа остается очищенная область лист-контрола и перерисовка лист-контролу не приходит.
1-ый вариант:
В обработчик WM_ERASEBKGND Окна я добавил принудительную перерисовку лист-контрола.
Все Ок! Но выяснилось НО, когда подключаемся удаленно то видим, что лист-контрол после каждого тул-типа заметно перерисовывается(мерцает).
2-ой вариант:
В обработчике WM_ERASEBKGND Окна я убрал перерисовку и всегда возвращаю TRUE. Мерцание прекратилось. Возникла другая проблема. Когда мы уменьшаем размер Окна сплитером, т.е. сдвигаем его вправо, лист-контрол сдвигается вправо и заезжает на ту область окна которую лист-контрол не занимает.
При этом лист-контрол сам себя корректно отрисовывает в новых размерах. Когда увеличиваем размер окна, т.е. двигаем сплитер влево, то Окно перерисовывается корректно и мусор исчезает.
По требованию использовать windowless контролы нельзя.
Во в связи с этим мне бы и хотелось узнать больше про WM_ERASEBKGND и про механизм перерисовки.
А>Во в связи с этим мне бы и хотелось узнать больше про WM_ERASEBKGND и про механизм перерисовки.
если сейчас не глючу, то надо идти в сторону перерисовки не всей области контролла, а только той части, которая видна пользователю. При этом время отрисовки существенно сокращается (ну это и понятно — экран же не бесконечен)
А>Кто может посоветовать книжку или статью по отрисовке GUI.
Рекомендую книгу великого Фень Юаня, если ещё найдёшь конечно.
MFC тут практически ни при чём, он очень мало помогает при рисовании.
Всё ведётся через объекты GDI, а в MFC только прямые 1:1 враперы над объектами GDI.