Шаг 948 - CListBox::DrawItem.

Автор Каев А. Г.
virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );

Параметры
lpDrawItemStruct
Длинный указатель на структуру DRAWITEMSTRUCT, которая содержит информацию относительно типа требуемого рисунка.

Замечания
Вызванный рамкой, когда визуальный аспект изменился. ItemAction и itemState элементы структуры DRAWITEMSTRUCT определяют действие рисунка, которое должно выполниться.
По умолчанию, эта функция не делает ничего. Перегрузите эту функцию, чтобы выполнить рисунок для владельца - выводящегося объекта CListBox. Прикладная программа должна восстановить все графические объекты (GDI) интерфейса устройства, выбранные для контекста дисплея, обеспеченного в lpDrawItemStruct прежде, чем эта функция завершается.
См. CWnd::OnDrawItem для описания структуры DRAWITEMSTRUCT.

Пример

// CMyListBox - мой выведенный владельцем список, полученный из CMyListBox. Это 
// Пример выводит текст элемента, центрированный вертикально и горизонтально. 
// Управление списка было создано со следующим кодом:
//   pmyListBox->Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE,
//      myRect, pParentWnd, 1);
//
void CMyListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
   ASSERT(lpDrawItemStruct->CtlType == ODT_LISTBOX);
   LPCTSTR lpszText = (LPCTSTR) lpDrawItemStruct->itemData;
   ASSERT(lpszText != NULL);
   CDC dc;

   dc.Attach(lpDrawItemStruct->hDC);

   // Сохраните это значение, чтобы восстановить их при выполнено рисунок.
   COLORREF crOldTextColor = dc.GetTextColor();
   COLORREF crOldBkColor = dc.GetBkColor();

   // Если этот элемент выбран, установите фоновый цвет 
   // И текстовый цвет, чтобы приспособить значения. Также, стирание
   // Rect,  заполняя это с фоновым цветом.

   if ((lpDrawItemStruct->itemAction | ODA_SELECT) &&
      (lpDrawItemStruct->itemState & ODS_SELECTED))
   {
      dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
      dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
      dc.FillSolidRect(&lpDrawItemStruct->rcItem, 
         ::GetSysColor(COLOR_HIGHLIGHT));
   }
   else
      dc.FillSolidRect(&lpDrawItemStruct->rcItem, crOldBkColor);

   // Если этот элемент имеет центр, выведите красную рамку вокруг
   // Rect элемента.
   if ((lpDrawItemStruct->itemAction | ODA_FOCUS) &&
      (lpDrawItemStruct->itemState & ODS_FOCUS))
   {
      CBrush br(RGB(255, 0, 0));
      dc.FrameRect(&lpDrawItemStruct->rcItem, &br);
   }

   // Нарисовать текст
   dc.DrawText(
      lpszText,
      strlen(lpszText),
      &lpDrawItemStruct->rcItem,
      DT_CENTER|DT_SINGLELINE|DT_VCENTER);

   // Сбросить фоновый цвет и цвет текста обратно к их
   // первоначальным значениям.

   dc.SetTextColor(crOldTextColor);
   dc.SetBkColor(crOldBkColor);

   dc.Detach();
}

Hosted by uCoz