ReactOS  0.4.15-dev-1177-g6cb3b62
progress.c
Go to the documentation of this file.
1 /* Unit tests for the progress bar control.
2  *
3  * Copyright 2005 Michael Kaufmann
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18  */
19 
20 #include <stdarg.h>
21 
22 #include "windef.h"
23 #include "winbase.h"
24 #include "wingdi.h"
25 #include "winuser.h"
26 #include "commctrl.h"
27 
28 #include "wine/test.h"
29 
30 #include "v6util.h"
31 
33 static const char progressTestClass[] = "ProgressBarTestClass";
34 static BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
35 
37 {
39  0, 0, 100, 20, NULL, NULL, GetModuleHandleA(NULL), 0);
40 }
41 
42 /* try to make sure pending X events have been processed before continuing */
43 static void flush_events(void)
44 {
45  MSG msg;
46  int diff = 100;
47  DWORD time = GetTickCount() + diff;
48 
49  while (diff > 0)
50  {
51  if (MsgWaitForMultipleObjects( 0, NULL, FALSE, min(10,diff), QS_ALLINPUT ) == WAIT_TIMEOUT) break;
52  while (PeekMessageA( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg );
53  diff = time - GetTickCount();
54  }
55 }
56 
58 {
59  switch(msg) {
60 
61  case WM_DESTROY:
62  PostQuitMessage(0);
63  break;
64 
65  default:
66  return DefWindowProcA(hWnd, msg, wParam, lParam);
67  }
68 
69  return 0L;
70 }
71 
73 static BOOL erased;
75 
77 {
78  if (msg == WM_PAINT)
79  {
81  }
82  else if (msg == WM_ERASEBKGND)
83  {
84  erased = TRUE;
85  }
87 }
88 
89 
90 static void update_window(HWND hWnd)
91 {
93  ok(!GetUpdateRect(hWnd, NULL, FALSE), "GetUpdateRect must return zero after UpdateWindow\n");
94 }
95 
96 
97 static void init(void)
98 {
99  WNDCLASSA wc;
100  RECT rect;
101  BOOL ret;
102 
103  wc.style = CS_HREDRAW | CS_VREDRAW;
104  wc.cbClsExtra = 0;
105  wc.cbWndExtra = 0;
107  wc.hIcon = NULL;
110  wc.lpszMenuName = NULL;
113  RegisterClassA(&wc);
114 
115  SetRect(&rect, 0, 0, 400, 20);
117  ok(ret, "got %d\n", ret);
118 
120  CW_USEDEFAULT, CW_USEDEFAULT, rect.right - rect.left, rect.bottom - rect.top, NULL, NULL, GetModuleHandleA(NULL), 0);
121  ok(hProgressParentWnd != NULL, "failed to create parent wnd\n");
122 
123 }
124 
125 static void cleanup(void)
126 {
127  MSG msg;
128 
130  while (GetMessageA(&msg,0,0,0)) {
133  }
134 
136 }
137 
138 
139 /*
140  * Tests if a progress bar repaints itself immediately when it receives
141  * some specific messages.
142  */
143 static void test_redraw(void)
144 {
145  RECT client_rect, rect;
146  HWND hProgressWnd;
147  LRESULT ret;
148 
150  hProgressWnd = CreateWindowExA(0, PROGRESS_CLASSA, "", WS_CHILD | WS_VISIBLE,
151  0, 0, rect.right, rect.bottom, hProgressParentWnd, NULL, GetModuleHandleA(NULL), 0);
152  ok(hProgressWnd != NULL, "Failed to create progress bar.\n");
154 
156  ok(GetUpdateRect(hProgressParentWnd, NULL, FALSE), "GetUpdateRect: There should be a region that needs to be updated\n");
157  flush_events();
159 
160  SendMessageA(hProgressWnd, PBM_SETRANGE, 0, MAKELPARAM(0, 100));
161  SendMessageA(hProgressWnd, PBM_SETPOS, 10, 0);
162  SendMessageA(hProgressWnd, PBM_SETSTEP, 20, 0);
163  update_window(hProgressWnd);
164 
165  /* PBM_SETPOS */
166  ok(SendMessageA(hProgressWnd, PBM_SETPOS, 50, 0) == 10, "PBM_SETPOS must return the previous position\n");
167  ok(!GetUpdateRect(hProgressWnd, NULL, FALSE), "PBM_SETPOS: The progress bar should be redrawn immediately\n");
168 
169  /* PBM_DELTAPOS */
170  ok(SendMessageA(hProgressWnd, PBM_DELTAPOS, 15, 0) == 50, "PBM_DELTAPOS must return the previous position\n");
171  ok(!GetUpdateRect(hProgressWnd, NULL, FALSE), "PBM_DELTAPOS: The progress bar should be redrawn immediately\n");
172 
173  /* PBM_SETPOS */
174  ok(SendMessageA(hProgressWnd, PBM_SETPOS, 80, 0) == 65, "PBM_SETPOS must return the previous position\n");
175  ok(!GetUpdateRect(hProgressWnd, NULL, FALSE), "PBM_SETPOS: The progress bar should be redrawn immediately\n");
176 
177  /* PBM_STEPIT */
178  ok(SendMessageA(hProgressWnd, PBM_STEPIT, 0, 0) == 80, "PBM_STEPIT must return the previous position\n");
179  ok(!GetUpdateRect(hProgressWnd, NULL, FALSE), "PBM_STEPIT: The progress bar should be redrawn immediately\n");
180  ret = SendMessageA(hProgressWnd, PBM_GETPOS, 0, 0);
181  if (ret == 0)
182  win_skip("PBM_GETPOS needs comctl32 > 4.70\n");
183  else
184  ok(ret == 100, "PBM_GETPOS returned a wrong position : %d\n", (UINT)ret);
185 
186  /* PBM_SETRANGE and PBM_SETRANGE32:
187  Usually the progress bar doesn't repaint itself immediately. If the
188  position is not in the new range, it does.
189  Don't test this, it may change in future Windows versions. */
190 
191  SendMessageA(hProgressWnd, PBM_SETPOS, 0, 0);
192  update_window(hProgressWnd);
193 
194  /* increase to 10 - no background erase required */
195  erased = FALSE;
197  SendMessageA(hProgressWnd, PBM_SETPOS, 10, 0);
198  GetClientRect(hProgressWnd, &client_rect);
199  ok(EqualRect(&last_paint_rect, &client_rect), "last_paint_rect was %s instead of %s\n",
201  update_window(hProgressWnd);
202  ok(!erased, "Progress bar shouldn't have erased the background\n");
203 
204  /* decrease to 0 - background erase will be required */
205  erased = FALSE;
207  SendMessageA(hProgressWnd, PBM_SETPOS, 0, 0);
208  GetClientRect(hProgressWnd, &client_rect);
209  ok(EqualRect(&last_paint_rect, &client_rect), "last_paint_rect was %s instead of %s\n",
211  update_window(hProgressWnd);
212  ok(erased, "Progress bar should have erased the background\n");
213 
214  DestroyWindow(hProgressWnd);
215 }
216 
217 static void test_setcolors(void)
218 {
219  HWND progress;
220  COLORREF clr;
221 
223 
224  clr = SendMessageA(progress, PBM_SETBARCOLOR, 0, 0);
225  ok(clr == CLR_DEFAULT, "got %x\n", clr);
226 
227  clr = SendMessageA(progress, PBM_SETBARCOLOR, 0, RGB(0, 255, 0));
228  ok(clr == 0, "got %x\n", clr);
229 
231  ok(clr == RGB(0, 255, 0), "got %x\n", clr);
232 
233  clr = SendMessageA(progress, PBM_SETBKCOLOR, 0, 0);
234  ok(clr == CLR_DEFAULT, "got %x\n", clr);
235 
236  clr = SendMessageA(progress, PBM_SETBKCOLOR, 0, RGB(255, 0, 0));
237  ok(clr == 0, "got %x\n", clr);
238 
240  ok(clr == RGB(255, 0, 0), "got %x\n", clr);
241 
243 }
244 
245 static void test_PBM_STEPIT(void)
246 {
247  struct stepit_test
248  {
249  int min;
250  int max;
251  int step;
252  } stepit_tests[] =
253  {
254  { 3, 15, 5 },
255  { 3, 15, -5 },
256  { 3, 15, 50 },
257  { -15, 15, 5 },
258  { -3, -2, -5 },
259  { 0, 0, 1 },
260  { 5, 5, 1 },
261  { 0, 0, -1 },
262  { 5, 5, -1 },
263  { 10, 5, 2 },
264  };
265  HWND progress;
266  int i, j;
267 
268  for (i = 0; i < ARRAY_SIZE(stepit_tests); i++)
269  {
270  struct stepit_test *test = &stepit_tests[i];
271  PBRANGE range;
272  LRESULT ret;
273 
275 
277  ok(ret != 0, "Unexpected return value.\n");
278 
280  ok(range.iLow == test->min && range.iHigh == test->max, "Unexpected range.\n");
281 
284 
285  for (j = 0; j < test->max; j++)
286  {
287  int pos = SendMessageA(progress, PBM_GETPOS, 0, 0);
288  int current;
289 
290  pos += test->step;
291  if (test->min != test->max)
292  {
293  if (pos > test->max)
294  pos = (pos - test->min) % (test->max - test->min) + test->min;
295  if (pos < test->min)
296  pos = (pos - test->min) % (test->max - test->min) + test->max;
297  }
298  else
299  pos = test->min;
300 
302 
304  ok(current == pos, "%u: unexpected position %d, expected %d.\n", i, current, pos);
305  }
306 
308  }
309 }
310 
311 static void init_functions(void)
312 {
313  HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
314 
315 #define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
317 #undef X
318 }
319 
321 {
322  INITCOMMONCONTROLSEX iccex;
323  ULONG_PTR ctx_cookie;
324  HANDLE hCtx;
325 
326  init_functions();
327 
328  iccex.dwSize = sizeof(iccex);
329  iccex.dwICC = ICC_PROGRESS_CLASS;
330  pInitCommonControlsEx(&iccex);
331 
332  init();
333 
334  test_redraw();
335  test_setcolors();
336  test_PBM_STEPIT();
337 
338  if (!load_v6_module(&ctx_cookie, &hCtx))
339  return;
340 
341  test_setcolors();
342  test_PBM_STEPIT();
343 
344  unload_v6_module(ctx_cookie, hCtx);
345 
346  cleanup();
347 }
static const char progressTestClass[]
Definition: progress.c:33
#define max(a, b)
Definition: svc.c:63
BOOL WINAPI TranslateMessage(_In_ const MSG *)
LRESULT WINAPI DispatchMessageA(_In_ const MSG *)
#define PBM_SETRANGE32
Definition: commctrl.h:2184
#define PBS_SMOOTH
Definition: commctrl.h:2176
#define RGB(r, g, b)
Definition: precomp.h:62
#define TRUE
Definition: types.h:120
BOOL WINAPI PostMessageA(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
#define MAKELPARAM(l, h)
Definition: winuser.h:3983
#define CALLBACK
Definition: compat.h:35
BOOL WINAPI UpdateWindow(_In_ HWND)
HWND hWnd
Definition: settings.c:17
DWORD WINAPI GetTickCount(VOID)
Definition: time.c:455
BOOL WINAPI GetMessageA(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
int cbClsExtra
Definition: winuser.h:3140
#define CS_HREDRAW
Definition: winuser.h:648
LPCSTR lpszMenuName
Definition: winuser.h:3146
static void unload_v6_module(ULONG_PTR cookie, HANDLE hCtx)
Definition: v6util.h:63
#define PBM_SETPOS
Definition: commctrl.h:2180
#define test
Definition: rosglue.h:37
START_TEST(progress)
Definition: progress.c:320
UINT_PTR WPARAM
Definition: windef.h:207
HBRUSH hbrBackground
Definition: winuser.h:3145
#define PBM_GETRANGE
Definition: commctrl.h:2189
#define WS_CHILD
Definition: pedump.c:617
static LRESULT CALLBACK progress_subclass_proc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: progress.c:76
__u16 time
Definition: mkdosfs.c:366
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI PeekMessageA(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
BOOL WINAPI DestroyWindow(_In_ HWND)
static void cleanup(void)
Definition: progress.c:125
#define COLOR_WINDOW
Definition: winuser.h:908
static void update_window(HWND hWnd)
Definition: progress.c:90
& rect
Definition: startmenu.cpp:1413
WPARAM wParam
Definition: combotst.c:138
LRESULT WINAPI CallWindowProcA(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define PBM_SETRANGE
Definition: commctrl.h:2179
BOOL WINAPI AdjustWindowRect(_Inout_ LPRECT, _In_ DWORD, _In_ BOOL)
int cbWndExtra
Definition: winuser.h:3141
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define FALSE
Definition: types.h:117
static BOOL load_v6_module(ULONG_PTR *pcookie, HANDLE *hCtx)
Definition: v6util.h:71
unsigned int BOOL
Definition: ntddk_ex.h:94
#define X(f)
static void test_setcolors(void)
Definition: progress.c:217
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
static RECT last_paint_rect
Definition: progress.c:74
HCURSOR hCursor
Definition: winuser.h:3144
#define CW_USEDEFAULT
Definition: winuser.h:225
smooth NULL
Definition: ftsmooth.c:416
#define PBM_STEPIT
Definition: commctrl.h:2183
LONG_PTR LPARAM
Definition: windef.h:208
const char * LPCSTR
Definition: xmlstorage.h:183
#define PBM_SETSTEP
Definition: commctrl.h:2182
static void init_functions(void)
Definition: progress.c:311
#define WM_DESTROY
Definition: winuser.h:1591
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
#define CS_VREDRAW
Definition: winuser.h:653
DWORD COLORREF
Definition: windef.h:300
#define WM_CLOSE
Definition: winuser.h:1603
#define WINAPI
Definition: msvc.h:6
const char * wine_dbgstr_rect(const RECT *rect)
static LRESULT CALLBACK progress_test_wnd_proc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: progress.c:57
unsigned long DWORD
Definition: ntddk_ex.h:95
static void test_redraw(void)
Definition: progress.c:143
#define WAIT_TIMEOUT
Definition: dderror.h:14
#define WM_PAINT
Definition: winuser.h:1602
DWORD WINAPI MsgWaitForMultipleObjects(_In_ DWORD nCount, _In_reads_opt_(nCount) CONST HANDLE *pHandles, _In_ BOOL fWaitAll, _In_ DWORD dwMilliseconds, _In_ DWORD dwWakeMask)
static WNDPROC progress_wndproc
Definition: progress.c:72
int ret
static const WCHAR L[]
Definition: oid.c:1250
static HWND create_progress(DWORD style)
Definition: progress.c:36
BOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *lpInitCtrls)
Definition: commctrl.c:893
#define PBM_SETBARCOLOR
Definition: commctrl.h:2191
BOOL WINAPI GetUpdateRect(_In_ HWND, _Out_opt_ LPRECT, _In_ BOOL)
#define SetWindowLongPtrA
Definition: winuser.h:5320
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
static BOOL erased
Definition: progress.c:73
BOOL WINAPI SetRectEmpty(_Out_ LPRECT)
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LPCSTR lpszClassName
Definition: winuser.h:3147
HCURSOR WINAPI LoadCursorA(_In_opt_ HINSTANCE, _In_ LPCSTR)
Definition: cursoricon.c:2059
#define GWLP_WNDPROC
Definition: treelist.c:66
GLenum GLint * range
Definition: glext.h:7539
UINT style
Definition: winuser.h:3138
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2881
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
#define SW_SHOWNORMAL
Definition: winuser.h:764
BOOL WINAPI EqualRect(_In_ LPCRECT, _In_ LPCRECT)
HINSTANCE hInstance
Definition: winuser.h:3142
#define PBM_DELTAPOS
Definition: commctrl.h:2181
#define ARRAY_SIZE(a)
Definition: main.h:24
static void test_PBM_STEPIT(void)
Definition: progress.c:245
#define QS_ALLINPUT
Definition: winuser.h:874
#define ok(value,...)
Definition: atltest.h:57
#define min(a, b)
Definition: monoChain.cc:55
unsigned int UINT
Definition: ndis.h:50
cd_progress_ptr progress
Definition: cdjpeg.h:152
WNDPROC lpfnWndProc
Definition: winuser.h:3139
static void flush_events(void)
Definition: progress.c:43
#define ICC_PROGRESS_CLASS
Definition: commctrl.h:63
#define CLR_DEFAULT
Definition: commctrl.h:316
#define msg(x)
Definition: auth_time.c:54
#define IDC_ARROW
Definition: winuser.h:682
#define PBM_SETBKCOLOR
Definition: commctrl.h:2192
HWND WINAPI CreateWindowExA(_In_ DWORD dwExStyle, _In_opt_ LPCSTR lpClassName, _In_opt_ LPCSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637
BOOL WINAPI UnregisterClassA(_In_ LPCSTR, HINSTANCE)
#define PM_REMOVE
Definition: winuser.h:1182
#define WM_ERASEBKGND
Definition: winuser.h:1607
LONG_PTR LRESULT
Definition: windef.h:209
Arabic default style
Definition: afstyles.h:93
#define WS_VISIBLE
Definition: pedump.c:620
HBRUSH WINAPI GetSysColorBrush(_In_ int)
#define win_skip
Definition: test.h:149
LPARAM lParam
Definition: combotst.c:139
ATOM WINAPI RegisterClassA(_In_ CONST WNDCLASSA *)
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define PBM_GETPOS
Definition: commctrl.h:2190
#define PROGRESS_CLASSA
Definition: commctrl.h:2171
struct task_struct * current
Definition: linux.c:32
static BOOL(WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX *)
HICON hIcon
Definition: winuser.h:3143
static HWND hProgressParentWnd
Definition: progress.c:32
static void init(void)
Definition: progress.c:97