Maks150988
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Здраствуйте. Эм, необходимо на заднем фоне листбокса отображать битмап. Сделал следующее: Код: WM_DRAWITEM : begin case wParam of ID_PLAYLIST_LISTBOX : begin ListWnd := PDRAWITEMSTRUCT(lParam).hwndItem; RectLB := PDRAWITEMSTRUCT(lParam).rcItem; ListDC := PDRAWITEMSTRUCT(lParam).hDC; GetClientRect(GetDlgItem(hWndApp, ID_PLAYLIST_LISTBOX), Rect); MemoryDC := CreateCompatibleDC(ListDC); SelectObject(MemoryDC, lBoxBitmap); GetObject(lBoxBitmap, SizeOf(TBitmapInfo), @BitmapInfo); BitBlt(ListDC, ((Rect.Right - Rect.Left) - BitmapInfo.bmiHeader.biWidth) - 7, ((Rect.Bottom - Rect.Top) - BitmapInfo.bmiHeader.biHeight) - 7, BitmapInfo.bmiHeader.biWidth, BitmapInfo.bmiHeader.biHeight, MemoryDC, 0, 0, SRCAND); SelectObject(MemoryDC, ListDC); DeleteObject(MemoryDC); DeleteDC(MemoryDC); if Integer(PDRAWITEMSTRUCT(lParam).ItemID) > -1 then begin if (PDRAWITEMSTRUCT(lParam).itemState and ODS_SELECTED) <> 0 then begin FillRect(ListDC, RectLB, GetSysColorBrush(COLOR_HIGHLIGHT)); SetBkMode(ListDC, GetSysColor(COLOR_HIGHLIGHT)); SetTextColor(ListDC, GetSysColor(COLOR_HIGHLIGHTTEXT)); end else begin FillRect(ListDC, RectLB, GetSysColorBrush(COLOR_WINDOW)); SetBkColor(ListDC, GetSysColor(COLOR_WINDOW)); SetTextColor(ListDC, GetSysColor(COLOR_WINDOWTEXT)); if (PDRAWITEMSTRUCT(lParam).itemID mod 2) <> 0 then begin BrushNew := CreateSolidBrush(RGB(245, 245, 245)); BrushOld := SelectObject(ListDC, BrushNew); FillRect(ListDC, RectLB, BrushNew); SetBkColor(ListDC, RGB(245, 245, 245)); SelectObject(ListDC, BrushOld); DeleteObject(BrushNew); end; end; RectLB.Left := RectLB.Left + 5; RectLB.Right := RectLB.Right - 5; SendMessage(ListWnd, LB_GETTEXT, PDRAWITEMSTRUCT(lParam).ItemID, LongInt(@TextLB[0])); DrawText(ListDC, @TextLB[0], - 1, RectLB, DT_SINGLELINE or DT_VCENTER); end; end; end; end; | Все бы ничего, но когда скроллируешь контрол через его скроллер - изображеия накладываются друг на друга. Пробовал обновлять контро/окно - но тут тормоза получаются. Как зачищать фон перед наложением картинки? |