ReactOS  0.4.15-dev-1054-gd029a62
static.c File Reference
#include <stdarg.h>
#include <stdio.h>
#include <windows.h>
#include "commctrl.h"
#include "wine/test.h"
#include "v6util.h"
Include dependency graph for static.c:

Go to the source code of this file.

Macros

#define STRICT
 
#define WIN32_LEAN_AND_MEAN
 
#define TODO_COUNT   1
 
#define CTRL_ID   1995
 

Functions

static void flush_events (void)
 
static HWND create_static (DWORD style)
 
static LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
 
static void test_updates (int style, int flags)
 
static void test_set_text (void)
 
 START_TEST (static)
 

Variables

static HWND hMainWnd
 
static int g_nReceivedColorStatic
 

Macro Definition Documentation

◆ CTRL_ID

#define CTRL_ID   1995

Definition at line 36 of file static.c.

◆ STRICT

#define STRICT

Definition at line 24 of file static.c.

◆ TODO_COUNT

#define TODO_COUNT   1

Definition at line 34 of file static.c.

◆ WIN32_LEAN_AND_MEAN

#define WIN32_LEAN_AND_MEAN

Definition at line 26 of file static.c.

Function Documentation

◆ create_static()

static HWND create_static ( DWORD  style)
static

Definition at line 57 of file static.c.

58 {
59  return CreateWindowA(WC_STATICA, "Test", WS_VISIBLE|WS_CHILD|style, 5, 5, 100, 100, hMainWnd, (HMENU)CTRL_ID, NULL, 0);
60 }
#define WC_STATICA
Definition: commctrl.h:4675
#define WS_CHILD
Definition: pedump.c:617
#define CTRL_ID
Definition: static.c:36
#define CreateWindowA(a, b, c, d, e, f, g, h, i, j, k)
Definition: winuser.h:4290
smooth NULL
Definition: ftsmooth.c:416
static HWND hMainWnd
Definition: static.c:38
Arabic default style
Definition: afstyles.h:93
#define WS_VISIBLE
Definition: pedump.c:620
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60

Referenced by test_set_text(), and test_updates().

◆ flush_events()

static void flush_events ( void  )
static

Definition at line 42 of file static.c.

