35#define expect(expected, got) ok(expected == got, "Expected %d, got %d\n", expected, got);
36#define expect_hex(expected, got) ok(expected == got, "Expected %x, got %x\n", expected, got);
37#define expect_d(expected, got) ok(abs((expected) - (got)) <= 2, "Expected %d, got %d\n", expected, got);
39#define NUM_MSG_SEQUENCES 2
40#define PARENT_SEQ_INDEX 0
41#define MONTHCAL_SEQ_INDEX 1
43#define SEL_NOTIFY_TEST_ID 100
265 int res, month_range;
271 ok(
hwnd !=
NULL,
"Failed to create MonthCal\n");
274 memset(&st, 0xcc,
sizeof(st));
278 "No limits should be set (%d)\n", limits);
281 win_skip(
"comctl32 <= 4.70 is broken\n");
286 ok(0 == st[0].wYear ||
287 broken(1752 == st[0].wYear),
288 "Expected 0, got %d\n", st[0].wYear);
289 ok(0 == st[0].wMonth ||
290 broken(9 == st[0].wMonth),
291 "Expected 0, got %d\n", st[0].wMonth);
292 ok(0 == st[0].wDay ||
294 "Expected 0, got %d\n", st[0].wDay);
295 expect(0, st[0].wDayOfWeek);
299 expect(0, st[0].wMilliseconds);
304 expect(0, st[1].wDayOfWeek);
308 expect(0, st[1].wMilliseconds);
311 ok(limits == 0,
"got %u\n", limits);
328 expect(1200, st[1].wMilliseconds);
331 ok(st1[0].wYear != 2000,
"Lower limit changed\n");
336 expect(1200, st1[1].wMilliseconds);
345 expect(st[0].wHour, st[1].wHour);
346 expect(st[0].wMinute, st[1].wMinute);
347 expect(st[0].wSecond, st[1].wSecond);
348 expect(1200, st[1].wMilliseconds);
354 "Should have failed to set limits\n");
356 ok(st1[0].wYear != 2000,
"Lower limit changed\n");
358 "Should have failed to set MAX limit\n");
360 ok(st1[0].wYear != 2000,
"Lower limit changed\n");
370 "Failed to set both min and max limits\n");
372 ok(
res == month_range,
"Invalid month range (%d)\n",
res);
374 "Limits should be set\n");
378 "Failed to set both min and max limits\n");
380 ok(
res == month_range,
"Invalid month range (%d)\n",
res);
384 "Failed to set both min and max limits\n");
387 "Failed to set both min and max limits\n");
392 "Only MAX limit should be set\n");
400 "Only MAX limit should be set\n");
409 "Min limit expected\n");
417 expect(0, st1[0].wDayOfWeek);
419 expect(0, st1[0].wMinute);
420 expect(0, st1[0].wSecond);
421 expect(0, st1[0].wMilliseconds);
423 expect(st[1].wYear, st1[1].wYear);
424 expect(st[1].wMonth, st1[1].wMonth);
425 expect(st[1].wDay, st1[1].wDay);
426 expect(st[1].wDayOfWeek, st1[1].wDayOfWeek);
427 expect(st[1].wHour, st1[1].wHour);
428 expect(st[1].wMinute, st1[1].wMinute);
429 expect(st[1].wSecond, st1[1].wSecond);
430 expect(st[1].wMilliseconds, st1[1].wMilliseconds);
436 "Min limit expected\n");
441 expect(st[0].wYear, st1[0].wYear);
442 expect(st[0].wMonth, st1[0].wMonth);
443 expect(st[0].wDay, st1[0].wDay);
444 expect(st[0].wDayOfWeek, st1[0].wDayOfWeek);
445 expect(st[0].wHour, st1[0].wHour);
446 expect(st[0].wMinute, st1[0].wMinute);
447 expect(st[0].wSecond, st1[0].wSecond);
448 expect(st[0].wMilliseconds, st1[0].wMilliseconds);
453 expect(0, st1[1].wDayOfWeek);
455 expect(0, st1[1].wMinute);
456 expect(0, st1[1].wSecond);
457 expect(0, st1[1].wMilliseconds);
461 ok(limits ==
GDTR_MIN,
"got 0x%08x\n", limits);
467 ok(
r,
"got %d\n",
r);
470 ok(limits == 0,
"got 0x%08x\n", limits);
471 ok(st[0].wYear == 0 && st[1].wYear == 0,
"got %u, %u\n", st[0].wYear, st[1].wYear);
479 ok(
r,
"got %d\n",
r);
482 ok(limits ==
GDTR_MIN,
"got 0x%08x\n", limits);
483 ok(st1[1].wYear == 0,
"got %u\n", st1[1].wYear);
487 ok(
r,
"got %d\n",
r);
490 ok(limits ==
GDTR_MAX,
"got 0x%08x\n", limits);
491 ok(st1[0].wYear == 0,
"got %u\n", st1[0].wYear);
498 static LONG defwndproc_counter = 0;
567 "Non-zero member in stSelEnd\n");
575 defwndproc_counter++;
577 defwndproc_counter--;
612 ok(
hwnd !=
NULL,
"failed to create parent wnd\n");
623 static LONG defwndproc_counter = 0;
635 if ((
message == WM_STYLECHANGING ||
639 trace(
"\told style: 0x%08x, new style: 0x%08x\n",
style->styleOld,
style->styleNew);
642 defwndproc_counter++;
644 defwndproc_counter--;
658 ok(
hwnd !=
NULL,
"failed to create monthcal wnd\n");
767 st_original.
wYear = 2000;
769 st_original.
wDay = 28;
770 st_original.
wHour = 11;
776 st_new = st_test = st_original;
814 "Expected %d, got %d\n", st_original.
wHour, st_new.
wHour);
829 memset(&st_new, 0,
sizeof(st_new));
835 memset(&st_test, 0,
sizeof(st_test));
845 st_original = st_new;
846 st_new.
wYear = 10000;
852 "Expected 0, got %d\n",
res);
855 memset(&st_test, 0,
sizeof(st_test));
867 memset(&st_new, 0,
sizeof(st_new));
873 memset(&st_test, 0,
sizeof(st_test));
874 st_test.
wYear = 2009;
884 memset(&st_test, 0,
sizeof(st_test));
885 st_test.
wYear = 2009;
892 memset(&st_test, 0,
sizeof(st_test));
905 int res, fday,
i, prev;
906 CHAR b[128], caltype[3];
917 skip(
"MonthCalendar Control only supports Gregorian calendar (type: %s)\n", caltype);
935 for (
i = -5;
i < 12;
i++){
954 skip(
"Cannot retrieve first day of the week\n");
982 "Expected 1, got %d\n",
res);
988 "Expected 1, got %d\n",
res);
1005 typedef struct hittest_test
1011 static const hittest_test_t title_hits[] = {
1029 char yearmonth[80], *locale_month, *locale_year;
1030 int month_count, year_count;
1054 win_skip(
"Message MCM_GETMINREQRECT unsupported. Skipping.\n");
1085 mchit.
pt.
x =
r.right;
1086 mchit.
pt.
y =
r.bottom;
1094 mchit.
pt.
x = 2 *
r.right;
1095 mchit.
pt.
y = 2 *
r.bottom;
1103 mchit.
pt.
x =
r.right / 2;
1104 mchit.
pt.
y =
r.bottom / 2;
1112 mchit.
pt.
x =
r.right / 14;
1113 mchit.
pt.
y =
r.bottom / 2;
1121 mchit.
pt.
x =
r.right / 14;
1122 mchit.
pt.
y = 6 *
r.bottom / 19;
1142 mchit.
pt.
x = 11 *
r.right / 14;
1143 mchit.
pt.
y = 16 *
r.bottom / 19;
1151 mchit.
pt.
x =
r.right / 14;
1152 mchit.
pt.
y = 18 *
r.bottom / 19;
1160 mchit.
pt.
x =
r.right / 2;
1161 mchit.
pt.
y = 18 *
r.bottom / 19;
1169 mchit.
pt.
x =
r.right / 10;
1170 mchit.
pt.
y = 18 *
r.bottom / 19;
1186 locale_year =
strstr(yearmonth,
"y");
1187 locale_month =
strstr(yearmonth,
"M");
1190 mchit.
pt.
y = (5/2) *
r.bottom / 19;
1195 in_the_middle =
FALSE;
1196 month_count = year_count = 0;
1197 for (
x = 0;
x <
r.right;
x++){
1201 expect((5/2) *
r.bottom / 19, mchit.pt.y);
1203 if (
res != old_res) {
1206 in_the_middle =
TRUE;
1209 in_the_middle =
FALSE;
1211 if (in_the_middle) {
1223 ok(title_hits[title_index].
ht ==
res,
"Expected %x, got %x, pos %d\n",
1224 title_hits[title_index].
ht,
res,
x);
1233 todo_wine ok(month_count == 1,
"Expected 1 month item, got %d\n", month_count);
1235 ok(month_count <= 1,
"Too many month items: %d\n", month_count);
1238 todo_wine ok(year_count == 1,
"Expected 1 year item, got %d\n", year_count);
1240 ok(year_count <= 1,
"Too many year items: %d\n", year_count);
1242 todo_wine ok(month_count + year_count >= 1,
"Not enough month and year items\n");
1244 ok(
r.right <=
x && title_index + 1 ==
ARRAY_SIZE(title_hits),
"Wrong title layout\n");
1269 mchit.
pt.
x =
r.right / 14;
1270 mchit.
pt.
y = 18 *
r.bottom / 19;
1279 st_test.
wYear = 2005;
1284 memset(&st_new, 0,
sizeof(st_new));
1294 memset(&st_new, 0,
sizeof(st_new));
1319 memset(&st_test, 0,
sizeof(st_test));
1407 SYSTEMTIME st_visible[2], st_daystate[2], st;
1413 memset(&st_visible, 0,
sizeof(st_visible));
1414 memset(&st_daystate, 0,
sizeof(st_daystate));
1440 expect(2000, st_visible[0].wYear);
1441 expect(11, st_visible[0].wMonth);
1442 expect(1, st_visible[0].wDay);
1443 expect(2000, st_visible[1].wYear);
1444 expect(12, st_visible[1].wMonth);
1445 expect(31, st_visible[1].wDay);
1449 expect(2000, st_daystate[0].wYear);
1450 expect(10, st_daystate[0].wMonth);
1451 expect(29, st_daystate[0].wDay);
1452 expect(2001, st_daystate[1].wYear);
1453 expect(1, st_daystate[1].wMonth);
1454 expect(6, st_daystate[1].wDay);
1468 memset(&st, 0,
sizeof(st));
1480 expect(1752, st_visible[0].wYear);
1481 expect(9, st_visible[0].wMonth);
1482 ok(14 == st_visible[0].wDay ||
1483 broken(1 == st_visible[0].wDay),
1484 "Expected 14, got %d\n", st_visible[0].wDay);
1486 expect(1752, st_visible[1].wYear);
1487 expect(9, st_visible[1].wMonth);
1488 expect(19, st_visible[1].wDay);
1563 HFONT hFont1, hFont2;
1570 memset(&logfont, 0,
sizeof(logfont));
1580 ok(
res,
"SendMessageA(MCM_GETMINREQRECT) failed\n");
1585 ok(
res,
"SendMessageA(MCM_GETMINREQRECT) failed\n");
1590 ok(
r1.bottom <
r2.bottom,
"Failed to get larger rect with larger font\n");
1649 win_skip(
"comctl32 <= 4.70 doesn't set some values\n");
1650 old_comctl32 =
TRUE;
1675 range[0].wYear = 2009;
1676 range[0].wMonth = 10;
1690 expect(6, range2[0].wDayOfWeek);
1694 expect(
range[1].wMilliseconds, range2[0].wMilliseconds);
1699 expect(1, range2[1].wDayOfWeek);
1703 expect(
range[0].wMilliseconds, range2[1].wMilliseconds);
1707 range[0].wYear = 2009;
1708 range[0].wMonth = 10;
1771 mchit.
pt.
x = mchit.
pt.
y = 0;
1778 win_skip(
"Only MCHITTESTINFO_V1 supported\n");
1788 mchit.
pt.
x =
r.right / 2;
1789 mchit.
pt.
y =
r.bottom / 2;
1796 mchit.
pt.
x =
r.right / (7*2);
1797 mchit.
pt.
y =
r.bottom / 2;
1832 mchit.
pt.
x =
r.right / (5*4);
1833 mchit.
pt.
y =
r.bottom / 2;
1867 skip(
"MCM_GET/SETCALENDARBORDER not supported\n");
1888 win_skip(
"Message MCM_GETMINREQRECT unsupported. Skipping.\n");
1900 skip(
"Message MCM_SIZERECTTOMIN unsupported. Skipping.\n");
1905 ok(
r.left == 0 &&
r.right > 0,
"got %d, %d\n",
r.left,
r.right);
1911 r2.right = (
r2.right -
r2.left) * 3;
1912 r2.bottom = (
r2.bottom -
r2.top) * 3;
1913 r2.left =
r2.top = 0;
1930 win_skip(
"Message MCM_GETCALENDARCOUNT unsupported. Skipping.\n");
2010 Monthcal_style styles[] = {
2026 mchit.
pt.
x = rc.right / 2;
2027 mchit.
pt.
y = rc.bottom / 2;
2030 while(st.wDay == mchit.st.wDay)
2045#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
2058 iccex.
dwSize =
sizeof(iccex);
2060 pInitCommonControlsEx(&iccex);
char * strstr(char *String1, char *String2)
static void init_msg_sequences(struct msg_sequence **seq, int n)
static void flush_sequences(struct msg_sequence **seq, int n)
BOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *lpInitCtrls)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
VOID WINAPI GetSystemTime(OUT LPSYSTEMTIME lpSystemTime)
INT WINAPI GetLocaleInfoA(LCID lcid, LCTYPE lctype, LPSTR buffer, INT len)
GLint GLint GLint GLint GLint x
GLdouble GLdouble GLdouble r
GLboolean GLboolean GLboolean b
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
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 * u
static const struct newhuff ht[]
_Check_return_ int __cdecl atoi(_In_z_ const char *_Str)
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
static const struct message monthcal_max_sel_day_seq[]
static const struct message monthcal_monthrange_seq[]
static void test_hittest(void)
static HWND create_parent_window(void)
#define SEL_NOTIFY_TEST_ID
#define expect_d(expected, got)
#define NUM_MSG_SEQUENCES
static void test_todaylink(void)
static void test_sel_notify(void)
static const struct message monthcal_unicode_seq[]
static BOOL register_parent_wnd_class(void)
static void test_today(void)
static void test_create(void)
static void test_monthrange(void)
static void test_MCM_GETCALENDARCOUNT(void)
static void test_size(void)
static LRESULT WINAPI parent_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
static const struct message monthcal_todaylink_seq[]
static void test_killfocus(void)
static void test_destroy(void)
static void test_MCM_SIZERECTTOMIN(void)
static void test_color(void)
static const struct message create_monthcal_control_seq[]
#define expect_hex(expected, got)
static const struct message monthcal_curr_date_seq[]
static const struct message monthcal_first_day_seq[]
static const struct message monthcal_hit_test_seq[]
static struct msg_sequence * sequences[NUM_MSG_SEQUENCES]
static const struct message destroy_monthcal_child_msgs_seq[]
static const struct message create_parent_window_seq[]
static const struct message destroy_monthcal_multi_sel_style_seq[]
#define expect(expected, got)
static LRESULT WINAPI monthcal_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
static void test_monthcal(void)
#define MONTHCAL_SEQ_INDEX
static void test_hittest_v6(void)
static const struct message destroy_monthcal_parent_msgs_seq[]
static HWND create_monthcal_control(DWORD style)
static void test_firstDay(void)
static void test_daystate(void)
static const struct message monthcal_today_seq[]
static const struct message monthcal_scroll_seq[]
static void init_functions(void)
static void test_get_set_border(void)
static void test_maxselday(void)
static void test_currdate(void)
static void test_selrange(void)
static const struct message create_monthcal_multi_sel_style_seq[]
static void test_unicode(void)
static void test_scroll(void)
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
#define todo_wine_if(is_todo)
#define LOCALE_USER_DEFAULT
#define MCM_SETMAXSELCOUNT
#define MCM_GETUNICODEFORMAT
#define MCHT_TITLEBTNPREV
#define MCM_GETCALENDARCOUNT
#define MCM_GETMONTHRANGE
#define MCM_GETMONTHDELTA
#define MCHT_CALENDARDATENEXT
#define MCM_GETFIRSTDAYOFWEEK
#define MCM_SETUNICODEFORMAT
#define MCM_SETFIRSTDAYOFWEEK
#define MCHITTESTINFO_V1_SIZE
#define MCM_GETCALENDARBORDER
#define MCHT_CALENDARDATE
#define MCHT_TITLEBTNNEXT
#define MCM_GETMAXSELCOUNT
#define MCM_SETCALENDARBORDER
#define MCHT_CALENDARDATEPREV
#define MCM_SETMONTHDELTA
#define MCSC_TRAILINGTEXT
#define MCM_GETMINREQRECT
#define MCM_SIZERECTTOMIN
CHAR lfFaceName[LF_FACESIZE]
LPMONTHDAYSTATE prgDayState
static BOOL load_v6_module(ULONG_PTR *pcookie, HANDLE *hCtx)
static void unload_v6_module(ULONG_PTR cookie, HANDLE hCtx)
DWORD WINAPI GetLastError(void)
HGDIOBJ WINAPI GetStockObject(_In_ int)
HFONT WINAPI CreateFontIndirectA(_In_ const LOGFONTA *)
#define LOCALE_IFIRSTDAYOFWEEK
#define LOCALE_ICALENDARTYPE
#define WM_QUERYNEWPALETTE
#define SetWindowLongPtrA
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)
LONG WINAPI GetWindowLongA(_In_ HWND, _In_ int)
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_CAPTURECHANGED
#define WM_WINDOWPOSCHANGING
#define CreateWindowA(a, b, c, d, e, f, g, h, i, j, k)
LONG WINAPI SetWindowLongA(_In_ HWND, _In_ int, _In_ LONG)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define GetWindowLongPtrA
HWND WINAPI GetDesktopWindow(void)
#define WM_IME_SETCONTEXT
ATOM WINAPI RegisterClassA(_In_ CONST WNDCLASSA *)
BOOL WINAPI SetRectEmpty(_Out_ LPRECT)
BOOL WINAPI OffsetRect(_Inout_ LPRECT, _In_ int, _In_ int)
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
#define WM_WINDOWPOSCHANGED
BOOL WINAPI DestroyWindow(_In_ HWND)
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
LRESULT WINAPI CallWindowProcA(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HCURSOR WINAPI LoadCursorA(_In_opt_ HINSTANCE, _In_ LPCSTR)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)