| /* | |
| * ReactOS Task Manager | |
| * | |
| * proclist.c | |
| * | |
| * Copyright (C) 1999 - 2001 Brian Palmer <brianp@reactos.org> | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; if not, write to the Free Software | |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| */ | |
| #define WIN32_LEAN_AND_MEAN /* Exclude rarely-used stuff from Windows headers */ | |
| #include <windows.h> | |
| #include <commctrl.h> | |
| #include <stdlib.h> | |
| #include <malloc.h> | |
| #include <memory.h> | |
| #include <tchar.h> | |
| #include <stdio.h> | |
| #include <winnt.h> | |
| #include "taskmgr.h" | |
| #include "perfdata.h" | |
| LRESULT CALLBACK ProcessListWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); | |
| LONG OldProcessListWndProc; | |
| LRESULT CALLBACK ProcessListWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) | |
| { | |
| HBRUSH hbrBackground; | |
| RECT rcItem; | |
| RECT rcClip; | |
| HDC hDC; | |
| int DcSave; | |
| switch (message) | |
| { | |
| case WM_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) GetClassLongPtr(hWnd, GCLP_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. | |
| */ | |
| ListView_GetItemRect(hWnd, 0, &rcClip, LVIR_BOUNDS); | |
| ListView_GetItemRect(hWnd, ListView_GetItemCount(hWnd) - 1, &rcItem, LVIR_BOUNDS); | |
| rcClip.bottom = rcItem.bottom; | |
| ListView_GetItemRect(hWnd, 0, &rcItem, LVIR_ICON); | |
| 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); | |
| return TRUE; | |
| } | |
| /* | |
| * We pass on all messages except WM_ERASEBKGND | |
| */ | |
| return CallWindowProc((WNDPROC)OldProcessListWndProc, hWnd, message, wParam, lParam); | |
| } |