Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рисуем элементы сами.Но не все. Маленькие тайны.МФС. 
:(
    Опции темы
Coocky
Дата 6.11.2004, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Пролог
Step
Цитата
как разместить рисунок в качестве фона....
что не пытался не помогает...

Coocky
Цитата
Разместил,или помочь?
Для LISTVIEW просто,через DrawItem.
Для TreeListCtrl этой функции нет,но скорей всего через OnPaint();Не пробовал,но помочь хотел поиском решения проблемы

Step
Цитата
Coocky, мне не рисунок к итему нужен, а фон для всего элемента ввиде рисунка

М-да...Давайте решим задачу Step_a
Есть такое сообщение для многих элементов WM_DRAWITEM.Она вызывает обработчик DrawItem(), в который передается указатель на структуру DRAWITEMSTRUCT содержащей информация о том, что нужно отрисовывать.Вот список элементов управления,где она работает:
CTabCtrl
CListBox
CButton
CComboBox
CCheckListBox
CMenu
CHeaderCtrl
CStatusBar
CListCtrl

Всех не упомню.См.МСДН smile
Давайте попробуем разместиь рисунок в CListBox:
Создадим MyListBox класс производный от CListBox
Добавим сообщениеWM_DRAWITEM
Код

void MyListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
CRect rect;
rect=lpDrawItemStruct->rcItem;
dc.SetTextColor(RGB(0,0,0));
CBitmap cb;
CDC dcTemp;
cb.LoadBitmap(IDB_BITMAP);
dcTemp.CreateCompatibleDC(&dc);
dcTemp.SelectObject(cb);
dc.BitBlt(0,0,300,300,&dcTemp,0,0,SRCCOPY);
dc.SetBkMode(TRANSPARENT);
dc.DrawText((LPSTR)lpDrawItemStruct->itemData,rect,DT_LEFT|DT_WORDBREAK);
dc.Detach;


Если вы запустите данный код,и добавите строку,все отработает.Но добавите еще одну,и первая пропадет.Короче всегда будет видна последняя строка smile
Почему?Я покурю,а вы подумайте smile .................................................
Догадались.Правильно.Срабатывает принцип черепицы.Последний элемент перерисовывается вместе с фоном,перекрывая предыдущий smile
Изменим немного код
Добавим переменную BOOL m_Flag;
Поставим ей значений m_Flag=TRUE;
Код

CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
CRect rect;
rect=lpDrawItemStruct->rcItem;
dc.SetTextColor(RGB(0,0,0));
if(m_Flag==TRUE) {
CBitmap cb;
CDC dcTemp;
cb.LoadBitmap(IDB_BITMAP);
dcTemp.CreateCompatibleDC(&dc);
dcTemp.SelectObject(cb);
dc.BitBlt(0,0,300,300,&dcTemp,0,0,SRCCOPY);m_Flag=FALSE;}
dc.SetBkMode(TRANSPARENT);
dc.DrawText((LPSTR)lpDrawItemStruct->itemData,rect,DT_LEFT|DT_WORDBREAK);
dc.Detach;


Т.е при добавление строки,у нас всегда рисовался фон.А мы сделали так,что б это было всего один раз smile
Эпилог

Я пока не знаю,как добавить фон на элементы управления,где нет этой функции.Пока не знаю.
Но как только узнаю,расскажу smile
З.Ы.Кстати у Step_a есть прога,которая позволяет делать анимацию в CStatusBar.Опять же с помощью WM_DRAWITEM.Если че ,все к нему smile smile

Это сообщение отредактировал(а) Coocky - 6.11.2004, 16:09


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0793 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.