LRESULT WINAPI DialogWndProc_common( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode) { if (unicode) return DefDlgProcW( hwnd, uMsg, wParam, lParam); return DefDlgProcA( hwnd, uMsg, wParam, lParam); }
static void test_DialogBoxParamA(void) { INT_PTR ret; HWND hwnd_invalid = (HWND)0x4444; SetLastError(0xdeadbeef); ret = DialogBoxParamA(GetModuleHandle(NULL), "IDD_DIALOG" , hwnd_invalid, 0 , 0); ok(0 == ret || broken(ret == -1), "DialogBoxParamA returned %ld, expected 0\n", ret); ok(ERROR_INVALID_WINDOW_HANDLE == GetLastError() || broken(GetLastError() == 0xdeadbeef), "got %d, expected ERROR_INVALID_WINDOW_HANDLE\n",GetLastError()); /* Test a dialog which destroys itself on WM_INITDIALOG. */ SetLastError(0xdeadbeef); ret = DialogBoxParamA(GetModuleHandle(NULL), "IDD_DIALOG", 0, DestroyDlgWinProc, 0); ok(-1 == ret, "DialogBoxParamA returned %ld, expected -1\n", ret); ok(ERROR_INVALID_WINDOW_HANDLE == GetLastError() || GetLastError() == ERROR_SUCCESS || broken(GetLastError() == 0xdeadbeef), "got %d, expected ERROR_INVALID_WINDOW_HANDLE\n",GetLastError()); /* Test a dialog which destroys itself on WM_CLOSE. */ ret = DialogBoxParamA(GetModuleHandle(NULL), "IDD_DIALOG", 0, DestroyOnCloseDlgWinProc, 0); ok(0 == ret, "DialogBoxParamA returned %ld, expected 0\n", ret); SetLastError(0xdeadbeef); ret = DialogBoxParamA(GetModuleHandle(NULL), "RESOURCE_INVALID" , 0, 0, 0); ok(-1 == ret, "DialogBoxParamA returned %ld, expected -1\n", ret); ok(ERROR_RESOURCE_NAME_NOT_FOUND == GetLastError() || broken(GetLastError() == 0xdeadbeef), "got %d, expected ERROR_RESOURCE_NAME_NOT_FOUND\n",GetLastError()); SetLastError(0xdeadbeef); ret = DefDlgProcA(0, WM_ERASEBKGND, 0, 0); ok(ret == 0, "DefDlgProcA returned %ld, expected 0\n", ret); ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE || broken(GetLastError() == 0xdeadbeef), "got %d, expected ERROR_INVALID_WINDOW_HANDLE\n", GetLastError()); ret = DialogBoxParamA(GetModuleHandle(NULL), "TEST_EMPTY_DIALOG", 0, TestInitDialogHandleProc, 0); ok(ret == IDOK, "Expected IDOK\n"); ret = DialogBoxParamA(GetModuleHandle(NULL), "TEST_EMPTY_DIALOG", 0, TestDefButtonDlgProc, 0); ok(ret == IDOK, "Expected IDOK\n"); DialogBoxParamA(GetModuleHandle(NULL), "TEST_EMPTY_DIALOG", 0, TestReturnKeyDlgProc, 0); }
static LRESULT CALLBACK testDlgWinProc (HWND hwnd, UINT uiMsg, WPARAM wParam, LPARAM lParam) { switch (uiMsg) { /* Add blank case statements for these to ensure we don't use them * by mistake. */ case DM_GETDEFID: break; case DM_SETDEFID: break; case WM_CREATE: return (OnTestDlgCreate (hwnd, (LPCREATESTRUCTA) lParam) ? 0 : (LRESULT) -1); } return DefDlgProcA (hwnd, uiMsg, wParam, lParam); }
static void test_WM_NEXTDLGCTL(void) { DWORD dwVal; g_hwndTestDlg = CreateWindowEx( WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE | WS_EX_CONTROLPARENT | WS_EX_APPWINDOW, "WM_NEXTDLGCTLWndClass", "WM_NEXTDLGCTL Message test window", WS_POPUPWINDOW | WS_CLIPSIBLINGS | WS_DLGFRAME | WS_OVERLAPPED | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | DS_3DLOOK | DS_SETFONT | DS_MODALFRAME, 0, 0, 235, 135, NULL, NULL, g_hinst, 0); assert (g_hwndTestDlg); assert (g_hwndTestDlgBut1); assert (g_hwndTestDlgBut2); assert (g_hwndTestDlgEdit); /* * Test message DM_SETDEFID */ DefDlgProcA( g_hwndTestDlg, DM_SETDEFID, IDCANCEL, 0 ); DefDlgProcA( g_hwndTestDlgBut1, BM_SETSTYLE, BS_DEFPUSHBUTTON, FALSE ); dwVal = DefDlgProcA(g_hwndTestDlg, DM_GETDEFID, 0, 0); ok ( IDCANCEL == (LOWORD(dwVal)), "Did not set default ID\n" ); /* * Check whether message WM_NEXTDLGCTL is changing the focus to next control and if * the destination control is a button, style of the button should be changed to * BS_DEFPUSHBUTTON with out making it default. */ /* * Keep the focus on Edit control. */ if ( SetFocus( g_hwndTestDlgEdit ) ) { ok ((GetFocus() == g_hwndTestDlgEdit), "Focus didn't set on Edit control\n"); /* * Test message WM_NEXTDLGCTL */ DefDlgProcA( g_hwndTestDlg, WM_NEXTDLGCTL, 0, 0 ); ok ((GetFocus() == g_hwndTestDlgBut1), "Focus didn't move to first button\n"); /* * Check whether the default button ID got changed by sending message "WM_NEXTDLGCTL" */ dwVal = DefDlgProcA(g_hwndTestDlg, DM_GETDEFID, 0, 0); ok ( IDCANCEL == (LOWORD(dwVal)), "WM_NEXTDLGCTL changed default button\n"); /* * Check whether the style of the button which got the focus, changed to BS_DEFPUSHBUTTON and * the style of default button changed to BS_PUSHBUTTON. */ if ( IDCANCEL == (LOWORD(dwVal)) ) { ok ( ((GetWindowLong( g_hwndTestDlgBut1, GWL_STYLE)) & BS_DEFPUSHBUTTON), "Button1 style not set to BS_DEFPUSHBUTTON\n" ); ok ( !((GetWindowLong( g_hwndTestDlgBut2, GWL_STYLE)) & BS_DEFPUSHBUTTON), "Button2's style not chaged to BS_PUSHBUTTON\n" ); } /* * Move focus to Button2 using "WM_NEXTDLGCTL" */ DefDlgProcA( g_hwndTestDlg, WM_NEXTDLGCTL, 0, 0 ); ok ((GetFocus() == g_hwndTestDlgBut2), "Focus didn't move to second button\n"); /* * Check whether the default button ID got changed by sending message "WM_NEXTDLGCTL" */ dwVal = DefDlgProcA(g_hwndTestDlg, DM_GETDEFID, 0, 0); ok ( IDCANCEL == (LOWORD(dwVal)), "WM_NEXTDLGCTL changed default button\n"); /* * Check whether the style of the button which got the focus, changed to BS_DEFPUSHBUTTON and * the style of button which lost the focus changed to BS_PUSHBUTTON. */ if ( IDCANCEL == (LOWORD(dwVal)) ) { ok ( ((GetWindowLong( g_hwndTestDlgBut2, GWL_STYLE)) & BS_DEFPUSHBUTTON), "Button2 style not set to BS_DEFPUSHBUTTON\n" ); ok ( !((GetWindowLong( g_hwndTestDlgBut1, GWL_STYLE)) & BS_DEFPUSHBUTTON), "Button1's style not chaged to BS_PUSHBUTTON\n" ); } /* * Move focus to Edit control using "WM_NEXTDLGCTL" */ DefDlgProcA( g_hwndTestDlg, WM_NEXTDLGCTL, 0, 0 ); ok ((GetFocus() == g_hwndTestDlgEdit), "Focus didn't move to Edit control\n"); /* * Check whether the default button ID got changed by sending message "WM_NEXTDLGCTL" */ dwVal = DefDlgProcA(g_hwndTestDlg, DM_GETDEFID, 0, 0); ok ( IDCANCEL == (LOWORD(dwVal)), "WM_NEXTDLGCTL changed default button\n"); } DestroyWindow(g_hwndTestDlg); }
void Test_RealGetWindowClass() { int testNo; UINT Result; CHAR Buffer[1024]; Result = RealGetWindowClass( NULL, Buffer, ARRAY_SIZE(Buffer) ); ok(Result == 0, "Result = %d\n", Result); ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE, "GetLastError() = %ld\n", GetLastError()); for (testNo = 0; testNo < ARRAY_SIZE(RealClassTestData); testNo++) { ATOM atom; WNDCLASSA cls; HWND hWnd; /* Register classes, "derived" from built-in dialog, with and without the DLGWINDOWEXTRA flag set */ GetClassInfoA(0, "#32770", &cls); if (RealClassTestData[testNo].OverrideWndProc) cls.lpfnWndProc = DefWindowProcA; cls.lpszClassName = RealClassTestData[testNo].ClassName; cls.cbWndExtra &= ~RealClassTestData[testNo].WndExtra; atom = RegisterClassA (&cls); if (atom == 0) return; /* Create a window */ hWnd = CreateWindowEx( WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE | WS_EX_CONTROLPARENT | WS_EX_APPWINDOW, RealClassTestData[testNo].ClassName, RealClassTestData[testNo].ClassName, WS_POPUPWINDOW | WS_CLIPSIBLINGS | WS_DLGFRAME | WS_OVERLAPPED | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | DS_3DLOOK | DS_SETFONT | DS_MODALFRAME, CW_USEDEFAULT, CW_USEDEFAULT, 100, 100, NULL, NULL, 0, 0); /* Do we expect a HWND at all? */ if (RealClassTestData[testNo].ExpectsHwnd) { ok(hWnd != NULL, "\n"); if (hWnd != NULL) { /* Get the "real" class name */ Result = RealGetWindowClass( hWnd, Buffer, ARRAY_SIZE(Buffer) ); printf("Buffer: %s\nExpectedClassNameBefore(%d): %s\n", Buffer, testNo, RealClassTestData[testNo].ExpectedClassNameBefore); ok( Result != 0, "\n" ); ok( strcmp( Buffer, RealClassTestData[testNo].ExpectedClassNameBefore ) == 0, "\n" ); /* Call a function that requires a dialog window */ DefDlgProcA( hWnd, DM_SETDEFID, IDCANCEL, 0 ); /* Get the "real" class name again */ Result = RealGetWindowClass( hWnd, Buffer, ARRAY_SIZE(Buffer) ); printf("Buffer: %s\nExpectedClassNameAfter(%d): %s\n", Buffer, testNo, RealClassTestData[testNo].ExpectedClassNameAfter); ok( Result != 0, "\n" ); ok( strcmp( Buffer, RealClassTestData[testNo].ExpectedClassNameAfter ) == 0, "\n" ); } } else { ok(hWnd == NULL, "\n"); } /* Cleanup */ DestroyWindow(hWnd); UnregisterClass(RealClassTestData[testNo].ClassName, 0); } }