On 24/03/2008, chris morgan <[EMAIL PROTECTED]> wrote: > test code run on windows nt4 sp6, messages checked using ms spk++: > > DEVMODE dev_mode; > memset(&dev_mode,0,sizeof(DEVMODE)); > dev_mode.dmSize = sizeof(DEVMODE); > > // Get the current display settings > if (!EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&dev_mode)) > { > printf("Could not EnumDisplaySettings, giving up.\n"); > return 0; > } > > // Call ChangeDisplaySettings with the current settings, > // No WM_DISPLAYCHANGE message sent > ChangeDisplaySettings(&dev_mode, 0); > > // Change something (that works) > dev_mode.dmBitsPerPel = 32; > > // WM_DISPLAYCHANGE message sent > ChangeDisplaySettings(&dev_mode, 0); > > // Change something to an impossible value > dev_mode.dmBitsPerPel = 999; > > // No WM_DISPLAYCHANGE message sent > ChangeDisplaySettings(&dev_mode, 0);
This should be incorporated into a conformance/regression test. That way, this bug will not reappear and can also be verified as the correct behaviour on different versions of Windows. > + if (width == screen_width && height == screen_height) > + { > + return; > + } w.r.t. the implementation: * ChangeDisplaySettings returns a long (http://msdn2.microsoft.com/en-us/library/ms533260(VS.85).aspx), so the correct value must be returned on error; * the fix does not match the test cases (screen size vs colour depth). In addition, your tests should: * check that changing the screen resolution causes a WM_DISPLAYCHANGE message to be sent; * if there are no other tests, ChangeDisplaySettings should be checked to see what happens with invalid arguments (for completeness); * the return value is not checked for expected values (see http://msdn2.microsoft.com/en-us/library/ms533260(VS.85).aspx); * GetLastError() is not checked to see what it is set to (see other tests for examples); * restore the display settings back to what they were before the tests. Thanks for improving Wine, - Reece