ReactOS 0.4.15-dev-7834-g00c4b3d
button.c File Reference
#include "wine/test.h"
#include <stdio.h>
#include <windows.h>
#include <commctrl.h>
#include <uxtheme.h>
#include <undocuser.h>
#include <msgtrace.h>
#include <user32testhelpers.h>
Include dependency graph for button.c:

Go to the source code of this file.

Macros

#define ok_rect(rc, l, r, t, b)   ok((rc.left == (l)) && (rc.right == (r)) && (rc.top == (t)) && (rc.bottom == (b)), "Wrong rect. expected %d, %d, %d, %d got %ld, %ld, %ld, %ld\n", l,t,r,b, rc.left, rc.top, rc.right, rc.bottom)
 
#define ok_size(s, width, height)   ok((s.cx == (width) && s.cy == (height)), "Expected size (%lu,%lu) got (%lu,%lu)\n", (LONG)width, (LONG)height, s.cx, s.cy)
 
#define MOVE_CURSOR(x, y)
 

Functions

void Test_TextMargin ()
 
void Test_Imagelist ()
 
void Test_GetIdealSizeNoThemes ()
 
static int get_iwnd (HWND hWnd)
 
static LRESULT CALLBACK subclass_proc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam, UINT_PTR id, DWORD_PTR ref_data)
 
static LRESULT CALLBACK TestProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 
static void FlushMessages ()
 
void Test_MessagesNonThemed ()
 
void Test_MessagesThemed ()
 
 START_TEST (button)
 

Variables

HWND hWnd1
 
HWND hWnd2
 
MSG_ENTRY paint_sequence []
 
MSG_ENTRY paint_nonthemed_sequence []
 
MSG_ENTRY redraw_sequence []
 
MSG_ENTRY redraw_nonthemed_sequence []
 
MSG_ENTRY printclnt_nonthemed_sequence []
 
MSG_ENTRY printclnt_sequence []
 
MSG_ENTRY pseudomove_sequence []
 
MSG_ENTRY pseudomove_nonthemed_sequence []
 
MSG_ENTRY pseudohover_sequence []
 
MSG_ENTRY pseudoleave_sequence []
 
MSG_ENTRY mouseenter_sequence []
 
MSG_ENTRY mouseenter_nonthemed_sequence []
 
MSG_ENTRY mousemove_sequence []
 
MSG_ENTRY mouseleave_sequence []
 
MSG_ENTRY mouseleave_nonthemed_sequence []
 
MSG_ENTRY themechanged_sequence []
 
MSG_ENTRY enable_nonthemed_sequence []
 
MSG_ENTRY btndown_nonthemed_sequence []
 
MSG_ENTRY btndown_repeat_nonthemed_sequence []
 
MSG_ENTRY btnclick_nonthemed_sequence []
 
MSG_ENTRY btnup_stray_sequence []
 

Macro Definition Documentation

◆ MOVE_CURSOR

#define MOVE_CURSOR (   x,
  y 
)
Value:
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
#define MOUSEEVENTF_ABSOLUTE
Definition: winuser.h:1194
#define SM_CYVIRTUALSCREEN
Definition: winuser.h:1039
void WINAPI mouse_event(_In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ ULONG_PTR)
#define SM_CXVIRTUALSCREEN
Definition: winuser.h:1038
#define MOUSEEVENTF_MOVE
Definition: winuser.h:1183
int WINAPI GetSystemMetrics(_In_ int)

Definition at line 418 of file button.c.

◆ ok_rect

#define ok_rect (   rc,
  l,
  r,
  t,
  b 
)    ok((rc.left == (l)) && (rc.right == (r)) && (rc.top == (t)) && (rc.bottom == (b)), "Wrong rect. expected %d, %d, %d, %d got %ld, %ld, %ld, %ld\n", l,t,r,b, rc.left, rc.top, rc.right, rc.bottom)

Definition at line 17 of file button.c.

◆ ok_size

#define ok_size (   s,
  width,
  height 
)    ok((s.cx == (width) && s.cy == (height)), "Expected size (%lu,%lu) got (%lu,%lu)\n", (LONG)width, (LONG)height, s.cx, s.cy)

Definition at line 18 of file button.c.

Function Documentation

◆ FlushMessages()

static void FlushMessages ( )
static

Definition at line 489 of file button.c.

490{
491 MSG msg;
492
493 while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE ))
494 {
495 int iwnd = get_iwnd(msg.hwnd);
496 if(iwnd)
497 {
498 if(msg.message <= WM_USER && iwnd != 0)
499 RECORD_MESSAGE(iwnd, msg.message, POST,0,0);
500 }
502 }
503}
#define msg(x)
Definition: auth_time.c:54
static int get_iwnd(HWND hWnd)
Definition: button.c:422
#define RECORD_MESSAGE(...)
Definition: msgtrace.h:60
@ POST
Definition: msgtrace.h:7
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
#define PM_REMOVE
Definition: winuser.h:1196
#define PeekMessage
Definition: winuser.h:5830
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
#define WM_USER
Definition: winuser.h:1895

Referenced by Test_MessagesNonThemed(), and Test_MessagesThemed().

◆ get_iwnd()

static int get_iwnd ( HWND  hWnd)
static

Definition at line 422 of file button.c.

423{
424 if(hWnd == hWnd1) return 1;
425 else if(hWnd == hWnd2) return 2;
426 else return 0;
427}
HWND hWnd
Definition: settings.c:17
HWND hWnd1
Definition: button.c:416
HWND hWnd2
Definition: button.c:416

