{
HBRUSH hbrBackground;
RECT rcItem;
RECT rcClip;
HDChDC;
int DcSave;
switch (message)
{
caseWM_ERASEBKGND:
/* * The list control produces a nasty flicker * when the user is resizing the window because * it erases the background to white, then * paints the list items over it. * * We will clip the drawing so that it only * erases the parts of the list control that * show only the background. *//* * Get the device context and save it's state * to be restored after we're done */
hDC = (HDC) wParam;
DcSave = SaveDC(hDC);
/* * Get the background brush */
hbrBackground = (HBRUSH)(LONG_PTR) GetClassLongPtrW(hWnd, GCL_HBRBACKGROUND);
/* * Calculate the clip rect by getting the RECT * of the first and last items and adding them up. * * We also have to get the item's icon RECT and * subtract it from our clip rect because we don't * use icons in this list control. */
rcClip.left = LVIR_BOUNDS;
SendMessageW(hWnd, LVM_GETITEMRECT, 0, (LPARAM)&rcClip);
rcItem.left = LVIR_BOUNDS;
SendMessageW(hWnd, LVM_GETITEMRECT, ListView_GetItemCount(hWnd) - 1, (LPARAM)&rcItem);
rcClip.bottom = rcItem.bottom;
rcClip.right = rcItem.right;
rcItem.left = LVIR_ICON;
SendMessageW(hWnd, LVM_GETITEMRECT, 0, (LPARAM)&rcItem);
rcClip.left = rcItem.right;
/* * Now exclude the clip rect */ExcludeClipRect(hDC, rcClip.left, rcClip.top, rcClip.right, rcClip.bottom);
/* * Now erase the background * * * FIXME: Should I erase it myself or * pass down the updated HDC and let * the default handler do it? */GetClientRect(hWnd, &rcItem);
FillRect(hDC, &rcItem, hbrBackground);
/* * Now restore the DC state that we * saved earlier */RestoreDC(hDC, DcSave);
returnTRUE;
}
/* * We pass on all messages except WM_ERASEBKGND */returnCallWindowProcW(OldProcessListWndProc, hWnd, message, wParam, lParam);
}
Generated on Sun May 27 2012 04:44:01 for ReactOS by
1.7.6.1
ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.