diff --git a/rostests/apitests/user32/CMakeLists.txt b/rostests/apitests/user32/CMakeLists.txt index 4613c22b638..0a1d7491569 100644 --- a/rostests/apitests/user32/CMakeLists.txt +++ b/rostests/apitests/user32/CMakeLists.txt @@ -3,6 +3,7 @@ list(APPEND SOURCE AttachThreadInput.c helper.c DeferWindowPos.c + DestroyCursorIcon.c desktop.c GetIconInfo.c GetKeyState.c diff --git a/rostests/apitests/user32/DestroyCursorIcon.c b/rostests/apitests/user32/DestroyCursorIcon.c new file mode 100644 index 00000000000..3761c979000 --- /dev/null +++ b/rostests/apitests/user32/DestroyCursorIcon.c @@ -0,0 +1,49 @@ +#include +#include +#include +#include "resource.h" + +START_TEST(DestroyCursorIcon) +{ + HICON hicon; + HCURSOR hcursor; + ICONINFO iconinfo; + + ZeroMemory(&iconinfo, sizeof(iconinfo)); + + iconinfo.hbmMask = CreateBitmap(8, 16, 1, 1, NULL); + ok(iconinfo.hbmMask != NULL, "\n"); + + /* + * Test if DestroyCursor can destroy an icon, and vice-versa . + * It can. + */ + iconinfo.fIcon = TRUE; + hicon = CreateIconIndirect(&iconinfo); + ok(hicon != 0, "should not fail\n"); + ok(DestroyCursor(hicon), "\n"); + ok(!DestroyIcon(hicon), "\n"); + + iconinfo.fIcon = FALSE; + hcursor = CreateIconIndirect(&iconinfo); + ok(hcursor != 0, "should not fail\n"); + ok(DestroyIcon(hcursor), "\n"); + ok(!DestroyCursor(hcursor), "\n"); + + /* Clean up */ + DeleteObject(iconinfo.hbmMask); + + /* Now check its behaviour regarding Shared icons/cursors */ + hcursor = LoadCursor(GetModuleHandle(NULL), "TESTCURSOR"); + ok(hcursor != 0, "\n"); + + /* MSDN says we shouldn't do that, but it still succeeds */ + ok(DestroyCursor(hcursor), "\n"); + + /* In fact, it's still there */ + ok(GetIconInfo(hcursor, &iconinfo), "\n"); + + /* clean up */ + DeleteObject(iconinfo.hbmMask); + DeleteObject(iconinfo.hbmColor); +} \ No newline at end of file