Referenced by FlushMessages(), subclass_proc(), and TestProc().

◆ START_TEST()

START_TEST ( button  )

Definition at line 926 of file button.c.

927{
928 LoadLibraryW(L"comctl32.dll"); /* same as statically linking to comctl32 and doing InitCommonControls */
932
934 if (IsThemeActive())
936 else
937 skip("No active theme, skipping Test_MessagesThemed\n");
938
939}
#define skip(...)
Definition: atltest.h:64
#define LoadLibraryW(x)
Definition: compat.h:747
BOOL WINAPI IsThemeActive(void)
Definition: system.c:606
void Test_Imagelist()
Definition: button.c:72
void Test_MessagesNonThemed()
Definition: button.c:696
void Test_MessagesThemed()
Definition: button.c:830
void Test_GetIdealSizeNoThemes()
Definition: button.c:108
void Test_TextMargin()
Definition: button.c:20
#define L(x)
Definition: ntvdm.h:50

◆ subclass_proc()

static LRESULT CALLBACK subclass_proc ( HWND  hwnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam,
UINT_PTR  id,
DWORD_PTR  ref_data 
)
static

Definition at line 429 of file button.c.

430{
431 int iwnd = get_iwnd(hwnd);
432
433 if(message > WM_USER || !iwnd )
435
436 switch(message)
437 {
439 case WM_IME_NOTIFY :
440 case WM_GETICON :
441 case WM_GETTEXT:
442 case WM_GETTEXTLENGTH:
443 break;
444 case WM_NOTIFY:
445 {
446 NMHDR* pnmhdr = (NMHDR*)lParam;
447 if (pnmhdr->code == NM_CUSTOMDRAW)
448 {
450 RECORD_MESSAGE(iwnd, message, SENT, pnmhdr->code, pnmcd->dwDrawStage);
451 }
452 else
453 {
454 RECORD_MESSAGE(iwnd, message, SENT, pnmhdr->idFrom,pnmhdr->code);
455 }
456 break;
457 }
458 default:
459 RECORD_MESSAGE(iwnd, message, SENT, 0,0);
460 }
462}
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
LRESULT WINAPI DefSubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: commctrl.c:1496
@ SENT
Definition: msgtrace.h:6
#define NM_CUSTOMDRAW
Definition: commctrl.h:137
#define WM_NOTIFY
Definition: richedit.h:61
Definition: tftpd.h:60
UINT_PTR idFrom
Definition: winuser.h:3158
UINT code
Definition: winuser.h:3159
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define WM_GETTEXTLENGTH
Definition: winuser.h:1619
#define WM_IME_NOTIFY
Definition: winuser.h:1830
#define WM_GETTEXT
Definition: winuser.h:1618
#define WM_IME_SETCONTEXT
Definition: winuser.h:1829

Referenced by Test_MessagesNonThemed(), and Test_MessagesThemed().

◆ Test_GetIdealSizeNoThemes()

void Test_GetIdealSizeNoThemes ( )

Definition at line 108 of file button.c.

