Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CListCtrl::DrawItem(), Маленькие тайны.МФС. 
:(
    Опции темы
Coocky
Дата 14.11.2004, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


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

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



Слух на форуме прошел-нельзя перерисовать листконтрол.Мол Coocky лажу в топике кинул,работает только с листбоксом.А я слуху говорил "заполни LV_ITEM",а он не в какую.Все равно не работает smile
От слов к делу smile
Код

void CMyLictCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);//Поучаем указатель на контекст Листктрл
    CRect rcItem(lpDrawItemStruct->rcItem);//Получаем прямоугольник строки
    UINT uiFlags = ILD_TRANSPARENT;
    CImageList* pImageList;//Список
    int nItem = lpDrawItemStruct->itemID;//Номер строки

    static _TCHAR  szBuff[MAX_PATH];
    LPCTSTR pszText;
    LV_ITEM lvi;                  //Заполним структуру
    lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
    lvi.iItem = nItem;
    lvi.iSubItem = 0;
    lvi.pszText = szBuff;
    lvi.cchTextMax = sizeof(szBuff);
    lvi.stateMask = 0xFFFF;     // get all state flags
    CMyListCtrl::GetItem(&lvi);
CRect rcAllLabels;
    CMyListCtrl::GetItemRect(nItem, rcAllLabels, LVIR_BOUNDS);

    CRect rcLabel;
    CMyListCtrl::GetItemRect(nItem, rcLabel, LVIR_LABEL);


    COLORREF Bkgrnd;//Тут будет цвет строки
    COLORREF newс=m_text;//Цвет текста
  pDC->FillRect(rcAllLabels, &CBrush(Bkgrnd));//Заливаем
    

///////////////////////////////////////////////////////Рисуем иконы//////////////////////////////////////////////////////
    CRect rcIcon;
    CMyListCtrl::GetItemRect(nItem, rcIcon, LVIR_ICON);

    pImageList = CMyListCtrl::GetImageList(LVSIL_SMALL);
    if (pImageList)
    {
  UINT nOvlImageMask=lvi.state & LVIS_OVERLAYMASK;
  if (rcItem.left<rcItem.right-1)
  {
      ImageList_DrawEx(pImageList->m_hImageList, lvi.iImage,
        pDC->m_hDC,rcIcon.left,rcIcon.top, 16, 16,
        RGB(0,0,0), RGB(0,0,0), uiFlags | nOvlImageMask);
  }
    }



    CMyListCtrl::GetItemRect(nItem, rcItem, LVIR_LABEL);
    

    pszText =  szBuff;

    rcLabel = rcItem;
    
/////////////////////////////////////////Рисуем текст////////////////////////////////////////////////////////////////////
    pDC->SetTextColor(newc);

    pDC->DrawText(pszText,-1,rcLabel,DT_LEFT | DT_SINGLELINE | DT_NOPREFIX | DT_NOCLIP | DT_VCENTER);
/////////////////////////////////////Заполним Колонки для LVS_REPORT////////////////////////////////////////////
    LV_COLUMN lvc;
    lvc.mask = LVCF_FMT | LVCF_WIDTH;

    for(int nColumn = 1; CMyListCtrl::GetColumn(nColumn, &lvc); nColumn++)
    {
  rcItem.left = rcItem.right;
  rcItem.right += lvc.cx;

  CMyListCtrl::GetItemText(nItem, nColumn,
      szBuff, sizeof(szBuff));
                          

  pszText = szBuff;
  UINT nJustify = DT_LEFT;

  if(pszText == szBuff)
  {
      switch(lvc.fmt & LVCFMT_JUSTIFYMASK)//Проверим на стили
      {
      case LVCFMT_RIGHT:
    nJustify = DT_RIGHT;
    break;
      case LVCFMT_CENTER:
    nJustify = DT_CENTER;
    break;
      default:
    break;
      }
  }

  rcLabel = rcItem;
    

  pDC->DrawText(pszText, -1, rcLabel,
      nJustify | DT_SINGLELINE | DT_NOPREFIX | DT_NOCLIP | DT_VCENTER);
    }



//////////////////////////////////////////////////////////////////////ВСЕ/////////////////////////////////////////////////




А теперь в OnInitDialog()
Код



    m_List.m_text=RGB(255,0,0);//Цвет текста
                m_List.Bkgrnd=RGB(0,0,192);//Цвет фона

}    


Не забудьте стиль LVS_OWNERDRAWFIXED !
ПолучилсяГолубой фон и красные буквы smile
Вот удивил,скажите, цвет фона и текста можна можно проставить двумя функциями!
Правильно.Но можно перекрасить ЛЮБУЮ строку РАЗНЫМ цветом.Можно и рисунок(мы уже изучали),можно разным шрифтом.Все зависит от вашей фантазии.

Это сообщение отредактировал(а) Coocky - 22.8.2005, 13:25


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Step
Дата 22.8.2005, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

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



Цитата(Coocky @ 14.11.2004, 14:53)
Правильно.Но можно перекрасить ЛЮБУЮ строку РАЗНЫМ цветом.Можно и рисунок(мы уже изучали),можно разным шрифтом.Все зависит от вашей фантазии.

вот только разный высоты, будет посложнее или я ошибаюсь...
для разной высоты я полностью весь класс переписывал...

Добавлено @ 13:49
вернее свой писал


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Coocky
Дата 22.8.2005, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


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

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



Step
Да у пока это не надо...
Пусть перекрасят сначало просто.. smile

Это сообщение отредактировал(а) Coocky - 22.8.2005, 14:00


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Earnest
Дата 26.8.2005, 06:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Перекрашивание гораздо удобнее можно делать через CUSTOM DRAW - меньше кода писать надо. Где-то на форуме уже было обсуждение. C OWNERDRAW, например, для report-view, надо позиции всех элементов строки самому определять и рисовать. А через CUSTOMDRAW - подставил в нужный момент нужную кисть/карандаш/etc, а дальше все само рисуется.


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


 




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


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

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