ReactOS 0.4.15-dev-7788-g1ad9096
status.c
Go to the documentation of this file.
1/* Unit test suite for status control.
2 *
3 * Copyright 2007 Google (Lei Zhang)
4 * Copyright 2007 Alex Arazi
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21#include <windows.h>
22#include <commctrl.h>
23
24#include "wine/test.h"
25
26#define SUBCLASS_NAME "MyStatusBar"
27
28#define expect(expected,got) ok (expected == got,"Expected %d, got %d\n",expected,got)
29#define expect_rect(_left,_top,_right,_bottom,got) do { \
30 RECT exp = {abs(got.left - _left), abs(got.top - _top), \
31 abs(got.right - _right), abs(got.bottom - _bottom)}; \
32 ok(exp.left <= 2 && exp.top <= 2 && exp.right <= 2 && exp.bottom <= 2, \
33 "Expected rect (%d,%d)-(%d,%d), got %s\n", _left, _top, _right, _bottom, \
34 wine_dbgstr_rect(&(got))); } while (0)
35
40static int g_wmsize_count = 0;
41static INT g_ysize;
43static int g_wmdrawitm_ctr;
45
46static BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
47
49{
50 HWND hWndStatus;
51
52 /* make the control */
53 hWndStatus = CreateWindowExA(exstyle, STATUSCLASSNAMEA, NULL, style,
54 /* placement */
55 0, 0, 300, 20,
56 /* parent, etc */
57 NULL, NULL, hinst, NULL);
58 ok(hWndStatus != NULL, "failed to create status wnd\n");
59 return hWndStatus;
60}
61
63{
65
66 if (msg == WM_CREATE)
67 {
72 ok(cs->x == g_rcCreated.left, "CREATESTRUCT.x modified\n");
73 ok(cs->y == g_rcCreated.top, "CREATESTRUCT.y modified\n");
74 } else if (msg == WM_SIZE)
75 {
78 }
79 else
81
82 return ret;
83}
84
85static void register_subclass(void)
86{
87 WNDCLASSEXA cls;
88
89 cls.cbSize = sizeof(WNDCLASSEXA);
94 cls.hInstance = NULL;
95 ok(RegisterClassExA(&cls), "RegisterClassEx failed\n");
96}
97
98static void test_create(void)
99{
100 RECT rc;
101 HWND hwnd;
102
104 g_hMainWnd, NULL, NULL, 0)) != NULL, "CreateWindowA failed\n");
106 GetWindowRect(hwnd, &rc);
108 expect_rect(0, 0, 100, 100, g_rcCreated);
109 expect(0, rc.left);
110 expect(672, rc.right);
111 expect(226, rc.bottom);
112 /* we don't check rc.top as this may depend on user font settings */
114}
115
117{
119 HDC hdc = GetDC(NULL);
120 static const int sizes[] = { 6, 7, 8, 9, 10, 11, 12, 13, 15, 16,
121 20, 22, 28, 36, 48, 72};
122 DWORD i;
123 INT y;
124 LPSTR facename = (CHAR *)enumlf->elfFullName;
125
126 /* on win9x, enumlf->elfFullName is only valid for truetype fonts */
128 facename = enumlf->elfLogFont.lfFaceName;
129
130 for (i = 0; i < ARRAY_SIZE(sizes); i++)
131 {
132 HFONT hFont;
134 HFONT hCtrlFont;
135 HFONT hOldFont;
136 RECT rcCtrl;
137
138 enumlf->elfLogFont.lfHeight = sizes[i];
141 hOldFont = SelectObject(hdc, hFont);
142
143 GetClientRect(hwndStatus, &rcCtrl);
145 y = tm.tmHeight + (tm.tmInternalLeading ? tm.tmInternalLeading : 2) + 4;
146
147 ok( (rcCtrl.bottom == max(y, g_ysize)) || (rcCtrl.bottom == max(y, g_dpisize)),
148 "got %d (expected %d or %d) for %s #%d\n",
149 rcCtrl.bottom, max(y, g_ysize), max(y, g_dpisize), facename, sizes[i]);
150
151 SelectObject(hdc, hOldFont);
154 }
156 return 1;
157}
158
160{
161 HDC hdc = GetDC(NULL);
162 enumlf->elfLogFont.lfHeight = 0;
165 return 1;
166}
167
168static void test_height(void)
169{
170 LOGFONTA lf;
171 HFONT hFont, hFontSm;
172 RECT rc1, rc2;
174 0, 0, 300, 20, g_hMainWnd, NULL, NULL, NULL);
175 HDC hdc;
176
180
181 g_wmsize_count = 0;
183 if (!g_wmsize_count)
184 {
185 skip("Status control not resized in win95, skipping broken tests.\n");
186 return;
187 }
188 ok(g_wmsize_count > 0, "WM_SETFONT should issue WM_SIZE\n");
189
191 expect_rect(0, 0, 672, 42, rc2); /* GetTextMetrics returns invalid tmInternalLeading for this font */
192
193 g_wmsize_count = 0;
195 ok(g_wmsize_count > 0, "WM_SETFONT should issue WM_SIZE\n");
196
198 expect_rect(0, 0, 672, 42, rc2);
199
200 /* minheight < fontsize - no effects*/
204 expect_rect(0, 0, 672, 42, rc2);
205
206 /* minheight > fontsize - has an effect after WM_SIZE */
209 expect_rect(0, 0, 672, 42, rc2);
212 expect_rect(0, 0, 672, 62, rc2);
213
214 /* font changed to smaller than minheight - has an effect */
216 expect_rect(0, 0, 672, 62, rc2);
219 expect_rect(0, 0, 672, 42, rc2);
220 hFontSm = CreateFontA(9, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, ANSI_CHARSET,
224 expect_rect(0, 0, 672, 32, rc2);
225
226 /* test the height formula */
227 ZeroMemory(&lf, sizeof(lf));
229 hdc = GetDC(NULL);
230
231 /* used only for some fonts (tahoma as example) */
233 if (g_ysize & 1) g_ysize--; /* The min height is always even */
234
236 if (g_dpisize & 1) g_dpisize--; /* The min height is always even */
237
238
239 trace("dpi=%d (min height: %d or %d) SM_CYSIZE: %d\n",
242
245
248 DeleteObject(hFontSm);
249}
250
251static void test_status_control(void)
252{
253 HWND hWndStatus;
254 int r;
255 int nParts[] = {50, 150, -1};
256 int checkParts[] = {0, 0, 0};
257 int borders[] = {0, 0, 0};
258 RECT rc;
259 CHAR charArray[20];
260 HICON hIcon;
261 char ch;
262 char chstr[10] = "Inval id";
263 COLORREF crColor = RGB(0,0,0);
264
266
267 /* Divide into parts and set text */
268 r = SendMessageA(hWndStatus, SB_SETPARTS, 3, (LPARAM)nParts);
269 expect(TRUE,r);
270 r = SendMessageA(hWndStatus, SB_SETTEXTA, SBT_POPOUT|0, (LPARAM)"First");
271 expect(TRUE,r);
272 r = SendMessageA(hWndStatus, SB_SETTEXTA, SBT_OWNERDRAW|1, (LPARAM)"Second");
273 expect(TRUE,r);
274 r = SendMessageA(hWndStatus, SB_SETTEXTA, SBT_NOBORDERS|2, (LPARAM)"Third");
275 expect(TRUE,r);
276
277 /* Get RECT Information */
278 r = SendMessageA(hWndStatus, SB_GETRECT, 0, (LPARAM)&rc);
279 expect(TRUE,r);
280 expect(2,rc.top);
281 /* The rc.bottom test is system dependent
282 expect(22,rc.bottom); */
283 expect(0,rc.left);
284 expect(50,rc.right);
285 r = SendMessageA(hWndStatus, SB_GETRECT, -1, (LPARAM)&rc);
286 expect(FALSE,r);
287 r = SendMessageA(hWndStatus, SB_GETRECT, 3, (LPARAM)&rc);
288 expect(FALSE,r);
289 /* Get text length and text */
290 r = SendMessageA(hWndStatus, SB_GETTEXTLENGTHA, 0, 0);
291 expect(5,LOWORD(r));
293 r = SendMessageW(hWndStatus, WM_GETTEXTLENGTH, 0, 0);
294 ok(r == 5, "Expected 5, got %d\n", r);
295 r = SendMessageA(hWndStatus, SB_GETTEXTLENGTHA, 1, 0);
296 expect(0,LOWORD(r));
298 r = SendMessageA(hWndStatus, SB_GETTEXTLENGTHA, 2, 0);
299 expect(5,LOWORD(r));
301 r = SendMessageA(hWndStatus, SB_GETTEXTA, 2, (LPARAM) charArray);
302 ok(strcmp(charArray,"Third") == 0, "Expected Third, got %s\n", charArray);
303 expect(5,LOWORD(r));
305
306 /* Get parts and borders */
307 r = SendMessageA(hWndStatus, SB_GETPARTS, 3, (LPARAM)checkParts);
308 ok(r == 3, "Expected 3, got %d\n", r);
309 expect(50,checkParts[0]);
310 expect(150,checkParts[1]);
311 expect(-1,checkParts[2]);
312 r = SendMessageA(hWndStatus, SB_GETBORDERS, 0, (LPARAM)borders);
313 ok(r == TRUE, "Expected TRUE, got %d\n", r);
314 expect(0,borders[0]);
315 expect(2,borders[1]);
316 expect(2,borders[2]);
317
318 /* Test resetting text with different characters */
319 r = SendMessageA(hWndStatus, SB_SETTEXTA, 0, (LPARAM)"First@Again");
320 expect(TRUE,r);
321 r = SendMessageA(hWndStatus, SB_SETTEXTA, 1, (LPARAM)"Invalid\tChars\\7\7");
322 expect(TRUE,r);
323 r = SendMessageA(hWndStatus, SB_SETTEXTA, 2, (LPARAM)"InvalidChars\\n\n");
324 expect(TRUE,r);
325
326 /* Get text again */
327 r = SendMessageA(hWndStatus, SB_GETTEXTA, 0, (LPARAM) charArray);
328 ok(strcmp(charArray,"First@Again") == 0, "Expected First@Again, got %s\n", charArray);
329 expect(11,LOWORD(r));
330 expect(0,HIWORD(r));
331 r = SendMessageA(hWndStatus, SB_GETTEXTA, 1, (LPARAM) charArray);
332 ok(strcmp(charArray,"Invalid\tChars\\7 ") == 0, "Expected Invalid\tChars\\7 , got %s\n", charArray);
333
334 expect(16,LOWORD(r));
335 expect(0,HIWORD(r));
336 r = SendMessageA(hWndStatus, SB_GETTEXTA, 2, (LPARAM) charArray);
337 ok(strcmp(charArray,"InvalidChars\\n ") == 0, "Expected InvalidChars\\n , got %s\n", charArray);
338
339 expect(15,LOWORD(r));
340 expect(0,HIWORD(r));
341
342 /* test more nonprintable chars */
343 for(ch = 0x00; ch < 0x7F; ch++) {
344 chstr[5] = ch;
345 r = SendMessageA(hWndStatus, SB_SETTEXTA, 0, (LPARAM)chstr);
346 expect(TRUE,r);
347 r = SendMessageA(hWndStatus, SB_GETTEXTA, 0, (LPARAM)charArray);
348 ok(r == strlen(charArray), "got %d\n", r);
349 /* substitution with single space */
350 if (ch > 0x00 && ch < 0x20 && ch != '\t')
351 chstr[5] = ' ';
352 ok(strcmp(charArray, chstr) == 0, "Expected %s, got %s\n", chstr, charArray);
353 }
354
355 /* Set background color */
356 crColor = SendMessageA(hWndStatus, SB_SETBKCOLOR , 0, RGB(255,0,0));
357 ok(crColor == CLR_DEFAULT ||
358 broken(crColor == RGB(0,0,0)), /* win95 */
359 "Expected 0x%.8x, got 0x%.8x\n", CLR_DEFAULT, crColor);
360 crColor = SendMessageA(hWndStatus, SB_SETBKCOLOR , 0, CLR_DEFAULT);
361 ok(crColor == RGB(255,0,0) ||
362 broken(crColor == RGB(0,0,0)), /* win95 */
363 "Expected 0x%.8x, got 0x%.8x\n", RGB(255,0,0), crColor);
364
365 /* Add an icon to the status bar */
367 r = SendMessageA(hWndStatus, SB_SETICON, 1, 0);
368 ok(r != 0 ||
369 broken(r == 0), /* win95 */
370 "Expected non-zero, got %d\n", r);
371 r = SendMessageA(hWndStatus, SB_SETICON, 1, (LPARAM) hIcon);
372 ok(r != 0 ||
373 broken(r == 0), /* win95 */
374 "Expected non-zero, got %d\n", r);
375 r = SendMessageA(hWndStatus, SB_SETICON, 1, 0);
376 ok(r != 0 ||
377 broken(r == 0), /* win95 */
378 "Expected non-zero, got %d\n", r);
379
380 /* Set the Unicode format */
381 r = SendMessageA(hWndStatus, SB_SETUNICODEFORMAT, FALSE, 0);
382 expect(FALSE,r);
383 r = SendMessageA(hWndStatus, SB_GETUNICODEFORMAT, 0, 0);
384 expect(FALSE,r);
385 r = SendMessageA(hWndStatus, SB_SETUNICODEFORMAT, TRUE, 0);
386 expect(FALSE,r);
387 r = SendMessageA(hWndStatus, SB_GETUNICODEFORMAT, 0, 0);
388 ok(r == TRUE ||
389 broken(r == FALSE), /* win95 */
390 "Expected TRUE, got %d\n", r);
391
392 /* Reset number of parts */
393 r = SendMessageA(hWndStatus, SB_SETPARTS, 2, (LPARAM)nParts);
394 expect(TRUE,r);
395 r = SendMessageA(hWndStatus, SB_GETPARTS, 0, 0);
396 ok(r == 2, "Expected 2, got %d\n", r);
397 r = SendMessageA(hWndStatus, SB_SETPARTS, 0, 0);
398 expect(FALSE,r);
399 r = SendMessageA(hWndStatus, SB_GETPARTS, 0, 0);
400 ok(r == 2, "Expected 2, got %d\n", r);
401
402 /* Set the minimum height and get rectangle information again */
403 SendMessageA(hWndStatus, SB_SETMINHEIGHT, 50, 0);
404 r = SendMessageA(hWndStatus, WM_SIZE, 0, 0);
405 expect(0,r);
406 r = SendMessageA(hWndStatus, SB_GETRECT, 0, (LPARAM)&rc);
407 expect(TRUE,r);
408 expect(2,rc.top);
409 /* The rc.bottom test is system dependent
410 expect(22,rc.bottom); */
411 expect(0,rc.left);
412 expect(50,rc.right);
413 r = SendMessageA(hWndStatus, SB_GETRECT, -1, (LPARAM)&rc);
414 expect(FALSE,r);
415 r = SendMessageA(hWndStatus, SB_GETRECT, 3, (LPARAM)&rc);
416 expect(FALSE,r);
417
418 /* Set the ToolTip text */
419 SendMessageA(hWndStatus, SB_SETTIPTEXTA, 0,(LPARAM) "Tooltip Text");
420 lstrcpyA(charArray, "apple");
421 SendMessageA(hWndStatus, SB_GETTIPTEXTA, MAKEWPARAM (0, 20),(LPARAM) charArray);
422 ok(strcmp(charArray,"Tooltip Text") == 0 ||
423 broken(!strcmp(charArray, "apple")), /* win95 */
424 "Expected Tooltip Text, got %s\n", charArray);
425
426 /* Make simple */
427 SendMessageA(hWndStatus, SB_SIMPLE, TRUE, 0);
428 r = SendMessageA(hWndStatus, SB_ISSIMPLE, 0, 0);
429 ok(r == TRUE ||
430 broken(r == FALSE), /* win95 */
431 "Expected TRUE, got %d\n", r);
432
433 DestroyWindow(hWndStatus);
434}
435
437{
438 LRESULT ret;
439 if (msg == WM_DRAWITEM)
442 return ret;
443}
444
445static void test_status_ownerdraw(void)
446{
447 HWND hWndStatus;
448 int r;
449 const char* statustext = "STATUS TEXT";
450 LONG oldstyle;
451
452 /* subclass the main window and make sure it is visible */
455 ok( g_wndproc_saved != 0, "failed to set the WndProc\n");
457 oldstyle = GetWindowLongA( g_hMainWnd, GWL_STYLE);
459 /* create a status child window */
460 ok((hWndStatus = CreateWindowA(SUBCLASS_NAME, "", WS_CHILD|WS_VISIBLE, 0, 0, 100, 100,
461 g_hMainWnd, NULL, NULL, 0)) != NULL, "CreateWindowA failed\n");
462 /* set text */
463 g_wmdrawitm_ctr = 0;
464 r = SendMessageA(hWndStatus, SB_SETTEXTA, 0, (LPARAM)statustext);
465 ok( r == TRUE, "Sendmessage returned %d, expected 1\n", r);
466 ok( 0 == g_wmdrawitm_ctr, "got %d drawitem messages expected none\n", g_wmdrawitm_ctr);
467 /* set same text, with ownerdraw flag */
468 g_wmdrawitm_ctr = 0;
469 r = SendMessageA(hWndStatus, SB_SETTEXTA, SBT_OWNERDRAW, (LPARAM)statustext);
470 ok( r == TRUE, "Sendmessage returned %d, expected 1\n", r);
471 ok( 1 == g_wmdrawitm_ctr, "got %d drawitem messages expected 1\n", g_wmdrawitm_ctr);
472 /* and again */
473 g_wmdrawitm_ctr = 0;
474 r = SendMessageA(hWndStatus, SB_SETTEXTA, SBT_OWNERDRAW, (LPARAM)statustext);
475 ok( r == TRUE, "Sendmessage returned %d, expected 1\n", r);
476 ok( 1 == g_wmdrawitm_ctr, "got %d drawitem messages expected 1\n", g_wmdrawitm_ctr);
477 /* clean up */
478 DestroyWindow(hWndStatus);
481}
482
483static void test_gettext(void)
484{
486 0, 0, 300, 20, g_hMainWnd, NULL, NULL, NULL);
487 char buf[5];
488 int r;
489
491 expect(TRUE, r);
493 expect(4, r);
494 /* A size of 0 returns the length of the text */
496 ok( r == 4 || broken(r == 2) /* win8 */, "Expected 4 got %d\n", r );
497 /* A size of 1 only stores the NULL terminator */
498 buf[0] = 0xa;
500 ok( r == 0 || broken(r == 4), "Expected 0 got %d\n", r );
501 if (!r) ok(!buf[0], "expected empty buffer\n");
502 /* A size of 2 returns a length 1 */
504 ok( r == 1 || broken(r == 4), "Expected 1 got %d\n", r );
506 expect(4, r);
507 ok(!strcmp(buf, "Text"), "expected Text, got %s\n", buf);
509}
510
511/* Notify events to parent */
516
517/* Messages to parent */
519
521{
522 switch(msg)
523 {
524 case WM_NOTIFY:
525 {
526 NMHDR *hdr = ((LPNMHDR)lParam);
527 switch(hdr->code)
528 {
529 case NM_DBLCLK: g_got_dblclk = TRUE; break;
530 case NM_CLICK: g_got_click = TRUE; break;
531 case NM_RDBLCLK: g_got_rdblclk = TRUE; break;
532 case NM_RCLICK: g_got_rclick = TRUE; break;
533 }
534
535 /* Return zero to indicate default processing */
536 return 0;
537 }
538
539 case WM_CONTEXTMENU: g_got_contextmenu = TRUE; return 0;
540
541 default:
542 return( DefWindowProcA(hwnd, msg, wParam, lParam));
543 }
544
545 return 0;
546}
547
548/* Test that WM_NOTIFY messages from the status control works correctly */
549static void test_notify(void)
550{
553 ATOM atom;
554 WNDCLASSA wclass = {0};
555 wclass.lpszClassName = "TestNotifyParentClass";
557 atom = RegisterClassA(&wclass);
558 ok(atom, "RegisterClass failed\n");
559
560 /* create parent */
562 CW_USEDEFAULT, 0, 300, 20, NULL, NULL, NULL, NULL);
563 ok(hwndParent != NULL, "Parent creation failed!\n");
564
565 /* create status bar */
567 0, 0, 300, 20, hwndParent, NULL, NULL, NULL);
568 ok(hwndStatus != NULL, "Status creation failed!\n");
569
570 /* Send various mouse event, and check that we get them */
573 ok(g_got_dblclk, "WM_LBUTTONDBLCLK was not processed correctly!\n");
576 ok(g_got_rdblclk, "WM_RBUTTONDBLCLK was not processed correctly!\n");
579 ok(g_got_click, "WM_LBUTTONUP was not processed correctly!\n");
580
581 /* For R-UP, check that we also get the context menu from the default processing */
585 ok(g_got_rclick, "WM_RBUTTONUP was not processed correctly!\n");
586 ok(g_got_contextmenu, "WM_RBUTTONUP did not activate the context menu!\n");
587}
588
589static void test_sizegrip(void)
590{
592 LONG style;
593 RECT rc, rcClient;
594 POINT pt;
595 int width, r;
596
598 0, 0, 100, 100, g_hMainWnd, NULL, NULL, NULL);
599
602
603 GetClientRect(hwndStatus, &rcClient);
604
605 pt.x = rcClient.right;
606 pt.y = rcClient.top;
608 rc.left = pt.x - width;
609 rc.right = pt.x;
610 rc.top = pt.y;
611
612 pt.y = rcClient.bottom;
614 rc.bottom = pt.y;
615
616 /* check bounds when not maximized */
620 expect(HTCLIENT, r);
631
632 /* not maximized and right-to-left */
634
635 pt.x = rcClient.right;
637 rc.left = pt.x + width;
638 rc.right = pt.x;
639
643 expect(HTCLIENT, r);
654
655 /* maximize with left-to-right */
658
659 GetClientRect(hwndStatus, &rcClient);
660
661 pt.x = rcClient.right;
662 pt.y = rcClient.top;
664 rc.left = pt.x - width;
665 rc.right = pt.x;
666 rc.top = pt.y;
667
668 pt.y = rcClient.bottom;
670 rc.bottom = pt.y;
671
673 expect(HTCLIENT, r);
675 expect(HTCLIENT, r);
685 expect(HTCLIENT, r);
686
687 /* maximized with right-to-left */
689
690 pt.x = rcClient.right;
692 rc.left = pt.x + width;
693 rc.right = pt.x;
694
696 expect(HTCLIENT, r);
698 expect(HTCLIENT, r);
708 expect(HTCLIENT, r);
709
712}
713
714static void init_functions(void)
715{
716 HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
717
718#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
720#undef X
721}
722
724{
726
728
730
731 iccex.dwSize = sizeof(iccex);
732 iccex.dwICC = ICC_BAR_CLASSES;
733 pInitCommonControlsEx(&iccex);
734
739
741
743 test_create();
744 test_height();
746 test_gettext();
747 test_notify();
749}
#define broken(x)
Definition: _sntprintf.h:21
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
Arabic default style
Definition: afstyles.h:94
#define trace
Definition: atltest.h:70
#define ok(value,...)
Definition: atltest.h:57
#define skip(...)
Definition: atltest.h:64
#define START_TEST(x)
Definition: atltest.h:75
#define msg(x)
Definition: auth_time.c:54
HFONT hFont
Definition: main.c:53
#define ARRAY_SIZE(A)
Definition: main.h:33
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
BOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *lpInitCtrls)
Definition: commctrl.c:893
static HWND hwndParent
Definition: cryptui.c:300
WORD ATOM
Definition: dimm.idl:113
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static const WCHAR rc2[]
Definition: oid.c:1216
HANDLE HWND
Definition: compat.h:19
#define CALLBACK
Definition: compat.h:35
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
#define pt(x, y)
Definition: drawing.c:79
#define RGB(r, g, b)
Definition: precomp.h:62
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
pKey DeleteObject()
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLint GLint GLsizei width
Definition: gl.h:1546
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
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 cs
Definition: i386-dis.c:442
char hdr[14]
Definition: iptest.cpp:33
if(dx< 0)
Definition: linetemp.h:194
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:100
HDC hdc
Definition: main.c:9
static HDC
Definition: imagelist.c:92
static HICON
Definition: imagelist.c:84
static int CALLBACK check_height_family_enumproc(ENUMLOGFONTEXA *enumlf, NEWTEXTMETRICEXA *ntm, DWORD type, LPARAM lParam)
Definition: status.c:159
static BOOL g_got_contextmenu
Definition: status.c:518
#define SUBCLASS_NAME
Definition: status.c:26
static void test_height(void)
Definition: status.c:168
static void test_gettext(void)
Definition: status.c:483
static WNDPROC g_status_wndproc
Definition: status.c:37
static void test_sizegrip(void)
Definition: status.c:589
#define X(f)
static int CALLBACK check_height_font_enumproc(ENUMLOGFONTEXA *enumlf, NEWTEXTMETRICEXA *ntm, DWORD type, LPARAM lParam)
Definition: status.c:116
static LRESULT WINAPI test_notify_parent_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: status.c:520
static void test_create(void)
Definition: status.c:98
#define expect_rect(_left, _top, _right, _bottom, got)
Definition: status.c:29
static void test_status_control(void)
Definition: status.c:251
static HWND g_hMainWnd
Definition: status.c:39
static WNDPROC g_wndproc_saved
Definition: status.c:44
static BOOL g_got_rdblclk
Definition: status.c:514
static INT g_ysize
Definition: status.c:41
static INT g_dpisize
Definition: status.c:42
static int g_wmdrawitm_ctr
Definition: status.c:43
static void test_notify(void)
Definition: status.c:549
static HWND create_status_control(DWORD style, DWORD exstyle)
Definition: status.c:48
#define expect(expected, got)
Definition: status.c:28
static BOOL g_got_click
Definition: status.c:513
static LRESULT WINAPI create_test_wndproc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: status.c:62
static BOOL g_got_rclick
Definition: status.c:515
static void test_status_ownerdraw(void)
Definition: status.c:445
static RECT g_rcCreated
Definition: status.c:38
static LRESULT WINAPI ownerdraw_test_wndproc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: status.c:436
static void init_functions(void)
Definition: status.c:714
static BOOL g_got_dblclk
Definition: status.c:512
static HINSTANCE hinst
Definition: status.c:36
static void register_subclass(void)
Definition: status.c:85
static int g_wmsize_count
Definition: status.c:40
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static const struct @542 sizes[]
HICON hIcon
Definition: msconfig.c:44
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
Definition: muldiv.c:25
unsigned int UINT
Definition: ndis.h:50
#define BOOL
Definition: nt_native.h:43
#define LOWORD(l)
Definition: pedump.c:82
#define WS_CHILD
Definition: pedump.c:617
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637
#define WS_MAXIMIZE
Definition: pedump.c:623
#define WS_VISIBLE
Definition: pedump.c:620
long LONG
Definition: pedump.c:60
#define NM_RDBLCLK
Definition: commctrl.h:134
#define SB_SIMPLE
Definition: commctrl.h:1958
#define SB_GETTEXTA
Definition: commctrl.h:1943
#define SB_GETTEXTLENGTHA
Definition: commctrl.h:1945
#define SB_GETRECT
Definition: commctrl.h:1959
#define NM_DBLCLK
Definition: commctrl.h:131
#define SB_GETPARTS
Definition: commctrl.h:1955
#define SB_SETBKCOLOR
Definition: commctrl.h:1976
#define SBT_NOBORDERS
Definition: commctrl.h:1971
#define SBT_POPOUT
Definition: commctrl.h:1972
#define WC_STATICA
Definition: commctrl.h:4679
#define SB_GETTIPTEXTA
Definition: commctrl.h:1964
#define NM_CLICK
Definition: commctrl.h:130
#define SB_SETICON
Definition: commctrl.h:1961
#define SB_SETTEXTA
Definition: commctrl.h:1941
#define SB_SETUNICODEFORMAT
Definition: commctrl.h:1967
#define STATUSCLASSNAMEA
Definition: commctrl.h:1937
#define SB_ISSIMPLE
Definition: commctrl.h:1960
#define SBT_TOOLTIPS
Definition: commctrl.h:1925
#define CLR_DEFAULT
Definition: commctrl.h:320
#define SB_SETMINHEIGHT
Definition: commctrl.h:1957
#define SB_SETTIPTEXTA
Definition: commctrl.h:1962
#define NM_RCLICK
Definition: commctrl.h:133
#define SB_GETUNICODEFORMAT
Definition: commctrl.h:1968
#define SB_SETPARTS
Definition: commctrl.h:1954
#define SBARS_SIZEGRIP
Definition: commctrl.h:1923
#define ICC_BAR_CLASSES
Definition: commctrl.h:60
#define SB_GETBORDERS
Definition: commctrl.h:1956
#define SBT_OWNERDRAW
Definition: commctrl.h:1970
#define WM_CONTEXTMENU
Definition: richedit.h:64
#define WM_NOTIFY
Definition: richedit.h:61
HWND hwndStatus
Definition: solitaire.cpp:14
LPCSTR lpszClassName
Definition: winuser.h:3172
WNDPROC lpfnWndProc
Definition: winuser.h:3164
HINSTANCE hInstance
Definition: winuser.h:3206
UINT cbSize
Definition: winuser.h:3201
WNDPROC lpfnWndProc
Definition: winuser.h:3203
LPCSTR lpszClassName
Definition: winuser.h:3211
Definition: ps.c:97
LOGFONTA elfLogFont
Definition: wingdi.h:2696
BYTE elfFullName[LF_FULLFACESIZE]
Definition: wingdi.h:2697
LONG lfHeight
Definition: wingdi.h:1881
CHAR lfFaceName[LF_FACESIZE]
Definition: wingdi.h:1894
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
Definition: time.h:68
#define max(a, b)
Definition: svc.c:63
#define GWLP_WNDPROC
Definition: treelist.c:66
int32_t INT
Definition: typedefs.h:58
#define HIWORD(l)
Definition: typedefs.h:247
int ret
#define ZeroMemory
Definition: winbase.h:1712
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
DWORD COLORREF
Definition: windef.h:300
#define WINAPI
Definition: msvc.h:6
#define FW_DONTCARE
Definition: wingdi.h:368
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
HFONT WINAPI CreateFontIndirectA(_In_ const LOGFONTA *)
#define DEFAULT_QUALITY
Definition: wingdi.h:436
#define FF_DONTCARE
Definition: wingdi.h:448
#define TRUETYPE_FONTTYPE
Definition: wingdi.h:1109
#define LOGPIXELSY
Definition: wingdi.h:719
int WINAPI EnumFontFamiliesExA(_In_ HDC, _In_ PLOGFONTA, _In_ FONTENUMPROCA, _In_ LPARAM, _In_ DWORD)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
FARPROC FONTENUMPROCA
Definition: wingdi.h:2896
#define OUT_DEFAULT_PRECIS
Definition: wingdi.h:415
#define ANSI_CHARSET
Definition: wingdi.h:383
#define CLIP_DEFAULT_PRECIS
Definition: wingdi.h:426
HFONT WINAPI CreateFontA(_In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ LPCSTR)
BOOL WINAPI GetTextMetricsA(_In_ HDC, _Out_ LPTEXTMETRICA)
Definition: text.c:200
#define WS_EX_LAYOUTRTL
Definition: winuser.h:390
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define MAKEWPARAM(l, h)
Definition: winuser.h:4009
#define SetWindowLongPtrA
Definition: winuser.h:5345
#define WM_GETTEXTLENGTH
Definition: winuser.h:1619
#define MAKELPARAM(l, h)
Definition: winuser.h:4008
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 IDI_QUESTION
Definition: winuser.h:706
LONG WINAPI GetWindowLongA(_In_ HWND, _In_ int)
#define HWND_TOPMOST
Definition: winuser.h:1208
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define CreateWindowA(a, b, c, d, e, f, g, h, i, j, k)
Definition: winuser.h:4315
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
LONG WINAPI SetWindowLongA(_In_ HWND, _In_ int, _In_ LONG)
#define SM_CYSIZE
Definition: winuser.h:992
#define WM_CREATE
Definition: winuser.h:1608
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define SM_CXVSCROLL
Definition: winuser.h:961
#define WM_SIZE
Definition: winuser.h:1611
#define WM_LBUTTONDBLCLK
Definition: winuser.h:1778
#define SWP_NOMOVE
Definition: winuser.h:1244
#define WM_NCHITTEST
Definition: winuser.h:1686
#define WM_RBUTTONUP
Definition: winuser.h:1780
#define WM_RBUTTONDBLCLK
Definition: winuser.h:1781
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI GetClassInfoExA(_In_opt_ HINSTANCE, _In_ LPCSTR, _Out_ LPWNDCLASSEXA)
#define SWP_NOSIZE
Definition: winuser.h:1245
#define WM_GETTEXT
Definition: winuser.h:1618
#define GetWindowLongPtrA
Definition: winuser.h:4828
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
#define WM_DRAWITEM
Definition: winuser.h:1645
#define HWND_DESKTOP
Definition: winuser.h:1209
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
ATOM WINAPI RegisterClassA(_In_ CONST WNDCLASSA *)
ATOM WINAPI RegisterClassExA(_In_ CONST WNDCLASSEXA *)
#define WM_SETFONT
Definition: winuser.h:1650
HICON WINAPI LoadIconA(_In_opt_ HINSTANCE hInstance, _In_ LPCSTR lpIconName)
Definition: cursoricon.c:2060
struct tagNMHDR * LPNMHDR
#define HTCLIENT
Definition: winuser.h:2475
#define HTBOTTOMRIGHT
Definition: winuser.h:2495
#define SM_CXSIZEFRAME
Definition: winuser.h:993
HDC WINAPI GetDC(_In_opt_ HWND)
#define HTNOWHERE
Definition: winuser.h:2474
#define WM_LBUTTONUP
Definition: winuser.h:1777
#define CW_USEDEFAULT
Definition: winuser.h:225
#define HTBOTTOMLEFT
Definition: winuser.h:2494
struct _WNDCLASSEXA WNDCLASSEXA
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2906
#define GWL_STYLE
Definition: winuser.h:852
BOOL WINAPI DestroyWindow(_In_ HWND)
#define SM_CYCAPTION
Definition: winuser.h:963
#define SM_CYSIZEFRAME
Definition: winuser.h:995
int WINAPI GetSystemMetrics(_In_ int)
LRESULT WINAPI CallWindowProcA(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define GWL_EXSTYLE
Definition: winuser.h:851
const char * LPCSTR
Definition: xmlstorage.h:183
char * LPSTR
Definition: xmlstorage.h:182
char CHAR
Definition: xmlstorage.h:175