109{
110 HWND hwnd1, hwnd2;
111 BOOL ret;
112 SIZE s, textent;
113 HFONT font;
114 HDC hdc;
115 HANDLE hbmp;
117 BUTTON_IMAGELIST imlData;
118 RECT rc;
119 LOGFONTW lf;
120 DWORD i;
121
122 hwnd2 = CreateWindowW(L"Static", L"", 0, 0, 0, 100, 100, 0, NULL, NULL, NULL);
123 ok (hwnd2 != NULL, "Expected CreateWindowW to succeed\n");
124
125 hwnd1 = CreateWindowW(L"Button", L" ", WS_CHILD, 10, 10, 100, 100, hwnd2, NULL, NULL, NULL);
126 ok (hwnd1 != NULL, "Expected CreateWindowW to succeed\n");
127 SetWindowTheme(hwnd1, L"", L"");
128
129 font = (HFONT)SendMessageW(hwnd1, WM_GETFONT, 0, 0);
130 hdc = GetDC(hwnd1);
132 GetTextExtentPoint32W(hdc, L" ", 1, &textent);
133
134 memset(&s, 0, sizeof(s));
135 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
136 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
137 ok_size(s, textent.cx + 5 + 2,
138 textent.cy + 7 + 2); /* the last +2 is the text margin */
139
140 DestroyWindow(hwnd1);
141
142
143 hwnd1 = CreateWindowW(L"Button", L" ", BS_USERBUTTON | WS_CHILD, 10, 10, 100, 100, hwnd2, NULL, NULL, NULL);
144 ok (hwnd1 != NULL, "Expected CreateWindowW to succeed\n");
145 SetWindowTheme(hwnd1, L"", L"");
146
147 memset(&s, 0, sizeof(s));
148 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
149 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
150 ok_size(s, textent.cx + 5 + 2,
151 textent.cy + 7 + 2); /* the last +2 is the text margin */
152
153 DestroyWindow(hwnd1);
154
155
156
157 hwnd1 = CreateWindowW(L"Button", L"", WS_CHILD, 10, 10, 100, 100, hwnd2, NULL, NULL, NULL);
158 ok (hwnd1 != NULL, "Expected CreateWindowW to succeed\n");
159 SetWindowTheme(hwnd1, L"", L"");
160
161 s.cx = 1;
162 s.cy = 1;
163 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
164 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
165 ok_size(s, 100, 100);
166
168 ok (hbmp != 0, "Expected LoadImage to succeed\n");
169
171
172 memset(&s, 0, sizeof(s));
173 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
174 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
175 ok_size(s, 100, 100);
176
178 ok (himl != 0, "Expected ImageList_LoadImage to succeed\n");
179
180 memset(&imlData, 0, sizeof(imlData));
181 imlData.himl = himl;
182 ret = SendMessageW(hwnd1, BCM_SETIMAGELIST, 0, (LPARAM)&imlData);
183 ok (ret == TRUE, "Expected BCM_SETIMAGELIST to fail\n"); /* This works in win10 */
184
185 memset(&s, 0, sizeof(s));
186 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
187 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
188 ok_size(s, 100, 100);
189
190 DestroyWindow(hwnd1);
191
192
193
194
195
196 hwnd1 = CreateWindowW(L"Button", L"", WS_CHILD, 10, 10, 5, 5, hwnd2, NULL, NULL, NULL);
197 ok (hwnd1 != NULL, "Expected CreateWindowW to succeed\n");
198 SetWindowTheme(hwnd1, L"", L"");
199
200 memset(&s, 0, sizeof(s));
201 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
202 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
203 ok_size(s, 5, 5);
204
205 DestroyWindow(hwnd1);
206
207
208
209
210 hwnd1 = CreateWindowW(L"Button", L" ", BS_BITMAP | WS_CHILD, 10, 10, 100, 100, hwnd2, NULL, NULL, NULL);
211 ok (hwnd1 != NULL, "Expected CreateWindowW to succeed\n");
212 SetWindowTheme(hwnd1, L"", L"");
213
215
216 memset(&s, 0, sizeof(s));
217 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
218 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
219
220 /* In xp and 2k3 the image is ignored, in vista+ its width is added to the text width */
221 ok_size(s, textent.cx + 5 + 2,
222 textent.cy + 7 + 2); /* the last +2 is the text margin */
223
224 DestroyWindow(hwnd1);
225
226
227
228 hwnd1 = CreateWindowW(L"Button", L" ", WS_CHILD, 10, 10, 100, 100, hwnd2, NULL, NULL, NULL);
229 ok (hwnd1 != NULL, "Expected CreateWindowW to succeed\n");
230 SetWindowTheme(hwnd1, L"", L"");
231
232 SetRect(&rc, 0,0,0,0);
233 ret = SendMessageW(hwnd1, BCM_SETTEXTMARGIN, 0, (LPARAM)&rc);
234 ok (ret == TRUE, "Expected BCM_SETTEXTMARGIN to succeed\n");
235
236 memset(&s, 0, sizeof(s));
237 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
238 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
239 ok_size(s, textent.cx + 5,
240 textent.cy + 7);
241
242 SetRect(&rc, 50,50,50,50);
243 ret = SendMessageW(hwnd1, BCM_SETTEXTMARGIN, 0, (LPARAM)&rc);
244 ok (ret == TRUE, "Expected BCM_SETTEXTMARGIN to succeed\n");
245
246 memset(&s, 0, sizeof(s));
247 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
248 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
249 ok_size(s, textent.cx + 5 + 100,
250 textent.cy + 7 + 100);
251
252 SetRect(&rc, 1,1,1,1);
253 ret = SendMessageW(hwnd1, BCM_SETTEXTMARGIN, 0, (LPARAM)&rc);
254 ok (ret == TRUE, "Expected BCM_SETTEXTMARGIN to succeed\n");
255
256 ret = SendMessageW(hwnd1, BCM_SETIMAGELIST, 0, (LPARAM)&imlData);
257 ok (ret == TRUE, "Expected BCM_SETIMAGELIST to fail\n");
258
259 memset(&s, 0, sizeof(s));
260 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
261 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
262 ok_size(s, textent.cx + 5 + 2 + 1, /* we get an extra pixel due to the iml */
263 textent.cy + 7 + 2);
264
265 s.cx = 1;
266 s.cy = 1;
267 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
268 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
269 ok_size(s, textent.cx + 5 + 2 + 1,
270 textent.cy + 7 + 2);
271
272 s.cx = 100;
273 s.cy = 100;
274 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
275 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
276 ok_size(s, textent.cx + 5 + 2 + 1,
277 textent.cy + 7 + 2);
278
279 SetRect(&imlData.margin, 1,1,1,1);
280 ret = SendMessageW(hwnd1, BCM_SETIMAGELIST, 0, (LPARAM)&imlData);
281 ok (ret == TRUE, "Expected BCM_SETIMAGELIST to fail\n");
282
283 memset(&s, 0, sizeof(s));
284 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
285 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
286 /* expected width = text width + hardcoded value + text margins + image width + image margins */
287 ok_size(s, textent.cx + 5 + 2 + 1 + 2,
288 textent.cy + 7 + 2);
289
290 SetRect(&imlData.margin, 50,50,50,50);
291 ret = SendMessageW(hwnd1, BCM_SETIMAGELIST, 0, (LPARAM)&imlData);
292 ok (ret == TRUE, "Expected BCM_SETIMAGELIST to fail\n");
293
294 memset(&s, 0, sizeof(s));
295 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
296 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
297 /* image + its margins is so big that the height is dictated by them */
298 ok_size(s, textent.cx + 5 + 2 + 1 + 100, (LONG)101);
299
300 DestroyWindow(hwnd1);
301
302
303
304
305
306
307 hwnd1 = CreateWindowW(L"Button", L"Start", BS_VCENTER | WS_CHILD, 0, 0, 0, 0, hwnd2, NULL, NULL, NULL);
308 ok (hwnd1 != NULL, "Expected CreateWindowW to succeed\n");
309 SetWindowTheme(hwnd1, L"", L"");
310
311 font = (HFONT)SendMessageW(hwnd1, WM_GETFONT, 0, 0);
312 hdc = GetDC(hwnd1);
314 GetTextExtentPoint32W(hdc, L"Start", 5, &textent);
315
316 SetRect(&rc, 0,0,0,0);
317 ret = SendMessageW(hwnd1, BCM_SETTEXTMARGIN, 0, (LPARAM)&rc);
318 ok (ret == TRUE, "Expected BCM_SETTEXTMARGIN to succeed\n");
319
320 memset(&s, 0, sizeof(s));
321 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
322 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
323 ok_size(s, textent.cx + 5, textent.cy + 7);
324
325 DestroyWindow(hwnd1);
326
327
328
329
330 /* Test again with some real text to see if the formula is correct */
331 hwnd1 = CreateWindowW(L"Button", L"Some test text", WS_CHILD, 10, 10, 100, 100, hwnd2, NULL, NULL, NULL);
332 ok (hwnd1 != NULL, "Expected CreateWindowW to succeed\n");
333 SetWindowTheme(hwnd1, L"", L"");
334
335 font = (HFONT)SendMessageW(hwnd1, WM_GETFONT, 0, 0);
336 hdc = GetDC(hwnd1);
338 GetTextExtentPoint32W(hdc, L"Some test text", 14, &textent);
339
340 memset(&s, 0, sizeof(s));
341 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
342 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
343 ok_size(s, textent.cx + 5 + 2, /* the last +2 is the text margin */
344 textent.cy + 7 + 2);
345
346 /* The hardcoded values are independent of the margin */
347 lf.lfHeight = 200;
348 lf.lfWidth = 200;
349 lf.lfWeight = FW_BOLD;
350 wcscpy(lf.lfFaceName, L"Arial");
352 ok(font != NULL, "\n");
354
356 GetTextExtentPoint32W(hdc, L"Some test text", 14, &textent);
357
358 memset(&s, 0, sizeof(s));
359 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
360 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
361 ok_size(s, textent.cx + 5 + 2, /* the last +2 is the text margin */
362 textent.cy + 7 + 2);
363
364 DestroyWindow(hwnd1);
365
366 for (i = BS_PUSHBUTTON; i <= BS_OWNERDRAW; i++)
367 {
368 if (i == BS_USERBUTTON)
369 continue;
370
371 if (i >= BS_CHECKBOX)
372 {
373 hwnd1 = CreateWindowW(L"Button", L" ", i|WS_CHILD, 0, 0, 72, 72, hwnd2, NULL, NULL, NULL);
374 ok (hwnd1 != NULL, "Expected CreateWindowW to succeed\n");
375 memset(&s, 0, sizeof(s));
376 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
377 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
378 ok_size(s, 72, 72);
379
380 SetWindowTheme(hwnd1, L"", L"");
381 memset(&s, 0, sizeof(s));
382 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
383 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
384 ok_size(s, 72, 72);
385 DestroyWindow(hwnd1);
386
387 hwnd1 = CreateWindowW(L"Button", L" ", i|WS_CHILD, 0, 0, 12, 12, hwnd2, NULL, NULL, NULL);
388 ok (hwnd1 != NULL, "Expected CreateWindowW to succeed\n");
389 memset(&s, 0, sizeof(s));
390 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
391 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
392 ok_size(s, 12, 12);
393 DestroyWindow(hwnd1);
394 }
395
396 hwnd1 = CreateWindowW(L"Button", L"", i|WS_CHILD, 0, 0, 72, 72, hwnd2, NULL, NULL, NULL);
397 ok (hwnd1 != NULL, "Expected CreateWindowW to succeed\n");
398 memset(&s, 0, sizeof(s));
399 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
400 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
401 ok_size(s, 72, 72);
402 DestroyWindow(hwnd1);
403
404 hwnd1 = CreateWindowW(L"Button", L"", i|WS_CHILD, 0, 0, 150, 72, hwnd2, NULL, NULL, NULL);
405 ok (hwnd1 != NULL, "Expected CreateWindowW to succeed\n");
406 memset(&s, 0, sizeof(s));
407 ret = SendMessageW(hwnd1, BCM_GETIDEALSIZE, 0, (LPARAM)&s);
408 ok (ret == TRUE, "Expected BCM_GETIDEALSIZE to succeed\n");
409 ok_size(s, 150, 72);
410 DestroyWindow(hwnd1);
411 }
412 DestroyWindow(hwnd2);
413}
#define ok(value,...)
Definition: atltest.h:57
HBITMAP hbmp
HIMAGELIST himl
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLdouble s
Definition: gl.h:2039
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 ok_size(s, width, height)
Definition: button.c:18
HDC hdc
Definition: main.c:9
static HDC
Definition: imagelist.c:92
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
Definition: mk_font.cpp:20
#define WS_CHILD
Definition: pedump.c:617
#define BS_USERBUTTON
Definition: pedump.c:659
long LONG
Definition: pedump.c:60
#define BS_OWNERDRAW
Definition: pedump.c:661
#define BS_CHECKBOX
Definition: pedump.c:653
#define BS_PUSHBUTTON
Definition: pedump.c:651
#define ImageList_LoadImage
Definition: commctrl.h:508
#define BCM_GETIDEALSIZE
Definition: commctrl.h:4639
#define BCM_SETIMAGELIST
Definition: commctrl.h:4642
#define BCM_SETTEXTMARGIN
Definition: commctrl.h:4648
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define memset(x, y, z)
Definition: compat.h:39
HIMAGELIST himl
Definition: commctrl.h:4634
LONG lfHeight
Definition: dimm.idl:59
LONG lfWeight
Definition: dimm.idl:63
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
LONG lfWidth
Definition: dimm.idl:60
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
HRESULT WINAPI SetWindowTheme(_In_ HWND hwnd, _In_ LPCWSTR pszSubAppName, _In_ LPCWSTR pszSubIdList)
Definition: uxthemesupp.c:69
int ret
#define GetModuleHandle
Definition: winbase.h:3762
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
#define FW_BOLD
Definition: wingdi.h:378
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
HFONT WINAPI CreateFontIndirectW(_In_ const LOGFONTW *)
BOOL WINAPI GetTextExtentPoint32W(_In_ HDC hdc, _In_reads_(c) LPCWSTR lpString, _In_ int c, _Out_ LPSIZE psizl)
#define BS_BITMAP
Definition: winuser.h:258
#define IMAGE_BITMAP
Definition: winuser.h:211
#define WM_GETFONT
Definition: winuser.h:1651
#define BM_SETIMAGE
Definition: winuser.h:1922
#define WM_SETFONT
Definition: winuser.h:1650
#define BS_VCENTER
Definition: winuser.h:279
HDC WINAPI GetDC(_In_opt_ HWND)
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
Definition: winuser.h:4316
#define LoadImage
Definition: winuser.h:5815
BOOL WINAPI DestroyWindow(_In_ HWND)
#define MAKEINTRESOURCE
Definition: winuser.h:591
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)

