ReactOS  0.4.12-dev-36-g472787f
proclist.c File Reference
#include "precomp.h"
Include dependency graph for proclist.c:

Go to the source code of this file.

Functions

INT_PTR CALLBACK ProcessListWndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 

Variables

WNDPROC OldProcessListWndProc
 

Function Documentation

◆ ProcessListWndProc()

INT_PTR CALLBACK ProcessListWndProc ( HWND  hWnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 31 of file proclist.c.

Referenced by ProcessPageWndProc().

32 {
33  HBRUSH hbrBackground;
34  RECT rcItem;
35  RECT rcClip;
36  HDC hDC;
37  int DcSave;
38 
39  switch (message)
40  {
41  case WM_ERASEBKGND:
42 
43  /*
44  * The list control produces a nasty flicker
45  * when the user is resizing the window because
46  * it erases the background to white, then
47  * paints the list items over it.
48  *
49  * We will clip the drawing so that it only
50  * erases the parts of the list control that
51  * show only the background.
52  */
53 
54  /*
55  * Get the device context and save it's state
56  * to be restored after we're done
57  */
58  hDC = (HDC) wParam;
59  DcSave = SaveDC(hDC);
60 
61  /*
62  * Get the background brush
63  */
64  hbrBackground = (HBRUSH)(LONG_PTR) GetClassLongPtrW(hWnd, GCL_HBRBACKGROUND);
65 
66  /*
67  * Calculate the clip rect by getting the RECT
68  * of the first and last items and adding them up.
69  *
70  * We also have to get the item's icon RECT and
71  * subtract it from our clip rect because we don't
72  * use icons in this list control.
73  */
74  rcClip.left = LVIR_BOUNDS;
75  SendMessageW(hWnd, LVM_GETITEMRECT, 0, (LPARAM)&rcClip);
76  rcItem.left = LVIR_BOUNDS;
77  SendMessageW(hWnd, LVM_GETITEMRECT, ListView_GetItemCount(hWnd) - 1, (LPARAM)&rcItem);
78  rcClip.bottom = rcItem.bottom;
79  rcClip.right = rcItem.right;
80  rcItem.left = LVIR_ICON;
81  SendMessageW(hWnd, LVM_GETITEMRECT, 0, (LPARAM)&rcItem);
82  rcClip.left = rcItem.right;
83 
84  /*
85  * Now exclude the clip rect
86  */
87  ExcludeClipRect(hDC, rcClip.left, rcClip.top, rcClip.right, rcClip.bottom);
88 
89  /*
90  * Now erase the background
91  *
92  *
93  * FIXME: Should I erase it myself or
94  * pass down the updated HDC and let
95  * the default handler do it?
96  */
97  GetClientRect(hWnd, &rcItem);
98  FillRect(hDC, &rcItem, hbrBackground);
99 
100  /*
101  * Now restore the DC state that we
102  * saved earlier
103  */
104  RestoreDC(hDC, DcSave);
105 
106  return TRUE;
107  }
108 
109  /*
110  * We pass on all messages except WM_ERASEBKGND
111  */
113 }
#define HDC
Definition: msvc.h:22
Definition: tftpd.h:59
#define TRUE
Definition: types.h:120
#define LVIR_ICON
Definition: commctrl.h:2443
HBRUSH hbrBackground
Definition: enumwnd.c:12
LONG top
Definition: windef.h:297
LONG left
Definition: windef.h:296
LONG right
Definition: windef.h:298
WPARAM wParam
Definition: combotst.c:138
LONG_PTR LPARAM
Definition: windef.h:208
#define ListView_GetItemCount(hwnd)
Definition: commctrl.h:2277
#define LVM_GETITEMRECT
Definition: commctrl.h:2447
WNDPROC OldProcessListWndProc
Definition: proclist.c:27
static HDC hDC
Definition: 3dtext.c:33
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define LVIR_BOUNDS
Definition: commctrl.h:2442
int WINAPI ExcludeClipRect(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
int WINAPI SaveDC(_In_ HDC)
#define GCL_HBRBACKGROUND
Definition: winuser.h:659
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LONG bottom
Definition: windef.h:299
#define WM_ERASEBKGND
Definition: winuser.h:1607
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
BOOL WINAPI RestoreDC(_In_ HDC, _In_ int)
LPARAM lParam
Definition: combotst.c:139
#define GetClassLongPtrW
Definition: winuser.h:4433

Variable Documentation

◆ OldProcessListWndProc

WNDPROC OldProcessListWndProc

Definition at line 27 of file proclist.c.

Referenced by ProcessListWndProc(), and ProcessPageWndProc().