Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2008, 16:33   #1
instance
Новичок
Джуниор
 
Регистрация: 12.05.2008
Сообщений: 1
По умолчанию ListView: как поймать CDDS_POSTERASE в NM_CUSTOMDRAW

Рисую полноцветные (с альфаканалом) иконки в report-style ListView.

отлавливаю CUSTOMDRAW:

Код:
          NM_CUSTOMDRAW:
            case PNMLVCustomDraw(LParam)^.nmcd.dwDrawStage of
              CDDS_PREPAINT:
                LResult(Result) :=  CDRF_NOTIFYITEMDRAW or CDRF_NOTIFYPOSTERASE;
              CDDS_ITEMPREPAINT:
                LResult(Result) := CDRF_NOTIFYPOSTPAINT;
              CDDS_ITEMPOSTPAINT, CDDS_POSTPAINT:
                DrawListViewItem(PNMLVCustomDraw(LParam)^);
            end;
рисую:
Код:
procedure DrawListViewItem(var LVDI: TNMLVCustomDraw);
var
  Brush: HBRUSH;
  ItemRect: TRect;
  Pen: HPEN;
  ROP: Integer;

  H: THandle;
begin
  with LVDI.nmcd do
  begin
    ListView_GetItemRect(hdr.hwndFrom, dwItemSpec, ItemRect, LVIR_BOUNDS);
    H := LoadImage(hInstance, 'testico', IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
    DrawIconEx(hdc, itemrect.Left, itemrect.Top,
          H, 16, 16, 0, 0, DI_NORMAL);
    DestroyIcon(H);
  end;
end;
Иногда происходит двойная отрисовка иконки без очистки фона, и альфаканал портится (вторая иконка сверху):

Идея одна: производить отрисовку в CDDS_POSTERASE. Но как сделать, чтобы она хотя бы пришла в NM_CUSTOMDRAW? Все перерыл, ни одного примера не нашел..
instance вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ListView aesoem Общие вопросы Delphi 4 05.07.2008 15:55
ListView Старовъръ Компоненты Delphi 8 02.07.2008 19:08
ListView Terran Общие вопросы Delphi 2 05.04.2008 23:15
ListView Drain Общие вопросы Delphi 3 13.02.2008 16:10
Как поймать событие в COM? den303 Общие вопросы Delphi 0 13.09.2007 12:06