Referenced by START_TEST().

◆ Test_Imagelist()

void Test_Imagelist ( )

Definition at line 72 of file button.c.

73{
74 HWND hwnd1;
75 BOOL ret;
76 BUTTON_IMAGELIST imlData;
77
78 hwnd1 = CreateWindowW(L"Button", L"Test2", 0, 10, 10, 100, 100, 0, NULL, NULL, NULL);
79 ok (hwnd1 != NULL, "Expected CreateWindowW to succeed\n");
80
81 ret = SendMessageW(hwnd1, BCM_GETIMAGELIST, 0, (LPARAM)&imlData);
82 ok (ret == TRUE, "Expected BCM_GETIMAGELIST to succeed\n");
83 ok (imlData.himl == 0, "Expected 0 himl\n");
84 ok (imlData.uAlign == 0, "Expected 0 uAlign\n");
85 ok_rect(imlData.margin, 0, 0, 0, 0);
86
87 SetRect(&imlData.margin, 0,0,0,1);
88 ret = SendMessageW(hwnd1, BCM_SETIMAGELIST, 0, (LPARAM)&imlData);
89 ok (ret == FALSE, "Expected BCM_SETIMAGELIST to fail\n"); /* This works in win10 */
90
91 imlData.himl = (HIMAGELIST)0xdead;
92 ret = SendMessageW(hwnd1, BCM_SETIMAGELIST, 0, (LPARAM)&imlData);
93 ok (ret == TRUE, "Expected BCM_SETIMAGELIST to fail\n");
94
95 ret = SendMessageW(hwnd1, BCM_GETIMAGELIST, 0, (LPARAM)&imlData);
96 ok (ret == TRUE, "Expected BCM_GETIMAGELIST to succeed\n");
97 ok (imlData.himl == (HIMAGELIST)0xdead, "Expected 0 himl\n");
98 ok (imlData.uAlign == 0, "Expected 0 uAlign\n");
99 ok_rect(imlData.margin, 0, 0, 0, 1);
100
101 imlData.himl = 0;
102 ret = SendMessageW(hwnd1, BCM_SETIMAGELIST, 0, (LPARAM)&imlData);
103 ok (ret == FALSE, "Expected BCM_SETIMAGELIST to fail\n"); /* This works in win10 */
104
105 DestroyWindow(hwnd1);
106}
#define ok_rect(rc, l, r, t, b)
Definition: button.c:17
struct _IMAGELIST * HIMAGELIST
Definition: commctrl.h:324
#define BCM_GETIMAGELIST
Definition: commctrl.h:4645

