| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Рисуем элементы сами.Но не все. |
| Автор: Coocky 6.11.2004, 16:07 | ||||||||||
| Пролог Step
Coocky
Step
М-да...Давайте решим задачу Step_a Есть такое сообщение для многих элементов WM_DRAWITEM.Она вызывает обработчик DrawItem(), в который передается указатель на структуру DRAWITEMSTRUCT содержащей информация о том, что нужно отрисовывать.Вот список элементов управления,где она работает: CTabCtrl CListBox CButton CComboBox CCheckListBox CMenu CHeaderCtrl CStatusBar CListCtrl Всех не упомню.См.МСДН Давайте попробуем разместиь рисунок в CListBox: Создадим MyListBox класс производный от CListBox Добавим сообщениеWM_DRAWITEM
Если вы запустите данный код,и добавите строку,все отработает.Но добавите еще одну,и первая пропадет.Короче всегда будет видна последняя строка Почему?Я покурю,а вы подумайте Догадались.Правильно.Срабатывает принцип черепицы.Последний элемент перерисовывается вместе с фоном,перекрывая предыдущий Изменим немного код Добавим переменную BOOL m_Flag; Поставим ей значений m_Flag=TRUE;
Т.е при добавление строки,у нас всегда рисовался фон.А мы сделали так,что б это было всего один раз Эпилог Я пока не знаю,как добавить фон на элементы управления,где нет этой функции.Пока не знаю. Но как только узнаю,расскажу З.Ы.Кстати у Step_a есть прога,которая позволяет делать анимацию в CStatusBar.Опять же с помощью WM_DRAWITEM.Если че ,все к нему |