Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137/* * PROJECT: ReactOS API tests * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory * PURPOSE: Test for CreateWindowEx * PROGRAMMERS: Thomas Faber <thomas.faber@reactos.org> * Mark Jansen (mark.jansen@reactos.org) */
#include "precomp.h"
static void Test_Params(void){ HWND hWnd; DWORD dwError;
SetLastError(0x1234); hWnd = CreateWindowExW(0, L"BUTTON", NULL, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL); dwError = GetLastError(); ok(hWnd != NULL, "hWnd = %p\n", hWnd); ok(dwError == 0, "error = %lu\n", dwError); DestroyWindow(hWnd);
SetLastError(0x1234); hWnd = CreateWindowExW(0, L"BUTTON", NULL, 0, 0, 0, 0, 0, (HWND)(LONG_PTR)-1, NULL, NULL, NULL); dwError = GetLastError(); ok(hWnd == NULL, "hWnd = %p\n", hWnd); ok(dwError == ERROR_INVALID_WINDOW_HANDLE, "error = %lu\n", dwError);
SetLastError(0x1234); hWnd = CreateWindowExW(0, L"BUTTON", NULL, WS_CHILD, 0, 0, 0, 0, NULL, NULL, NULL, NULL); dwError = GetLastError(); ok(hWnd == NULL, "hWnd = %p\n", hWnd); ok(dwError == ERROR_TLW_WITH_WSCHILD, "error = %lu\n", dwError);
SetLastError(0x1234); hWnd = CreateWindowExW(0, L"BUTTON", NULL, WS_CHILD, 0, 0, 0, 0, (HWND)(LONG_PTR)-1, NULL, NULL, NULL); dwError = GetLastError(); ok(hWnd == NULL, "hWnd = %p\n", hWnd); ok(dwError == ERROR_INVALID_WINDOW_HANDLE, "error = %lu\n", dwError);
SetLastError(0x1234); hWnd = CreateWindowExW(0, L"BUTTON", NULL, WS_POPUP, 0, 0, 0, 0, NULL, NULL, NULL, NULL); dwError = GetLastError(); ok(hWnd != NULL, "hWnd = %p\n", hWnd); ok(dwError == 0, "error = %lu\n", dwError); DestroyWindow(hWnd);
SetLastError(0x1234); hWnd = CreateWindowExW(0, L"BUTTON", NULL, WS_POPUP, 0, 0, 0, 0, (HWND)(LONG_PTR)-1, NULL, NULL, NULL); dwError = GetLastError(); ok(hWnd == NULL, "hWnd = %p\n", hWnd); ok(dwError == ERROR_INVALID_WINDOW_HANDLE, "error = %lu\n", dwError);
SetLastError(0x1234); hWnd = CreateWindowExW(0, L"BUTTON", NULL, WS_CHILD|WS_POPUP, 0, 0, 0, 0, NULL, NULL, NULL, NULL); dwError = GetLastError(); ok(hWnd != NULL, "hWnd = %p\n", hWnd); ok(dwError == 0, "error = %lu\n", dwError); DestroyWindow(hWnd);
SetLastError(0x1234); hWnd = CreateWindowExW(0, L"BUTTON", NULL, WS_CHILD|WS_POPUP, 0, 0, 0, 0, (HWND)(LONG_PTR)-1, NULL, NULL, NULL); dwError = GetLastError(); ok(hWnd == NULL, "hWnd = %p\n", hWnd); ok(dwError == ERROR_INVALID_WINDOW_HANDLE, "error = %lu\n", dwError);}
static HWND g_TestWindow = NULL;static HWND g_ChildWindow = NULL;static HWND g_hwndMDIClient = NULL;
static int get_iwnd(HWND hWnd){ if (!g_TestWindow) g_TestWindow = hWnd; if (!g_ChildWindow && hWnd != g_TestWindow) g_ChildWindow = hWnd;
if (hWnd == g_TestWindow) return 1; else if (hWnd == g_ChildWindow) return 2; return 0;}
static DWORD g_FaultLine = 0;static DWORD g_NcExpectStyle = 0;static DWORD g_NcExpectExStyle = 0;static DWORD g_ExpectStyle = 0;static DWORD g_ExpectExStyle = 0;
static DWORD g_ChildNcExpectStyle = 0;static DWORD g_ChildNcExpectExStyle = 0;static DWORD g_ChildExpectStyle = 0;static DWORD g_ChildExpectExStyle = 0;
#undef ok_hex_#define ok_hex_(expression, result) \ do { \ int _value = (expression); \ ok_(__FILE__, g_FaultLine)(_value == (result), "Wrong value for '%s', expected: " #result " (0x%x), got: 0x%x\n", \ #expression, (int)(result), _value); \ } while (0)
static int g_ChangeStyle = 0;static LRESULT CALLBACK MSGTestProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ LRESULT lRet; int iwnd = get_iwnd(hWnd);
if(message > WM_USER || !iwnd || IsDWmMsg(message) || IseKeyMsg(message)) return DefWindowProc(hWnd, message, wParam, lParam);
switch(message) { case WM_IME_SETCONTEXT: case WM_IME_NOTIFY: case WM_GETICON: case WM_GETTEXT: return DefWindowProc(hWnd, message, wParam, lParam); break; case WM_NCCREATE: { LPCREATESTRUCT create = (LPCREATESTRUCT)lParam; RECORD_MESSAGE(iwnd, message, SENT, 0, 0); ok_hex_(create->style, g_NcExpectStyle); ok_hex_(create->dwExStyle, g_NcExpectExStyle); if (g_ChangeStyle) { DWORD dwStyle = GetWindowLong(hWnd, GWL_EXSTYLE); dwStyle &= ~(WS_EX_CLIENTEDGE); SetWindowLong(hWnd, GWL_EXSTYLE, dwStyle); RECORD_MESSAGE(iwnd, message, MARKER, 0, 0); SetWindowPos(hWnd, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_DRAWFRAME);
RECORD_MESSAGE(iwnd, message, MARKER, 0, 0); ok_hex_(create->style, g_NcExpectStyle); ok_hex_(create->dwExStyle, g_NcExpectExStyle); } } break; case WM_CREATE: { LPCREATESTRUCT create = (LPCREATESTRUCT)lParam; RECORD_MESSAGE(iwnd, message, SENT, 0, 0); ok_hex_(create->style, g_ExpectStyle); ok_hex_(create->dwExStyle, g_ExpectExStyle); } break; case WM_NCCALCSIZE: case WM_STYLECHANGING: case WM_STYLECHANGED: case WM_SIZE: RECORD_MESSAGE(iwnd, message, SENT, wParam, 0); break; case WM_WINDOWPOSCHANGING: case WM_WINDOWPOSCHANGED: ok(wParam == 0,"expected wParam=0\n"); RECORD_MESSAGE(iwnd, message, SENT, ((WINDOWPOS*)lParam)->flags, 0); break; default: RECORD_MESSAGE(iwnd, message, SENT, 0, 0); break; } lRet = DefWindowProc(hWnd, message, wParam, lParam); RECORD_MESSAGE(iwnd, message, SENT_RET, 0, 0); return lRet;}
static MSG_ENTRY create_chain[] ={ { 1, WM_GETMINMAXINFO, SENT }, { 1, WM_GETMINMAXINFO, SENT_RET }, { 1, WM_NCCREATE, SENT }, { 1, WM_NCCREATE, SENT_RET }, { 1, WM_NCCALCSIZE, SENT }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_CREATE, SENT }, { 1, WM_CREATE, SENT_RET }, { 0, 0 }};
static MSG_ENTRY create_chain_modify[] ={ { 1, WM_GETMINMAXINFO, SENT }, { 1, WM_GETMINMAXINFO, SENT_RET }, { 1, WM_NCCREATE, SENT }, { 1, WM_STYLECHANGING, SENT, GWL_EXSTYLE }, { 1, WM_STYLECHANGING, SENT_RET }, { 1, WM_STYLECHANGED, SENT, GWL_EXSTYLE }, { 1, WM_STYLECHANGED, SENT_RET }, { 1, WM_NCCREATE, MARKER }, { 1, WM_WINDOWPOSCHANGING, SENT, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED }, { 1, WM_WINDOWPOSCHANGING, SENT_RET }, { 1, WM_NCCALCSIZE, SENT, TRUE }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_WINDOWPOSCHANGED, SENT, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOREDRAW | SWP_NOACTIVATE | SWP_FRAMECHANGED }, { 1, WM_MOVE, SENT }, { 1, WM_MOVE, SENT_RET }, { 1, WM_SIZE, SENT }, { 1, WM_SIZE, SENT_RET }, { 1, WM_WINDOWPOSCHANGED, SENT_RET }, { 1, WM_NCCREATE, MARKER }, { 1, WM_NCCREATE, SENT_RET }, { 1, WM_NCCALCSIZE, SENT }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_CREATE, SENT }, { 1, WM_CREATE, SENT_RET }, { 0, 0 }};
static MSG_ENTRY create_chain_modify_below8_nonsrv[] ={ { 1, WM_GETMINMAXINFO, SENT }, { 1, WM_GETMINMAXINFO, SENT_RET }, { 1, WM_NCCREATE, SENT }, { 1, WM_STYLECHANGING, SENT, GWL_EXSTYLE }, { 1, WM_STYLECHANGING, SENT_RET }, { 1, WM_STYLECHANGED, SENT, GWL_EXSTYLE }, { 1, WM_STYLECHANGED, SENT_RET }, { 1, WM_NCCREATE, MARKER }, { 1, WM_WINDOWPOSCHANGING, SENT, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED }, { 1, WM_WINDOWPOSCHANGING, SENT_RET }, { 1, WM_NCCALCSIZE, SENT, TRUE }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_WINDOWPOSCHANGED, SENT, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOREDRAW | SWP_NOACTIVATE | SWP_FRAMECHANGED }, { 1, WM_MOVE, SENT }, { 1, WM_MOVE, SENT_RET }, { 1, WM_SIZE, SENT }, { 1, WM_SIZE, SENT_RET }, { 1, WM_WINDOWPOSCHANGED, SENT_RET }, { 1, WM_NCCALCSIZE, SENT, TRUE }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_NCCREATE, MARKER }, { 1, WM_NCCREATE, SENT_RET }, { 1, WM_NCCALCSIZE, SENT }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_CREATE, SENT }, { 1, WM_CREATE, SENT_RET }, { 0, 0 }};
static BOOLIsWindowsServer(){ OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0, 0, VER_NT_WORKSTATION }; DWORDLONG const dwlConditionMask = VerSetConditionMask( 0, VER_PRODUCT_TYPE, VER_EQUAL );
return !VerifyVersionInfoW(&osvi, VER_PRODUCT_TYPE, dwlConditionMask);}
static BOOLIsWindows8OrGreater(){ OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0 }; DWORDLONG const dwlConditionMask = VerSetConditionMask(VerSetConditionMask( VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_MINORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL);
osvi.dwMajorVersion = HIBYTE(_WIN32_WINNT_WIN8); osvi.dwMinorVersion = LOBYTE(_WIN32_WINNT_WIN8);
return VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask) != FALSE;}
static void Test_Messages(void){ HWND hWnd; BOOL Below8NonServer = !IsWindows8OrGreater() && !IsWindowsServer();
RegisterSimpleClass(MSGTestProc, L"Test_Message_Window_XX");
g_ChangeStyle = 0;
g_ExpectStyle = g_NcExpectStyle = 0; g_ExpectExStyle = g_NcExpectExStyle = WS_EX_CLIENTEDGE; g_FaultLine = __LINE__ + 1; hWnd = CreateWindowExW(WS_EX_CLIENTEDGE, L"Test_Message_Window_XX", L"", 0, 10, 20, 200, 210, NULL, NULL, 0, NULL);
ok(hWnd == g_TestWindow, "We are testing with %p instead of %p\n", g_TestWindow, hWnd); COMPARE_CACHE(create_chain); DestroyWindow(hWnd); g_TestWindow = g_ChildWindow = NULL; EMPTY_CACHE();
g_ExpectStyle = g_NcExpectStyle = WS_OVERLAPPEDWINDOW; g_ExpectExStyle = g_NcExpectExStyle = WS_EX_OVERLAPPEDWINDOW; g_FaultLine = __LINE__ + 1; hWnd = CreateWindowExW(WS_EX_CLIENTEDGE, L"Test_Message_Window_XX", L"", WS_OVERLAPPEDWINDOW, 10, 20, 200, 210, NULL, NULL, 0, NULL);
ok(hWnd == g_TestWindow, "We are testing with %p instead of %p\n", g_TestWindow, hWnd); COMPARE_CACHE(create_chain); DestroyWindow(hWnd); g_TestWindow = g_ChildWindow = NULL; EMPTY_CACHE();
g_ChangeStyle = 1;
g_ExpectStyle = g_NcExpectStyle = 0; g_ExpectExStyle = g_NcExpectExStyle = WS_EX_CLIENTEDGE; g_FaultLine = __LINE__ + 1; hWnd = CreateWindowExW(WS_EX_CLIENTEDGE, L"Test_Message_Window_XX", L"", 0, 10, 20, 200, 210, NULL, NULL, 0, NULL);
ok(hWnd == g_TestWindow, "We are testing with %p instead of %p\n", g_TestWindow, hWnd); COMPARE_CACHE(Below8NonServer ? create_chain_modify_below8_nonsrv : create_chain_modify); DestroyWindow(hWnd); g_TestWindow = g_ChildWindow = NULL; EMPTY_CACHE();
g_ExpectStyle = g_NcExpectStyle = WS_OVERLAPPEDWINDOW; g_ExpectExStyle = g_NcExpectExStyle = WS_EX_OVERLAPPEDWINDOW; g_FaultLine = __LINE__ + 1; hWnd = CreateWindowExW(WS_EX_CLIENTEDGE, L"Test_Message_Window_XX", L"", WS_OVERLAPPEDWINDOW, 10, 20, 200, 210, NULL, NULL, 0, NULL);
ok(hWnd == g_TestWindow, "We are testing with %p instead of %p\n", g_TestWindow, hWnd); COMPARE_CACHE(Below8NonServer ? create_chain_modify_below8_nonsrv : create_chain_modify); DestroyWindow(hWnd); g_TestWindow = g_ChildWindow = NULL; EMPTY_CACHE();
UnregisterClassW(L"Test_Message_Window_XX", NULL);}
static LRESULT CALLBACK MSGChildProc2(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ LRESULT lRet; int iwnd = get_iwnd(hWnd);
if(message > WM_USER || !iwnd || IsDWmMsg(message) || IseKeyMsg(message)) return DefWindowProc(hWnd, message, wParam, lParam);
switch(message) { case WM_IME_SETCONTEXT: case WM_IME_NOTIFY: case WM_GETICON: case WM_GETTEXT: return DefWindowProc(hWnd, message, wParam, lParam); break; case WM_NCCREATE: { LPCREATESTRUCT create = (LPCREATESTRUCT)lParam; RECORD_MESSAGE(iwnd, message, SENT, 0, 0); ok_hex_(create->style, g_ChildNcExpectStyle); ok_hex_(create->dwExStyle, g_ChildNcExpectExStyle);
if (g_ChangeStyle) { DWORD dwStyle = GetWindowLong(g_TestWindow, GWL_EXSTYLE); dwStyle &= ~(WS_EX_CLIENTEDGE); SetWindowLong(g_TestWindow, GWL_EXSTYLE, dwStyle); RECORD_MESSAGE(iwnd, message, MARKER, 0, 0); SetWindowPos(g_TestWindow, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_DRAWFRAME);
RECORD_MESSAGE(iwnd, message, MARKER, 0, 0); ok_hex_(create->style, g_ChildNcExpectStyle); ok_hex_(create->dwExStyle, g_ChildNcExpectExStyle); } } break; case WM_CREATE: { LPCREATESTRUCT create = (LPCREATESTRUCT)lParam; RECORD_MESSAGE(iwnd, message, SENT, 0, 0); ok_hex_(create->style, g_ChildExpectStyle); ok_hex_(create->dwExStyle, g_ChildExpectExStyle); } break; case WM_NCCALCSIZE: case WM_STYLECHANGING: case WM_STYLECHANGED: case WM_SIZE: RECORD_MESSAGE(iwnd, message, SENT, wParam, 0); break; case WM_WINDOWPOSCHANGING: case WM_WINDOWPOSCHANGED: ok(wParam == 0,"expected wParam=0\n"); RECORD_MESSAGE(iwnd, message, SENT, ((WINDOWPOS*)lParam)->flags, 0); break; default: RECORD_MESSAGE(iwnd, message, SENT, 0, 0); break; } lRet = DefWindowProc(hWnd, message, wParam, lParam); RECORD_MESSAGE(iwnd, message, SENT_RET, 0, 0); return lRet;}
static LRESULT CALLBACK MSGTestProc2(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ LRESULT lRet; int iwnd = get_iwnd(hWnd);
if(message > WM_USER || !iwnd || IsDWmMsg(message) || IseKeyMsg(message)) return DefWindowProc(hWnd, message, wParam, lParam);
switch(message) { case WM_IME_SETCONTEXT: case WM_IME_NOTIFY: case WM_GETICON: case WM_GETTEXT: return DefWindowProc(hWnd, message, wParam, lParam); break; case WM_NCCREATE: { HWND child; LPCREATESTRUCT create = (LPCREATESTRUCT)lParam; RECORD_MESSAGE(iwnd, message, SENT, 0, 0); ok_hex_(create->style, g_NcExpectStyle); ok_hex_(create->dwExStyle, g_NcExpectExStyle);
child = CreateWindowExW(0, L"Test_Message_Window_Child2", L"", WS_CHILD, 0, 0, 10, 10, hWnd, NULL, 0, NULL); RECORD_MESSAGE(iwnd, message, MARKER, 0, 0); ok_(__FILE__, g_FaultLine)(g_ChildWindow == child, "Testing against the wrong child!\n"); } break; case WM_NCDESTROY: RECORD_MESSAGE(iwnd, message, SENT, 0, 0); DestroyWindow(g_ChildWindow); break; case WM_CREATE: { LPCREATESTRUCT create = (LPCREATESTRUCT)lParam; RECORD_MESSAGE(iwnd, message, SENT, 0, 0); ok_hex_(create->style, g_ExpectStyle); ok_hex_(create->dwExStyle, g_ExpectExStyle); } break; case WM_NCCALCSIZE: case WM_STYLECHANGING: case WM_STYLECHANGED: case WM_SIZE: RECORD_MESSAGE(iwnd, message, SENT, wParam, 0); break; case WM_WINDOWPOSCHANGING: case WM_WINDOWPOSCHANGED: ok(wParam == 0,"expected wParam=0\n"); RECORD_MESSAGE(iwnd, message, SENT, ((WINDOWPOS*)lParam)->flags, 0); break; default: RECORD_MESSAGE(iwnd, message, SENT, 0, 0); break; } lRet = DefWindowProc(hWnd, message, wParam, lParam); RECORD_MESSAGE(iwnd, message, SENT_RET, 0, 0); return lRet;}
MSG_ENTRY child_create_chain[] ={ { 1, WM_GETMINMAXINFO, SENT }, { 1, WM_GETMINMAXINFO, SENT_RET }, { 1, WM_NCCREATE, SENT }, { 2, WM_NCCREATE, SENT }, { 2, WM_NCCREATE, SENT_RET }, { 2, WM_NCCALCSIZE, SENT }, { 2, WM_NCCALCSIZE, SENT_RET }, { 2, WM_CREATE, SENT }, { 2, WM_CREATE, SENT_RET }, { 2, WM_SIZE, SENT }, { 2, WM_SIZE, SENT_RET }, { 2, WM_MOVE, SENT }, { 2, WM_MOVE, SENT_RET }, { 1, WM_PARENTNOTIFY, SENT }, { 1, WM_PARENTNOTIFY, SENT_RET }, { 1, WM_NCCREATE, MARKER }, { 1, WM_NCCREATE, SENT_RET }, { 1, WM_NCCALCSIZE, SENT }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_CREATE, SENT }, { 1, WM_CREATE, SENT_RET }, { 0, 0 }};
MSG_ENTRY child_create_chain_modify[] ={ { 1, WM_GETMINMAXINFO, SENT }, { 1, WM_GETMINMAXINFO, SENT_RET }, { 1, WM_NCCREATE, SENT }, { 2, WM_NCCREATE, SENT }, { 1, WM_STYLECHANGING, SENT, GWL_EXSTYLE }, { 1, WM_STYLECHANGING, SENT_RET }, { 1, WM_STYLECHANGED, SENT, GWL_EXSTYLE }, { 1, WM_STYLECHANGED, SENT_RET }, { 2, WM_NCCREATE, MARKER }, { 1, WM_WINDOWPOSCHANGING, SENT, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED }, { 1, WM_WINDOWPOSCHANGING, SENT_RET }, { 1, WM_NCCALCSIZE, SENT, TRUE }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_WINDOWPOSCHANGED, SENT, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOREDRAW | SWP_NOACTIVATE | SWP_FRAMECHANGED }, { 1, WM_MOVE, SENT }, { 1, WM_MOVE, SENT_RET }, { 1, WM_SIZE, SENT }, { 1, WM_SIZE, SENT_RET }, { 1, WM_WINDOWPOSCHANGED, SENT_RET }, { 2, WM_NCCREATE, MARKER }, { 2, WM_NCCREATE, SENT_RET }, { 2, WM_NCCALCSIZE, SENT }, { 2, WM_NCCALCSIZE, SENT_RET }, { 2, WM_CREATE, SENT }, { 2, WM_CREATE, SENT_RET }, { 2, WM_SIZE, SENT }, { 2, WM_SIZE, SENT_RET }, { 2, WM_MOVE, SENT }, { 2, WM_MOVE, SENT_RET }, { 1, WM_PARENTNOTIFY, SENT }, { 1, WM_PARENTNOTIFY, SENT_RET }, { 1, WM_NCCREATE, MARKER }, { 1, WM_NCCREATE, SENT_RET }, { 1, WM_NCCALCSIZE, SENT }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_CREATE, SENT }, { 1, WM_CREATE, SENT_RET }, { 0, 0 }};
MSG_ENTRY child_create_chain_modify_below8_nonsrv[] ={ { 1, WM_GETMINMAXINFO, SENT }, { 1, WM_GETMINMAXINFO, SENT_RET }, { 1, WM_NCCREATE, SENT }, { 2, WM_NCCREATE, SENT }, { 1, WM_STYLECHANGING, SENT, GWL_EXSTYLE }, { 1, WM_STYLECHANGING, SENT_RET }, { 1, WM_STYLECHANGED, SENT, GWL_EXSTYLE }, { 1, WM_STYLECHANGED, SENT_RET }, { 2, WM_NCCREATE, MARKER }, { 1, WM_WINDOWPOSCHANGING, SENT, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED }, { 1, WM_WINDOWPOSCHANGING, SENT_RET }, { 1, WM_NCCALCSIZE, SENT, TRUE }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_WINDOWPOSCHANGED, SENT, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOREDRAW | SWP_NOACTIVATE | SWP_FRAMECHANGED }, { 1, WM_MOVE, SENT }, { 1, WM_MOVE, SENT_RET }, { 1, WM_SIZE, SENT }, { 1, WM_SIZE, SENT_RET }, { 1, WM_WINDOWPOSCHANGED, SENT_RET }, { 1, WM_NCCALCSIZE, SENT, TRUE }, { 1, WM_NCCALCSIZE, SENT_RET }, { 2, WM_NCCREATE, MARKER }, { 2, WM_NCCREATE, SENT_RET }, { 2, WM_NCCALCSIZE, SENT }, { 2, WM_NCCALCSIZE, SENT_RET }, { 2, WM_CREATE, SENT }, { 2, WM_CREATE, SENT_RET }, { 2, WM_SIZE, SENT }, { 2, WM_SIZE, SENT_RET }, { 2, WM_MOVE, SENT }, { 2, WM_MOVE, SENT_RET }, { 1, WM_PARENTNOTIFY, SENT }, { 1, WM_PARENTNOTIFY, SENT_RET }, { 1, WM_NCCREATE, MARKER }, { 1, WM_NCCREATE, SENT_RET }, { 1, WM_NCCALCSIZE, SENT }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_CREATE, SENT }, { 1, WM_CREATE, SENT_RET }, { 0, 0 }};
static void Test_Messages_Child(void){ HWND hWnd; BOOL Below8NonServer = !IsWindows8OrGreater() && !IsWindowsServer();
RegisterSimpleClass(MSGTestProc2, L"Test_Message_Window_X2"); RegisterSimpleClass(MSGChildProc2, L"Test_Message_Window_Child2");
g_ChangeStyle = 0;
g_ExpectStyle = g_NcExpectStyle = 0; g_ExpectExStyle = g_NcExpectExStyle = WS_EX_CLIENTEDGE; g_ChildExpectStyle = g_ChildNcExpectStyle = WS_CHILD; g_ChildExpectExStyle = g_ChildNcExpectExStyle = 0; g_FaultLine = __LINE__ + 1; hWnd = CreateWindowExW(WS_EX_CLIENTEDGE, L"Test_Message_Window_X2", L"", 0, 10, 20, 200, 210, NULL, NULL, 0, NULL);
ok(hWnd == g_TestWindow, "We are testing with %p instead of %p\n", g_TestWindow, hWnd); COMPARE_CACHE(child_create_chain); DestroyWindow(hWnd); g_TestWindow = g_ChildWindow = NULL; EMPTY_CACHE();
g_ExpectStyle = g_NcExpectStyle = WS_OVERLAPPEDWINDOW; g_ExpectExStyle = g_NcExpectExStyle = WS_EX_OVERLAPPEDWINDOW; g_ChildExpectStyle = g_ChildNcExpectStyle = WS_CHILD; g_ChildExpectExStyle = g_ChildNcExpectExStyle = 0; g_FaultLine = __LINE__ + 1; hWnd = CreateWindowExW(WS_EX_CLIENTEDGE, L"Test_Message_Window_X2", L"", WS_OVERLAPPEDWINDOW, 10, 20, 200, 210, NULL, NULL, 0, NULL);
ok(hWnd == g_TestWindow, "We are testing with %p instead of %p\n", g_TestWindow, hWnd); COMPARE_CACHE(child_create_chain); DestroyWindow(hWnd); g_TestWindow = g_ChildWindow = NULL; EMPTY_CACHE();
g_ChangeStyle = 1;
g_ExpectStyle = g_NcExpectStyle = 0; g_ExpectExStyle = g_NcExpectExStyle = WS_EX_CLIENTEDGE; g_ChildExpectStyle = g_ChildNcExpectStyle = WS_CHILD; g_ChildExpectExStyle = g_ChildNcExpectExStyle = 0; g_FaultLine = __LINE__ + 1; hWnd = CreateWindowExW(WS_EX_CLIENTEDGE, L"Test_Message_Window_X2", L"", 0, 10, 20, 200, 210, NULL, NULL, 0, NULL);
ok(hWnd == g_TestWindow, "We are testing with %p instead of %p\n", g_TestWindow, hWnd); COMPARE_CACHE(Below8NonServer ? child_create_chain_modify_below8_nonsrv : child_create_chain_modify); DestroyWindow(hWnd); g_TestWindow = g_ChildWindow = NULL; EMPTY_CACHE();
g_ExpectStyle = g_NcExpectStyle = WS_OVERLAPPEDWINDOW; g_ExpectExStyle = g_NcExpectExStyle = WS_EX_OVERLAPPEDWINDOW; g_ChildExpectStyle = g_ChildNcExpectStyle = WS_CHILD; g_ChildExpectExStyle = g_ChildNcExpectExStyle = 0; g_FaultLine = __LINE__ + 1; hWnd = CreateWindowExW(WS_EX_CLIENTEDGE, L"Test_Message_Window_X2", L"", WS_OVERLAPPEDWINDOW, 10, 20, 200, 210, NULL, NULL, 0, NULL);
ok(hWnd == g_TestWindow, "We are testing with %p instead of %p\n", g_TestWindow, hWnd); COMPARE_CACHE(Below8NonServer ? child_create_chain_modify_below8_nonsrv : child_create_chain_modify); DestroyWindow(hWnd); g_TestWindow = g_ChildWindow = NULL; EMPTY_CACHE();
UnregisterClassW(L"Test_Message_Window_X2", NULL); UnregisterClassW(L"Test_Message_Window_Child2", NULL);}
static LRESULT CALLBACK MSGTestProcMDI(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ LRESULT lRet; int iwnd = get_iwnd(hWnd);
if(message > WM_USER || !iwnd || IsDWmMsg(message) || IseKeyMsg(message)) return DefWindowProc(hWnd, message, wParam, lParam);
switch(message) { case WM_IME_SETCONTEXT: case WM_IME_NOTIFY: case WM_GETICON: case WM_GETTEXT: return DefWindowProc(hWnd, message, wParam, lParam); break; case WM_NCCREATE: { LPCREATESTRUCT create = (LPCREATESTRUCT)lParam; RECORD_MESSAGE(iwnd, message, SENT, 0, 0); ok_hex_(create->style, g_NcExpectStyle); ok_hex_(create->dwExStyle, g_NcExpectExStyle); } break; case WM_CREATE: { CLIENTCREATESTRUCT ccs = { 0 }; LPCREATESTRUCT create = (LPCREATESTRUCT)lParam; RECORD_MESSAGE(iwnd, message, SENT, 0, 0); ok_hex_(create->style, g_ExpectStyle); ok_hex_(create->dwExStyle, g_ExpectExStyle);
g_hwndMDIClient = CreateWindow("MDICLIENT", (LPCTSTR) NULL, WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL, 0, 0, 0, 0, hWnd, (HMENU) 0xCAC, NULL, (LPSTR) &ccs);
ShowWindow(g_hwndMDIClient, SW_SHOW);
} break; case WM_NCCALCSIZE: case WM_STYLECHANGING: case WM_STYLECHANGED: case WM_SIZE: RECORD_MESSAGE(iwnd, message, SENT, wParam, 0); break; case WM_WINDOWPOSCHANGING: case WM_WINDOWPOSCHANGED: ok(wParam == 0,"expected wParam=0\n"); RECORD_MESSAGE(iwnd, message, SENT, ((WINDOWPOS*)lParam)->flags, 0); break; default: RECORD_MESSAGE(iwnd, message, SENT, 0, 0); break; } lRet = DefWindowProc(hWnd, message, wParam, lParam); RECORD_MESSAGE(iwnd, message, SENT_RET, 0, 0); return lRet;}
MSG_ENTRY create_chain_MDI[] ={ { 1, WM_GETMINMAXINFO, SENT }, { 1, WM_GETMINMAXINFO, SENT_RET }, { 1, WM_NCCREATE, SENT }, { 1, WM_NCCREATE, SENT_RET }, { 1, WM_NCCALCSIZE, SENT }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_CREATE, SENT }, { 1, WM_PARENTNOTIFY, SENT }, { 1, WM_PARENTNOTIFY, SENT_RET }, { 1, WM_CREATE, SENT_RET }, { 0, 0 }};
static void Test_Messages_MDI(void){ HWND hWnd;
RegisterSimpleClass(MSGTestProcMDI, L"Test_Message_Window_MDI_XX");
g_ExpectStyle = g_NcExpectStyle = 0; g_ExpectExStyle = g_NcExpectExStyle = WS_EX_CLIENTEDGE; g_FaultLine = __LINE__ + 1; hWnd = CreateWindowExW(WS_EX_CLIENTEDGE, L"Test_Message_Window_MDI_XX", L"", 0, 10, 20, 200, 210, NULL, NULL, 0, NULL);
ok(hWnd == g_TestWindow, "We are testing with %p instead of %p\n", g_TestWindow, hWnd); COMPARE_CACHE(create_chain_MDI); DestroyWindow(hWnd); g_TestWindow = g_hwndMDIClient = g_ChildWindow = NULL; EMPTY_CACHE();
g_ExpectStyle = g_NcExpectStyle = WS_OVERLAPPEDWINDOW; g_ExpectExStyle = g_NcExpectExStyle = WS_EX_OVERLAPPEDWINDOW; g_FaultLine = __LINE__ + 1; hWnd = CreateWindowExW(WS_EX_CLIENTEDGE, L"Test_Message_Window_MDI_XX", L"", WS_OVERLAPPEDWINDOW, 10, 20, 200, 210, NULL, NULL, 0, NULL);
ok(hWnd == g_TestWindow, "We are testing with %p instead of %p\n", g_TestWindow, hWnd); COMPARE_CACHE(create_chain_MDI); DestroyWindow(hWnd); g_TestWindow = g_hwndMDIClient = g_ChildWindow = NULL; EMPTY_CACHE();
UnregisterClassW(L"Test_Message_Window_MDI_XX", NULL);}
static LRESULT CALLBACK MSGTestProcMDI2(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ LRESULT lRet; int iwnd = get_iwnd(hWnd);
if(message > WM_USER || !iwnd || IsDWmMsg(message) || IseKeyMsg(message)) return DefWindowProc(hWnd, message, wParam, lParam);
switch(message) { case WM_IME_SETCONTEXT: case WM_IME_NOTIFY: case WM_GETICON: case WM_GETTEXT: return DefWindowProc(hWnd, message, wParam, lParam); break; case WM_NCCREATE: { LPCREATESTRUCT create = (LPCREATESTRUCT)lParam; RECORD_MESSAGE(iwnd, message, SENT, 0, 0); ok_hex_(create->style, g_NcExpectStyle); ok_hex_(create->dwExStyle, g_NcExpectExStyle); } break; case WM_CREATE: { MDICREATESTRUCT mcs = {0}; CLIENTCREATESTRUCT ccs = { 0 }; LPCREATESTRUCT create = (LPCREATESTRUCT)lParam; HWND hchild; RECORD_MESSAGE(iwnd, message, SENT, 0, 0); ok_hex_(create->style, g_ExpectStyle); ok_hex_(create->dwExStyle, g_ExpectExStyle);
g_hwndMDIClient = CreateWindow("MDICLIENT", (LPCTSTR) NULL, WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL, 0, 0, 0, 0, hWnd, (HMENU) 0xCAC, NULL, (LPSTR) &ccs);
ShowWindow(g_hwndMDIClient, SW_SHOW);
mcs.szClass = "Test_Message_MDI_Window_Child2"; mcs.x = mcs.cx = CW_USEDEFAULT; mcs.y = mcs.cy = CW_USEDEFAULT; mcs.style = WS_MAXIMIZE;
hchild = (HWND) SendMessage (g_hwndMDIClient, WM_MDICREATE, 0, (LPARAM)&mcs); ok(hchild == g_ChildWindow, "We are testing with %p instead of %p\n", g_ChildWindow, hchild);
} break; case WM_NCCALCSIZE: case WM_STYLECHANGING: case WM_STYLECHANGED: case WM_SIZE: RECORD_MESSAGE(iwnd, message, SENT, wParam, 0); break; case WM_WINDOWPOSCHANGING: case WM_WINDOWPOSCHANGED: ok(wParam == 0,"expected wParam=0\n"); RECORD_MESSAGE(iwnd, message, SENT, ((WINDOWPOS*)lParam)->flags, 0); break; default: RECORD_MESSAGE(iwnd, message, SENT, 0, 0); break; } lRet = DefWindowProc(hWnd, message, wParam, lParam); RECORD_MESSAGE(iwnd, message, SENT_RET, 0, 0); return lRet;}
static LRESULT CALLBACK MSGChildProcMDI2(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ LRESULT lRet; int iwnd = get_iwnd(hWnd);
if(message > WM_USER || !iwnd || IsDWmMsg(message) || IseKeyMsg(message)) return DefMDIChildProc(hWnd, message, wParam, lParam);
switch(message) { case WM_IME_SETCONTEXT: case WM_IME_NOTIFY: case WM_GETICON: case WM_GETTEXT: return DefMDIChildProc(hWnd, message, wParam, lParam); break; case WM_NCCREATE: { LPCREATESTRUCT create = (LPCREATESTRUCT)lParam; RECORD_MESSAGE(iwnd, message, SENT, 0, 0); ok_hex_(create->style, g_ChildNcExpectStyle); ok_hex_(create->dwExStyle, g_ChildNcExpectExStyle); } break; case WM_CREATE: { LPCREATESTRUCT create = (LPCREATESTRUCT)lParam; RECORD_MESSAGE(iwnd, message, SENT, 0, 0); ok_hex_(create->style, g_ChildExpectStyle); ok_hex_(create->dwExStyle, g_ChildExpectExStyle); } break; case WM_NCCALCSIZE: case WM_STYLECHANGING: case WM_STYLECHANGED: case WM_SIZE: RECORD_MESSAGE(iwnd, message, SENT, wParam, 0); break; case WM_WINDOWPOSCHANGING: case WM_WINDOWPOSCHANGED: ok(wParam == 0,"expected wParam=0\n"); RECORD_MESSAGE(iwnd, message, SENT, ((WINDOWPOS*)lParam)->flags, 0); break; default: RECORD_MESSAGE(iwnd, message, SENT, 0, 0); break; } lRet = DefMDIChildProc(hWnd, message, wParam, lParam); RECORD_MESSAGE(iwnd, message, SENT_RET, 0, 0); return lRet;}
static MSG_ENTRY child_create_chain_MDI[] ={ { 1, WM_GETMINMAXINFO, SENT }, { 1, WM_GETMINMAXINFO, SENT_RET }, { 1, WM_NCCREATE, SENT }, { 1, WM_NCCREATE, SENT_RET }, { 1, WM_NCCALCSIZE, SENT }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_CREATE, SENT }, { 1, WM_PARENTNOTIFY, SENT }, { 1, WM_PARENTNOTIFY, SENT_RET }, { 2, WM_GETMINMAXINFO, SENT }, { 2, WM_GETMINMAXINFO, SENT_RET }, { 2, WM_NCCREATE, SENT }, { 2, WM_NCCREATE, SENT_RET }, { 2, WM_NCCALCSIZE, SENT }, { 2, WM_NCCALCSIZE, SENT_RET }, { 2, WM_CREATE, SENT }, { 2, WM_CREATE, SENT_RET }, { 2, WM_SIZE, SENT }, { 2, WM_SIZE, SENT_RET }, { 2, WM_MOVE, SENT }, { 2, WM_MOVE, SENT_RET }, { 2, WM_GETMINMAXINFO, SENT }, { 2, WM_GETMINMAXINFO, SENT_RET }, { 2, WM_WINDOWPOSCHANGING, SENT, SWP_FRAMECHANGED | SWP_NOACTIVATE | 0x8000 }, { 2, WM_GETMINMAXINFO, SENT }, { 2, WM_GETMINMAXINFO, SENT_RET }, { 2, WM_WINDOWPOSCHANGING, SENT_RET }, { 2, WM_NCCALCSIZE, SENT, 1 }, { 2, WM_NCCALCSIZE, SENT_RET }, { 2, WM_WINDOWPOSCHANGED, SENT, SWP_FRAMECHANGED | SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOREDRAW | 0x8800 }, { 2, WM_MOVE, SENT }, { 2, WM_MOVE, SENT_RET }, { 2, WM_SIZE, SENT, SIZE_MAXIMIZED }, { 1, WM_WINDOWPOSCHANGING, SENT, SWP_NOSIZE | SWP_NOZORDER | SWP_NOMOVE | SWP_FRAMECHANGED | SWP_NOACTIVATE }, { 1, WM_WINDOWPOSCHANGING, SENT_RET }, { 1, WM_NCCALCSIZE, SENT, TRUE }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_WINDOWPOSCHANGED, SENT, SWP_NOSIZE | SWP_NOZORDER | SWP_NOMOVE | SWP_NOREDRAW | SWP_FRAMECHANGED | SWP_NOACTIVATE | 0x1800 }, { 1, WM_WINDOWPOSCHANGED, SENT_RET }, { 2, WM_SIZE, SENT_RET }, { 2, WM_WINDOWPOSCHANGED, SENT_RET }, { 2, WM_NCCALCSIZE, SENT, TRUE }, { 2, WM_NCCALCSIZE, SENT_RET }, { 2, WM_SHOWWINDOW, SENT }, { 2, WM_SHOWWINDOW, SENT_RET }, { 2, WM_WINDOWPOSCHANGING, SENT, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE }, { 2, WM_WINDOWPOSCHANGING, SENT_RET }, { 2, WM_CHILDACTIVATE, SENT }, { 2, WM_WINDOWPOSCHANGING, SENT, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE }, { 2, WM_WINDOWPOSCHANGING, SENT_RET }, { 2, WM_MDIACTIVATE, SENT }, { 2, WM_MDIACTIVATE, SENT_RET }, { 2, WM_CHILDACTIVATE, SENT_RET }, { 1, WM_WINDOWPOSCHANGING, SENT, SWP_NOSIZE | SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE | SWP_FRAMECHANGED }, { 1, WM_WINDOWPOSCHANGING, SENT_RET }, { 1, WM_NCCALCSIZE, SENT, TRUE }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_WINDOWPOSCHANGED, SENT, SWP_NOSIZE | SWP_NOZORDER | SWP_NOMOVE | SWP_NOREDRAW | SWP_FRAMECHANGED | SWP_NOACTIVATE | 0x1800 }, { 1, WM_WINDOWPOSCHANGED, SENT_RET }, { 1, WM_CREATE, SENT_RET }, { 0, 0 },};
static MSG_ENTRY child_create_chain_MDI_below8[] ={ { 1, WM_GETMINMAXINFO, SENT }, { 1, WM_GETMINMAXINFO, SENT_RET }, { 1, WM_NCCREATE, SENT }, { 1, WM_NCCREATE, SENT_RET }, { 1, WM_NCCALCSIZE, SENT }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_CREATE, SENT }, { 1, WM_PARENTNOTIFY, SENT }, { 1, WM_PARENTNOTIFY, SENT_RET }, { 2, WM_GETMINMAXINFO, SENT }, { 2, WM_GETMINMAXINFO, SENT_RET }, { 2, WM_NCCREATE, SENT }, { 2, WM_NCCREATE, SENT_RET }, { 2, WM_NCCALCSIZE, SENT }, { 2, WM_NCCALCSIZE, SENT_RET }, { 2, WM_CREATE, SENT }, { 2, WM_CREATE, SENT_RET }, { 2, WM_SIZE, SENT }, { 2, WM_SIZE, SENT_RET }, { 2, WM_MOVE, SENT }, { 2, WM_MOVE, SENT_RET }, { 2, WM_GETMINMAXINFO, SENT }, { 2, WM_GETMINMAXINFO, SENT_RET }, { 2, WM_WINDOWPOSCHANGING, SENT, SWP_FRAMECHANGED | SWP_NOACTIVATE | 0x8000 }, { 2, WM_GETMINMAXINFO, SENT }, { 2, WM_GETMINMAXINFO, SENT_RET }, { 2, WM_WINDOWPOSCHANGING, SENT_RET }, { 2, WM_NCCALCSIZE, SENT, 1 }, { 2, WM_NCCALCSIZE, SENT_RET }, { 2, WM_WINDOWPOSCHANGED, SENT, SWP_FRAMECHANGED | SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOREDRAW | 0x8800 }, { 2, WM_MOVE, SENT }, { 2, WM_MOVE, SENT_RET }, { 2, WM_SIZE, SENT, SIZE_MAXIMIZED }, { 1, WM_WINDOWPOSCHANGING, SENT, SWP_NOSIZE | SWP_NOZORDER | SWP_NOMOVE | SWP_FRAMECHANGED | SWP_NOACTIVATE }, { 1, WM_WINDOWPOSCHANGING, SENT_RET }, { 1, WM_NCCALCSIZE, SENT, TRUE }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_WINDOWPOSCHANGED, SENT, SWP_NOSIZE | SWP_NOZORDER | SWP_NOMOVE | SWP_NOREDRAW | SWP_FRAMECHANGED | SWP_NOACTIVATE | 0x1800 }, { 1, WM_WINDOWPOSCHANGED, SENT_RET }, { 2, WM_SIZE, SENT_RET }, { 2, WM_WINDOWPOSCHANGED, SENT_RET }, //{ 2, WM_NCCALCSIZE, SENT, TRUE }, //{ 2, WM_NCCALCSIZE, SENT_RET }, { 2, WM_SHOWWINDOW, SENT }, { 2, WM_SHOWWINDOW, SENT_RET }, { 2, WM_WINDOWPOSCHANGING, SENT, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE }, { 2, WM_WINDOWPOSCHANGING, SENT_RET }, { 2, WM_CHILDACTIVATE, SENT }, { 2, WM_WINDOWPOSCHANGING, SENT, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE }, { 2, WM_WINDOWPOSCHANGING, SENT_RET }, { 2, WM_MDIACTIVATE, SENT }, { 2, WM_MDIACTIVATE, SENT_RET }, { 2, WM_CHILDACTIVATE, SENT_RET }, { 1, WM_WINDOWPOSCHANGING, SENT, SWP_NOSIZE | SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE | SWP_FRAMECHANGED }, { 1, WM_WINDOWPOSCHANGING, SENT_RET }, { 1, WM_NCCALCSIZE, SENT, TRUE }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_WINDOWPOSCHANGED, SENT, SWP_NOSIZE | SWP_NOZORDER | SWP_NOMOVE | SWP_NOREDRAW | SWP_FRAMECHANGED | SWP_NOACTIVATE | 0x1800 }, { 1, WM_WINDOWPOSCHANGED, SENT_RET }, { 1, WM_CREATE, SENT_RET }, { 0, 0 },};
static MSG_ENTRY child_create_chain_MDI_below8_nonsrv[] ={ { 1, WM_GETMINMAXINFO, SENT }, { 1, WM_GETMINMAXINFO, SENT_RET }, { 1, WM_NCCREATE, SENT }, { 1, WM_NCCREATE, SENT_RET }, { 1, WM_NCCALCSIZE, SENT }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_CREATE, SENT }, { 1, WM_PARENTNOTIFY, SENT }, { 1, WM_PARENTNOTIFY, SENT_RET }, { 2, WM_GETMINMAXINFO, SENT }, { 2, WM_GETMINMAXINFO, SENT_RET }, { 2, WM_NCCREATE, SENT }, { 2, WM_NCCREATE, SENT_RET }, { 2, WM_NCCALCSIZE, SENT }, { 2, WM_NCCALCSIZE, SENT_RET }, { 2, WM_CREATE, SENT }, { 2, WM_CREATE, SENT_RET }, { 2, WM_SIZE, SENT }, { 2, WM_SIZE, SENT_RET }, { 2, WM_MOVE, SENT }, { 2, WM_MOVE, SENT_RET }, { 2, WM_GETMINMAXINFO, SENT }, { 2, WM_GETMINMAXINFO, SENT_RET }, { 2, WM_WINDOWPOSCHANGING, SENT, SWP_FRAMECHANGED | SWP_NOACTIVATE | 0x8000 }, { 2, WM_GETMINMAXINFO, SENT }, { 2, WM_GETMINMAXINFO, SENT_RET }, { 2, WM_WINDOWPOSCHANGING, SENT_RET }, { 2, WM_NCCALCSIZE, SENT, 1 }, { 2, WM_NCCALCSIZE, SENT_RET }, { 2, WM_WINDOWPOSCHANGED, SENT, SWP_FRAMECHANGED | SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOREDRAW | 0x8800 }, { 2, WM_MOVE, SENT }, { 2, WM_MOVE, SENT_RET }, { 2, WM_SIZE, SENT, SIZE_MAXIMIZED }, { 1, WM_WINDOWPOSCHANGING, SENT, SWP_NOSIZE | SWP_NOZORDER | SWP_NOMOVE | SWP_FRAMECHANGED | SWP_NOACTIVATE }, { 1, WM_WINDOWPOSCHANGING, SENT_RET }, { 1, WM_NCCALCSIZE, SENT, TRUE }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_WINDOWPOSCHANGED, SENT, SWP_NOSIZE | SWP_NOZORDER | SWP_NOMOVE | SWP_NOREDRAW | SWP_FRAMECHANGED | SWP_NOACTIVATE | 0x1800 }, { 1, WM_WINDOWPOSCHANGED, SENT_RET }, // + { 1, WM_NCCALCSIZE, SENT, TRUE }, { 1, WM_NCCALCSIZE, SENT_RET }, // - { 2, WM_SIZE, SENT_RET }, { 2, WM_WINDOWPOSCHANGED, SENT_RET }, { 2, WM_NCCALCSIZE, SENT, TRUE }, { 2, WM_NCCALCSIZE, SENT_RET }, { 2, WM_SHOWWINDOW, SENT }, { 2, WM_SHOWWINDOW, SENT_RET }, { 2, WM_WINDOWPOSCHANGING, SENT, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE }, { 2, WM_WINDOWPOSCHANGING, SENT_RET }, { 2, WM_CHILDACTIVATE, SENT }, { 2, WM_WINDOWPOSCHANGING, SENT, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE }, { 2, WM_WINDOWPOSCHANGING, SENT_RET }, { 2, WM_MDIACTIVATE, SENT }, { 2, WM_MDIACTIVATE, SENT_RET }, { 2, WM_CHILDACTIVATE, SENT_RET }, { 1, WM_WINDOWPOSCHANGING, SENT, SWP_NOSIZE | SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE | SWP_FRAMECHANGED }, { 1, WM_WINDOWPOSCHANGING, SENT_RET }, { 1, WM_NCCALCSIZE, SENT, TRUE }, { 1, WM_NCCALCSIZE, SENT_RET }, { 1, WM_WINDOWPOSCHANGED, SENT, SWP_NOSIZE | SWP_NOZORDER | SWP_NOMOVE | SWP_NOREDRAW | SWP_FRAMECHANGED | SWP_NOACTIVATE | 0x1800 }, { 1, WM_WINDOWPOSCHANGED, SENT_RET }, { 1, WM_CREATE, SENT_RET }, { 0, 0 },};
static void Test_Messages_MDI_Child(void){ HWND hWnd;
BOOL Below8 = !IsWindows8OrGreater(); BOOL Below8NonServer = !IsWindows8OrGreater() && !IsWindowsServer();
RegisterSimpleClass(MSGTestProcMDI2, L"Test_Message_MDI_Window_X2"); RegisterSimpleClass(MSGChildProcMDI2, L"Test_Message_MDI_Window_Child2");
g_ExpectStyle = g_NcExpectStyle = 0; g_ExpectExStyle = g_NcExpectExStyle = WS_EX_CLIENTEDGE; g_ChildExpectStyle = g_ChildNcExpectStyle = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_MAXIMIZE | WS_OVERLAPPEDWINDOW; g_ChildExpectExStyle = g_ChildNcExpectExStyle = WS_EX_WINDOWEDGE | WS_EX_MDICHILD; g_FaultLine = __LINE__ + 1; hWnd = CreateWindowExW(WS_EX_CLIENTEDGE, L"Test_Message_MDI_Window_X2", L"", 0, 10, 20, 200, 210, NULL, NULL, 0, NULL);
ok(hWnd == g_TestWindow, "We are testing with %p instead of %p\n", g_TestWindow, hWnd); COMPARE_CACHE(Below8NonServer ? (child_create_chain_MDI_below8_nonsrv) : (Below8 ? child_create_chain_MDI_below8 : child_create_chain_MDI)); DestroyWindow(hWnd); g_TestWindow = g_ChildWindow = NULL; EMPTY_CACHE();
g_ExpectStyle = g_NcExpectStyle = WS_OVERLAPPEDWINDOW; g_ExpectExStyle = g_NcExpectExStyle = WS_EX_OVERLAPPEDWINDOW; g_ChildExpectStyle = g_ChildNcExpectStyle = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_MAXIMIZE | WS_OVERLAPPEDWINDOW; g_ChildExpectExStyle = g_ChildNcExpectExStyle = WS_EX_WINDOWEDGE | WS_EX_MDICHILD; g_FaultLine = __LINE__ + 1; hWnd = CreateWindowExW(WS_EX_CLIENTEDGE, L"Test_Message_MDI_Window_X2", L"", WS_OVERLAPPEDWINDOW, 10, 20, 200, 210, NULL, NULL, 0, NULL);
ok(hWnd == g_TestWindow, "We are testing with %p instead of %p\n", g_TestWindow, hWnd); COMPARE_CACHE(Below8NonServer ? (child_create_chain_MDI_below8_nonsrv) : (Below8 ? child_create_chain_MDI_below8 : child_create_chain_MDI)); DestroyWindow(hWnd); g_TestWindow = g_ChildWindow = NULL; EMPTY_CACHE();
UnregisterClassW(L"Test_Message_Window_X2", NULL); UnregisterClassW(L"Test_Message_MDI_Window_Child2", NULL);}
START_TEST(CreateWindowEx){ Test_Params(); Test_Messages(); Test_Messages_Child(); Test_Messages_MDI(); Test_Messages_MDI_Child();}