Referenced by START_TEST().

◆ Test_MessagesNonThemed()

void Test_MessagesNonThemed ( )

Definition at line 696 of file button.c.

697{
698 DWORD state;
699
700 MOVE_CURSOR(0,0);
701 EMPTY_CACHE();
702
703 RegisterSimpleClass(TestProc, L"testClass");
704 hWnd1 = CreateWindowW(L"testClass", L"Test parent", WS_POPUP | WS_VISIBLE, 100, 100, 200, 200, 0, NULL, NULL, NULL);
705 ok (hWnd1 != NULL, "Expected CreateWindowW to succeed\n");
706 SetWindowTheme(hWnd1, L"", L"");
708
709 hWnd2 = CreateWindowW(L"Button", L"test button", /*BS_RADIOBUTTON | */WS_CHILD | WS_VISIBLE, 0, 0, 100, 100, hWnd1, NULL, NULL, NULL);
710 ok (hWnd2 != NULL, "Expected CreateWindowW to succeed\n");
711 SetWindowTheme(hWnd2, L"", L"");
714
716 EMPTY_CACHE();
717
723
727
731
735
739
743
747
751
755
757 ok_hex(state, 0);
758 EMPTY_CACHE();
759
760 MOVE_CURSOR(150,150);
763
766 EMPTY_CACHE();
767
768 MOVE_CURSOR(151,151);
771
774 EMPTY_CACHE();
775
776 MOVE_CURSOR(0,0);
781
783 ok(state == 0, "Expected state 0, got %lu\n", state);
784 EMPTY_CACHE();
785
786 SendMessageW(hWnd2, WM_THEMECHANGED, 1, 0);
789
793
797
799 ok_hex(state, BST_PUSHED | BST_FOCUS | 0x20 | 0x40);
800 EMPTY_CACHE();
801
805
807 ok_hex(state, BST_PUSHED | BST_FOCUS | 0x20 | 0x40);
808 EMPTY_CACHE();
809
813
816 EMPTY_CACHE();
817
821
824 EMPTY_CACHE();
825
828}
static int state
Definition: maze.c:121
#define ok_hex(expression, result)
Definition: atltest.h:94
BOOL WINAPI SetWindowSubclass(HWND hWnd, SUBCLASSPROC pfnSubclass, UINT_PTR uIDSubclass, DWORD_PTR dwRef)
Definition: commctrl.c:1261
static void FlushMessages()
Definition: button.c:489
MSG_ENTRY btnclick_nonthemed_sequence[]
Definition: button.c:678
MSG_ENTRY redraw_nonthemed_sequence[]
Definition: button.c:531
MSG_ENTRY mouseleave_nonthemed_sequence[]
Definition: button.c:633
#define MOVE_CURSOR(x, y)
Definition: button.c:418
MSG_ENTRY btndown_repeat_nonthemed_sequence[]
Definition: button.c:673
MSG_ENTRY paint_nonthemed_sequence[]
Definition: button.c:514
MSG_ENTRY btnup_stray_sequence[]
Definition: button.c:692
MSG_ENTRY mouseenter_nonthemed_sequence[]
Definition: button.c:601
MSG_ENTRY themechanged_sequence[]
Definition: button.c:643
MSG_ENTRY pseudohover_sequence[]
Definition: button.c:578
MSG_ENTRY printclnt_nonthemed_sequence[]
Definition: button.c:539
MSG_ENTRY enable_nonthemed_sequence[]
Definition: button.c:653
static LRESULT CALLBACK subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam, UINT_PTR id, DWORD_PTR ref_data)
Definition: button.c:429
MSG_ENTRY mousemove_sequence[]
Definition: button.c:614
MSG_ENTRY pseudoleave_sequence[]
Definition: button.c:582
MSG_ENTRY pseudomove_nonthemed_sequence[]
Definition: button.c:566
MSG_ENTRY btndown_nonthemed_sequence[]
Definition: button.c:661
MSG_ENTRY empty_chain[]
Definition: msgtrace.c:20
#define EMPTY_CACHE()
Definition: msgtrace.h:59
#define COMPARE_CACHE(msg_chain)
Definition: msgtrace.h:57
#define WS_POPUP
Definition: pedump.c:616
#define WS_VISIBLE
Definition: pedump.c:620
#define BST_HOT
Definition: commctrl.h:4668
#define WM_MOUSELEAVE
Definition: commctrl.h:4975
#define WM_MOUSEHOVER
Definition: commctrl.h:4974
#define TestProc(n)
Definition: queuetest.c:15
#define WM_PRINTCLIENT
Definition: richedit.h:70
static __inline ATOM RegisterSimpleClass(WNDPROC lpfnWndProc, LPCWSTR lpszClassName)
#define BM_GETSTATE
Definition: winuser.h:1920
BOOL WINAPI RedrawWindow(_In_opt_ HWND, _In_opt_ LPCRECT, _In_opt_ HRGN, _In_ UINT)
#define WM_ENABLE
Definition: winuser.h:1615
#define PRF_ERASEBKGND
Definition: winuser.h:2526
#define WM_MOUSEMOVE
Definition: winuser.h:1775
#define RDW_ERASE
Definition: winuser.h:1211
#define WM_LBUTTONDOWN
Definition: winuser.h:1776
#define BM_CLICK
Definition: winuser.h:1917
#define BST_PUSHED
Definition: winuser.h:201
#define RDW_FRAME
Definition: winuser.h:1212
BOOL WINAPI UpdateWindow(_In_ HWND)
#define BST_FOCUS
Definition: winuser.h:200
#define WM_LBUTTONUP
Definition: winuser.h:1777
#define RDW_INTERNALPAINT
Definition: winuser.h:1213
#define RDW_INVALIDATE
Definition: winuser.h:1214