43 {
44  MSG msg;
45  int diff = 200;
46  int min_timeout = 100;
47  DWORD time = GetTickCount() + diff;
48 
49  while (diff > 0)
50  {
51  if (MsgWaitForMultipleObjects( 0, NULL, FALSE, min_timeout, QS_ALLINPUT ) == WAIT_TIMEOUT) break;
52  while (PeekMessageA( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg );
53  diff = time - GetTickCount();
54  }
55 }
LRESULT WINAPI DispatchMessageA(_In_ const MSG *)
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
DWORD WINAPI GetTickCount(VOID)
Definition: time.c:455
__u16 time
Definition: mkdosfs.c:366
BOOL WINAPI PeekMessageA(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
#define FALSE
Definition: types.h:117
smooth NULL
Definition: ftsmooth.c:416
unsigned long DWORD
Definition: ntddk_ex.h:95
#define WAIT_TIMEOUT
Definition: dderror.h:14
DWORD WINAPI MsgWaitForMultipleObjects(_In_ DWORD nCount, _In_reads_opt_(nCount) CONST HANDLE *pHandles, _In_ BOOL fWaitAll, _In_ DWORD dwMilliseconds, _In_ DWORD dwWakeMask)
#define QS_ALLINPUT
Definition: winuser.h:874
#define msg(x)
Definition: auth_time.c:54
#define PM_REMOVE
Definition: winuser.h:1182

Referenced by test_updates().

◆ START_TEST()

START_TEST ( static  )

Definition at line 138 of file static.c.

139 {
140  static const char classname[] = "testclass";
141  WNDCLASSEXA wndclass;
142  ULONG_PTR ctx_cookie;
143  HANDLE hCtx;
144 
145  if (!load_v6_module(&ctx_cookie, &hCtx))
146  return;
147 
148  wndclass.cbSize = sizeof(wndclass);
149  wndclass.style = CS_HREDRAW | CS_VREDRAW;
150  wndclass.lpfnWndProc = WndProc;
151  wndclass.cbClsExtra = 0;
152  wndclass.cbWndExtra = 0;
153  wndclass.hInstance = GetModuleHandleA(NULL);
154  wndclass.hIcon = LoadIconA(NULL, (LPCSTR)IDI_APPLICATION);
156  wndclass.hCursor = LoadCursorA(NULL, (LPCSTR)IDC_ARROW);
158  wndclass.lpszClassName = classname;
159  wndclass.lpszMenuName = NULL;
160  RegisterClassExA(&wndclass);
161 
162  hMainWnd = CreateWindowA(classname, "Test", WS_OVERLAPPEDWINDOW, 0, 0, 500, 500, NULL, NULL,
165 
166  test_updates(0, 0);
168  test_updates(SS_ICON, 0);
175  test_set_text();
176 
178 
179  unload_v6_module(ctx_cookie, hCtx);
180 }
HGDIOBJ WINAPI GetStockObject(_In_ int)
UINT style
Definition: winuser.h:3177
LPCSTR lpszMenuName
Definition: winuser.h:3185
HCURSOR hCursor
Definition: winuser.h:3183
WNDPROC lpfnWndProc
Definition: winuser.h:3178
LPCSTR lpszClassName
Definition: winuser.h:3186
#define SS_BLACKRECT
Definition: pedump.c:696
#define CS_HREDRAW
Definition: winuser.h:648
static void unload_v6_module(ULONG_PTR cookie, HANDLE hCtx)
Definition: v6util.h:63
#define WHITE_BRUSH
Definition: wingdi.h:901
#define IDI_APPLICATION
Definition: winuser.h:699
HICON hIconSm
Definition: winuser.h:3187
WCHAR classname[128]
Definition: startup.c:15
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI DestroyWindow(_In_ HWND)
static void test_updates(int style, int flags)
Definition: static.c:81
HICON WINAPI LoadIconA(_In_opt_ HINSTANCE, _In_ LPCSTR)
Definition: cursoricon.c:2029
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define SS_BITMAP
Definition: pedump.c:704
HINSTANCE hInstance
Definition: winuser.h:3181
static BOOL load_v6_module(ULONG_PTR *pcookie, HANDLE *hCtx)
Definition: v6util.h:71
#define CreateWindowA(a, b, c, d, e, f, g, h, i, j, k)
Definition: winuser.h:4290
smooth NULL
Definition: ftsmooth.c:416
UINT cbSize
Definition: winuser.h:3176
const char * LPCSTR
Definition: xmlstorage.h:183
#define SW_SHOW
Definition: winuser.h:769
HBRUSH hbrBackground
Definition: winuser.h:3184
#define CS_VREDRAW
Definition: winuser.h:653
#define SS_ETCHEDHORZ
Definition: winuser.h:343
int cbWndExtra
Definition: winuser.h:3180
#define TODO_COUNT
Definition: static.c:34
static void test_set_text(void)
Definition: static.c:123
HICON hIcon
Definition: winuser.h:3182
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
Definition: static.c:62
ATOM WINAPI RegisterClassExA(_In_ CONST WNDCLASSEXA *)
HCURSOR WINAPI LoadCursorA(_In_opt_ HINSTANCE, _In_ LPCSTR)
Definition: cursoricon.c:2059
#define SS_CENTERIMAGE
Definition: winuser.h:339
#define SS_SIMPLE
Definition: pedump.c:702
int cbClsExtra
Definition: winuser.h:3179
#define SS_ETCHEDVERT
Definition: winuser.h:344
static HWND hMainWnd
Definition: static.c:38
#define IDC_ARROW
Definition: winuser.h:682
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637
#define SS_ICON
Definition: pedump.c:695
#define SS_WHITERECT
Definition: pedump.c:698

◆ test_set_text()

static void test_set_text ( void  )
static

Definition at line 123 of file static.c.

124 {
125  HWND hStatic = create_static(SS_SIMPLE);
126  char buffA[10];
127 
128  GetWindowTextA(hStatic, buffA, sizeof(buffA));
129  ok(!strcmp(buffA, "Test"), "got wrong text %s\n", buffA);
130 
131  SetWindowTextA(hStatic, NULL);
132  GetWindowTextA(hStatic, buffA, sizeof(buffA));
133  ok(buffA[0] == 0, "got wrong text %s\n", buffA);
134 
135  DestroyWindow(hStatic);
136 }
int WINAPI GetWindowTextA(HWND hWnd, LPSTR lpString, int nMaxCount)
Definition: window.c:1330
BOOL WINAPI DestroyWindow(_In_ HWND)
static HWND create_static(DWORD style)
Definition: static.c:57
smooth NULL
Definition: ftsmooth.c:416
BOOL WINAPI SetWindowTextA(_In_ HWND, _In_opt_ LPCSTR)
#define SS_SIMPLE
Definition: pedump.c:702
#define ok(value,...)
Definition: atltest.h:57
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469

Referenced by START_TEST().

◆ test_updates()

static void test_updates ( int  style,
int  flags 
)
static

Definition at line 81 of file static.c.

82 {
83  HWND hStatic = create_static(style);
84  RECT r1 = {20, 20, 30, 30};
85  int exp;
86 
87  flush_events();
89  /* during each update parent WndProc will test the WM_CTLCOLORSTATIC message */
94  InvalidateRect(hStatic, &r1, FALSE);
95  UpdateWindow(hStatic);
96  InvalidateRect(hStatic, NULL, FALSE);
97  UpdateWindow(hStatic);
98 
99  if ((style & SS_TYPEMASK) == SS_BITMAP)
100  {
101  HDC hdc = GetDC(hStatic);
102  COLORREF colour = GetPixel(hdc, 10, 10);
103  todo_wine
104  ok(colour == 0, "Unexpected pixel color.\n");
105  ReleaseDC(hStatic, hdc);
106  }
107 
108  if (style != SS_ETCHEDHORZ && style != SS_ETCHEDVERT)
109  exp = 4;
110  else
111  exp = 1; /* SS_ETCHED* seems to send WM_CTLCOLORSTATIC only sometimes */
112 
113  if (flags & TODO_COUNT)
114  todo_wine
115  ok(g_nReceivedColorStatic == exp, "Unexpected WM_CTLCOLORSTATIC value %d\n", g_nReceivedColorStatic);
116  else if ((style & SS_TYPEMASK) == SS_ICON || (style & SS_TYPEMASK) == SS_BITMAP)
117  ok(g_nReceivedColorStatic == exp, "Unexpected %u got %u\n", exp, g_nReceivedColorStatic);
118  else
119  ok(g_nReceivedColorStatic == exp, "Unexpected WM_CTLCOLORSTATIC value %d\n", g_nReceivedColorStatic);
120  DestroyWindow(hStatic);
121 }
static int g_nReceivedColorStatic
Definition: static.c:39
HDC WINAPI GetDC(_In_opt_ HWND)
#define SS_TYPEMASK
Definition: winuser.h:362
static HDC
Definition: imagelist.c:92
static DNS_RECORDW r1
Definition: record.c:37
BOOL WINAPI UpdateWindow(_In_ HWND)
DWORD GetPixel(LPDIRECTDRAWSURFACE7 Surface, UINT x, UINT y)
Definition: blt.cpp:2
BOOL WINAPI DestroyWindow(_In_ HWND)
#define SS_BITMAP
Definition: pedump.c:704
#define FALSE
Definition: types.h:117
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
static HWND create_static(DWORD style)
Definition: static.c:57
smooth NULL
Definition: ftsmooth.c:416
static void flush_events(void)
Definition: static.c:42
#define SS_ETCHEDHORZ
Definition: winuser.h:343
DWORD COLORREF
Definition: windef.h:300
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define TODO_COUNT
Definition: static.c:34
GLbitfield flags
Definition: glext.h:7161
#define todo_wine
Definition: test.h:162
HDC hdc
Definition: main.c:9
#define ok(value,...)
Definition: atltest.h:57
#define SS_ETCHEDVERT
Definition: winuser.h:344
static HWND hMainWnd
Definition: static.c:38
DWORD exp
Definition: msg.c:16033
Arabic default style
Definition: afstyles.h:93
#define SS_ICON
Definition: pedump.c:695

Referenced by START_TEST().

◆ WndProc()

static LRESULT CALLBACK WndProc ( HWND  hwnd,
UINT  msg,
WPARAM  wparam,
LPARAM  lparam 
)
static

Definition at line 62 of file static.c.

63 {
64  switch (msg)
65  {
66  case WM_CTLCOLORSTATIC:
67  {
68  HDC hdc = (HDC)wparam;
69  HRGN hrgn = CreateRectRgn(0, 0, 1, 1);
70  ok(GetClipRgn(hdc, hrgn) == 1, "Static controls during a WM_CTLCOLORSTATIC must have a clipping region\n");
74  }
75  break;
76  }
77 
78  return DefWindowProcA(hwnd, msg, wparam, lparam);
79 }
HGDIOBJ WINAPI GetStockObject(_In_ int)
static int g_nReceivedColorStatic
Definition: static.c:39
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define WM_CTLCOLORSTATIC
Definition: winuser.h:1754
static HDC
Definition: imagelist.c:92
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
static UINT WPARAM LPARAM lparam
Definition: combo.c:716
HRGN WINAPI CreateRectRgn(_In_ int, _In_ int, _In_ int, _In_ int)
#define BLACK_BRUSH
Definition: wingdi.h:895
HDC hdc
Definition: main.c:9
static HRGN hrgn
Definition: win.c:55
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define ok(value,...)
Definition: atltest.h:57
#define msg(x)
Definition: auth_time.c:54
int WINAPI GetClipRgn(_In_ HDC, _In_ HRGN)
LONG_PTR LRESULT
Definition: windef.h:209
static UINT WPARAM wparam
Definition: combo.c:716

Referenced by START_TEST().

Variable Documentation

◆ g_nReceivedColorStatic

int g_nReceivedColorStatic
static

Definition at line 39 of file static.c.

Referenced by test_updates(), and WndProc().

◆ hMainWnd

HWND hMainWnd
static

Definition at line 38 of file static.c.

Referenced by create_static(), START_TEST(), and test_updates().