ReactOS  0.4.14-dev-49-gfb4591c
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  };
258  HWND progress;
259  int i, j;
260 
261  for (i = 0; i < ARRAY_SIZE(stepit_tests); i++)
262  {
263  struct stepit_test *test = &stepit_tests[i];
264  LRESULT ret;
265 
267 
269  ok(ret != 0, "Unexpected return value.\n");
270 
273 
274  for (j = 0; j < test->max; j++)
275  {
276  int pos = SendMessageA(progress, PBM_GETPOS, 0, 0);
277  int current;
278 
279  pos += test->step;
280  if (pos > test->max)
281  pos = (pos - test->min) % (test->max - test->min) + test->min;
282  if (pos < test->min)
283  pos = (pos - test->min) % (test->max - test->min) + test->max;
284 
286 
288  ok(current == pos, "Unexpected position %d, expected %d.\n", current, pos);
289  }
290 
292  }
293 }
294 
295 static void init_functions(void)
296 {
297  HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
298 
299 #define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
301 #undef X
302 }
303 
305 {
306  INITCOMMONCONTROLSEX iccex;
307  ULONG_PTR ctx_cookie;
308  HANDLE hCtx;
309 
310  init_functions();
311 
312  iccex.dwSize = sizeof(iccex);
313  iccex.dwICC = ICC_PROGRESS_CLASS;
314  pInitCommonControlsEx(&iccex);
315 
316  init();
317 
318  test_redraw();
319  test_setcolors();
320  test_PBM_STEPIT();
321 
322  if (!load_v6_module(&ctx_cookie, &hCtx))
323  return;
324 
325  test_setcolors();
326  test_PBM_STEPIT();
327 
328  unload_v6_module(ctx_cookie, hCtx);
329 
330  cleanup();
331 }
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:2160
#define TRUE
Definition: types.h:120
#define PBS_SMOOTH
Definition: commctrl.h:2152
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:3947
#define CALLBACK
Definition: compat.h:27
BOOL WINAPI UpdateWindow(_In_ HWND)
HWND hWnd
Definition: settings.c:17
DWORD WINAPI GetTickCount(VOID)
Definition: time.c:445
BOOL WINAPI GetMessageA(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
int cbClsExtra
Definition: winuser.h:3139
#define CS_HREDRAW
Definition: winuser.h:648
LPCSTR lpszMenuName
Definition: winuser.h:3145
static void unload_v6_module(ULONG_PTR cookie, HANDLE hCtx)
Definition: v6util.h:63
#define PBM_SETPOS
Definition: commctrl.h:2156
#define test
Definition: rosglue.h:37
START_TEST(progress)
Definition: progress.c:304
UINT_PTR WPARAM
Definition: windef.h:207
HBRUSH hbrBackground
Definition: winuser.h:3144
#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:63
#define PBM_SETRANGE
Definition: commctrl.h:2155
BOOL WINAPI AdjustWindowRect(_Inout_ LPRECT, _In_ DWORD, _In_ BOOL)
int cbWndExtra
Definition: winuser.h:3140
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
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:3143
#define CW_USEDEFAULT
Definition: winuser.h:225
smooth NULL
Definition: ftsmooth.c:416
#define PBM_STEPIT
Definition: commctrl.h:2159
LONG_PTR LPARAM
Definition: windef.h:208
const char * LPCSTR
Definition: xmlstorage.h:183
#define PBM_SETSTEP
Definition: commctrl.h:2158
static void init_functions(void)
Definition: progress.c:295
#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:285
#define WM_CLOSE
Definition: winuser.h:1603
#define RGB(r, g, b)
Definition: wingdi.h:2935
#define WINAPI
Definition: msvc.h:8
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:2167
BOOL WINAPI GetUpdateRect(_In_ HWND, _Out_opt_ LPRECT, _In_ BOOL)
#define SetWindowLongPtrA
Definition: winuser.h:5246
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:821
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:3146
HCURSOR WINAPI LoadCursorA(_In_opt_ HINSTANCE, _In_ LPCSTR)
Definition: cursoricon.c:2059
#define GWLP_WNDPROC
Definition: treelist.c:66
UINT style
Definition: winuser.h:3137
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2880
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:3141
#define PBM_DELTAPOS
Definition: commctrl.h:2157
#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:150
WNDPROC lpfnWndProc
Definition: winuser.h:3138
static void flush_events(void)
Definition: progress.c:43
#define ICC_PROGRESS_CLASS
Definition: commctrl.h:63
#define CLR_DEFAULT
Definition: commctrl.h:305
#define msg(x)
Definition: auth_time.c:54
#define IDC_ARROW
Definition: winuser.h:682
#define PBM_SETBKCOLOR
Definition: commctrl.h:2168
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:141
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:2166
#define PROGRESS_CLASSA
Definition: commctrl.h:2147
struct task_struct * current
Definition: linux.c:32
static BOOL(WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX *)
HICON hIcon
Definition: winuser.h:3142
static HWND hProgressParentWnd
Definition: progress.c:32
static void init(void)
Definition: progress.c:97