Referenced by START_TEST().

◆ Test_MessagesThemed()

void Test_MessagesThemed ( )

Definition at line 830 of file button.c.

831{
832 DWORD state;
833
834 MOVE_CURSOR(0,0);
835 EMPTY_CACHE();
836
837 RegisterSimpleClass(TestProc, L"testClass");
838 hWnd1 = CreateWindowW(L"testClass", L"Test parent", WS_POPUP | WS_VISIBLE, 100, 100, 200, 200, 0, NULL, NULL, NULL);
839 ok (hWnd1 != NULL, "Expected CreateWindowW to succeed\n");
841
842 hWnd2 = CreateWindowW(L"Button", L"test button", /*BS_RADIOBUTTON | */WS_CHILD | WS_VISIBLE, 0, 0, 100, 100, hWnd1, NULL, NULL, NULL);
843 ok (hWnd2 != NULL, "Expected CreateWindowW to succeed\n");
846
848 EMPTY_CACHE();
849
855
859
863
867
871
875
879
883
887
891
893 ok(state == 0, "Expected state 0, got %lu", state);
894 EMPTY_CACHE();
895
896 MOVE_CURSOR(150,150);
899
901 ok(state == BST_HOT, "Expected state BST_HOT, got %lu", state);
902 EMPTY_CACHE();
903
904 MOVE_CURSOR(151,151);
907
909 ok(state == BST_HOT, "Expected state BST_HOT, got %lu", state);
910 EMPTY_CACHE();
911
912 MOVE_CURSOR(0,0);
917
919 ok(state == 0, "Expected state 0, got %lu", state);
920 EMPTY_CACHE();
921
924}
MSG_ENTRY mouseleave_sequence[]
Definition: button.c:621
MSG_ENTRY mouseenter_sequence[]
Definition: button.c:586
MSG_ENTRY redraw_sequence[]
Definition: button.c:521
MSG_ENTRY paint_sequence[]
Definition: button.c:505
MSG_ENTRY printclnt_sequence[]
Definition: button.c:546
MSG_ENTRY pseudomove_sequence[]
Definition: button.c:552
#define PRF_CLIENT
Definition: winuser.h:2525

