On 24/03/2008, chris morgan cmorgan@mail.leather-wallet.co.uk 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