Referenced by START_TEST().

◆ Test_TextMargin()

void Test_TextMargin ( )

Definition at line 20 of file button.c.

21{
22 RECT rc;
23 BOOL ret;
24 HWND hwnd1;
25
26 hwnd1 = CreateWindowW(L"Button", L"Test1", 0, 10, 10, 100, 100, 0, NULL, NULL, NULL);
27 ok (hwnd1 != NULL, "Expected CreateWindowW to succeed\n");
28 SetWindowTheme(hwnd1, L"", L"");
29
30 ret = SendMessageW(hwnd1, BCM_GETTEXTMARGIN, 0, (LPARAM)&rc);
31 ok (ret == TRUE, "Expected BCM_GETTEXTMARGIN to succeed\n");
32 ok_rect(rc, 1, 1, 1, 1);
33
34 SetRect(&rc, 0,0,0,0);
35 ret = SendMessageW(hwnd1, BCM_SETTEXTMARGIN, 0, (LPARAM)&rc);
36 ok (ret == TRUE, "Expected BCM_SETTEXTMARGIN to succeed\n");
37
38 ret = SendMessageW(hwnd1, BCM_GETTEXTMARGIN, 0, (LPARAM)&rc);
39 ok (ret == TRUE, "Expected BCM_GETTEXTMARGIN to succeed\n");
40 ok_rect(rc, 0, 0, 0, 0);
41
42 SetRect(&rc, -1,-1,-1,-1);
43 ret = SendMessageW(hwnd1, BCM_SETTEXTMARGIN, 0, (LPARAM)&rc);
44 ok (ret == TRUE, "Expected BCM_SETTEXTMARGIN to succeed\n");
45
46 ret = SendMessageW(hwnd1, BCM_GETTEXTMARGIN, 0, (LPARAM)&rc);
47 ok (ret == TRUE, "Expected BCM_GETTEXTMARGIN to succeed\n");
48 ok_rect(rc, -1, -1, -1, -1);
49
50 SetRect(&rc, 1000,1000,1000,1000);
51 ret = SendMessageW(hwnd1, BCM_SETTEXTMARGIN, 0, (LPARAM)&rc);
52 ok (ret == TRUE, "Expected BCM_SETTEXTMARGIN to succeed\n");
53
54 ret = SendMessageW(hwnd1, BCM_GETTEXTMARGIN, 0, (LPARAM)&rc);
55 ok (ret == TRUE, "Expected BCM_GETTEXTMARGIN to succeed\n");
56 ok_rect(rc, 1000, 1000, 1000, 1000);
57
58 DestroyWindow(hwnd1);
59
60 hwnd1 = CreateWindowW(L"Button", L"Test1", BS_DEFPUSHBUTTON, 10, 10, 100, 100, 0, NULL, NULL, NULL);
61 ok (hwnd1 != NULL, "Expected CreateWindowW to succeed\n");
62 SetWindowTheme(hwnd1, L"", L"");
63
64 ret = SendMessageW(hwnd1, BCM_GETTEXTMARGIN, 0, (LPARAM)&rc);
65 ok (ret == TRUE, "Expected BCM_GETTEXTMARGIN to succeed\n");
66 ok_rect(rc, 1, 1, 1, 1);
67
68 DestroyWindow(hwnd1);
69
70}
#define BS_DEFPUSHBUTTON
Definition: pedump.c:652
#define BCM_GETTEXTMARGIN
Definition: commctrl.h:4650

Referenced by START_TEST().

◆ TestProc()

static LRESULT CALLBACK TestProc ( HWND  hwnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 464 of file button.c.

465{
466 int iwnd = get_iwnd(hwnd);
467
468 if (iwnd != 0 && message == WM_NOTIFY)
469 {
470 NMHDR* pnmhdr = (NMHDR*)lParam;
471 if (pnmhdr->code == NM_CUSTOMDRAW)
472 {
474 RECORD_MESSAGE(iwnd, message, SENT, pnmhdr->code, pnmcd->dwDrawStage);
475 }
476 else
477 {
478 RECORD_MESSAGE(iwnd, message, SENT, pnmhdr->idFrom,pnmhdr->code);
479 }
480 }
481 else if (iwnd != 0 && message < WM_USER && message != WM_GETICON)
482 {
483 RECORD_MESSAGE(iwnd, message, SENT, 0,0);
484 }
485
487}
#define DefWindowProc
Definition: ros2win.h:31

Variable Documentation

◆ btnclick_nonthemed_sequence

MSG_ENTRY btnclick_nonthemed_sequence[]
Initial value:
={
{2, BM_CLICK, SENT},
{2, BM_SETSTATE , SENT},
{2, WM_PAINT, POST},
{0,0}}
#define CDDS_PREPAINT
Definition: commctrl.h:280
#define CDDS_PREERASE
Definition: commctrl.h:282
#define WM_PAINT
Definition: winuser.h:1620
#define WM_CAPTURECHANGED
Definition: winuser.h:1808
#define BM_SETSTATE
Definition: winuser.h:1923
#define WM_COMMAND
Definition: winuser.h:1740
#define WM_CTLCOLORBTN
Definition: winuser.h:1769

Definition at line 678 of file button.c.

Referenced by Test_MessagesNonThemed().

◆ btndown_nonthemed_sequence

MSG_ENTRY btndown_nonthemed_sequence[]
Initial value:
={
{2, WM_PAINT, POST},
{0,0}}
#define WM_SETFOCUS
Definition: winuser.h:1613
#define WM_KILLFOCUS
Definition: winuser.h:1614

Definition at line 661 of file button.c.

Referenced by Test_MessagesNonThemed().

◆ btndown_repeat_nonthemed_sequence

MSG_ENTRY btndown_repeat_nonthemed_sequence[]
Initial value:
={
{0,0}}

Definition at line 673 of file button.c.

Referenced by Test_MessagesNonThemed().

◆ btnup_stray_sequence

MSG_ENTRY btnup_stray_sequence[]
Initial value:
={
{0,0}}

Definition at line 692 of file button.c.

Referenced by Test_MessagesNonThemed().

◆ enable_nonthemed_sequence

MSG_ENTRY enable_nonthemed_sequence[]
Initial value:

Definition at line 653 of file button.c.

Referenced by Test_MessagesNonThemed().

◆ hWnd1

◆ hWnd2

◆ mouseenter_nonthemed_sequence

MSG_ENTRY mouseenter_nonthemed_sequence[]
Initial value:
={
{2, WM_PAINT, POST},
{0,0}}
#define BCN_HOTITEMCHANGE
Definition: commctrl.h:260
#define WM_ERASEBKGND
Definition: winuser.h:1625
#define WM_NCHITTEST
Definition: winuser.h:1686
#define WM_SETCURSOR
Definition: winuser.h:1636

Definition at line 601 of file button.c.

Referenced by Test_MessagesNonThemed().

◆ mouseenter_sequence

MSG_ENTRY mouseenter_sequence[]
Initial value:

Definition at line 586 of file button.c.

Referenced by Test_MessagesThemed().

◆ mouseleave_nonthemed_sequence

MSG_ENTRY mouseleave_nonthemed_sequence[]
Initial value:

Definition at line 633 of file button.c.

Referenced by Test_MessagesNonThemed().

◆ mouseleave_sequence

MSG_ENTRY mouseleave_sequence[]
Initial value:

Definition at line 621 of file button.c.

Referenced by Test_MessagesThemed().

◆ mousemove_sequence

MSG_ENTRY mousemove_sequence[]
Initial value:
={
{0,0}}

Definition at line 614 of file button.c.

Referenced by Test_MessagesNonThemed(), and Test_MessagesThemed().

◆ paint_nonthemed_sequence

MSG_ENTRY paint_nonthemed_sequence[]
Initial value:

Definition at line 514 of file button.c.

Referenced by Test_MessagesNonThemed().

◆ paint_sequence

MSG_ENTRY paint_sequence[]
Initial value:

Definition at line 505 of file button.c.

Referenced by Test_MessagesThemed().

◆ printclnt_nonthemed_sequence

MSG_ENTRY printclnt_nonthemed_sequence[]
Initial value:

Definition at line 539 of file button.c.

Referenced by Test_MessagesNonThemed().

◆ printclnt_sequence

MSG_ENTRY printclnt_sequence[]
Initial value:

Definition at line 546 of file button.c.

Referenced by Test_MessagesThemed().

◆ pseudohover_sequence

MSG_ENTRY pseudohover_sequence[]
Initial value:
={
{0,0}}

Definition at line 578 of file button.c.

Referenced by Test_MessagesNonThemed(), and Test_MessagesThemed().

◆ pseudoleave_sequence

MSG_ENTRY pseudoleave_sequence[]
Initial value:
={
{0,0}}

Definition at line 582 of file button.c.

Referenced by Test_MessagesNonThemed(), and Test_MessagesThemed().

◆ pseudomove_nonthemed_sequence

MSG_ENTRY pseudomove_nonthemed_sequence[]
Initial value:

Definition at line 566 of file button.c.

Referenced by Test_MessagesNonThemed().

◆ pseudomove_sequence

MSG_ENTRY pseudomove_sequence[]
Initial value:

Definition at line 552 of file button.c.

Referenced by Test_MessagesThemed().

◆ redraw_nonthemed_sequence

MSG_ENTRY redraw_nonthemed_sequence[]
Initial value:

Definition at line 531 of file button.c.

Referenced by Test_MessagesNonThemed().

◆ redraw_sequence

MSG_ENTRY redraw_sequence[]
Initial value:

Definition at line 521 of file button.c.

Referenced by Test_MessagesThemed().

◆ themechanged_sequence

MSG_ENTRY themechanged_sequence[]
Initial value:
={
{2, WM_THEMECHANGED, SENT},
{2, WM_PAINT, POST},
{0,0}}
#define NM_THEMECHANGED
Definition: commctrl.h:147

Definition at line 643 of file button.c.

Referenced by Test_MessagesNonThemed().