1 /* Unit tests for systray 2 * 3 * Copyright 2007 Mikolaj Zalewski 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public 16 * License along with this library; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 18 */ 19 20 #ifndef __REACTOS__ 21 #define _WIN32_IE 0x600 22 #endif 23 #include <stdarg.h> 24 25 #include <windows.h> 26 #include "shellapi.h" 27 28 #include "wine/test.h" 29 30 31 static HWND hMainWnd; 32 static BOOL (WINAPI *pShell_NotifyIconW)(DWORD,PNOTIFYICONDATAW); 33 34 static void test_cbsize(void) 35 { 36 NOTIFYICONDATAA nidA; 37 BOOL ret; 38 39 if (pShell_NotifyIconW) 40 { 41 NOTIFYICONDATAW nidW; 42 43 ZeroMemory(&nidW, sizeof(nidW)); 44 nidW.cbSize = NOTIFYICONDATAW_V1_SIZE; 45 nidW.hWnd = hMainWnd; 46 nidW.uID = 1; 47 nidW.uFlags = NIF_ICON|NIF_MESSAGE; 48 nidW.hIcon = LoadIconA(NULL, (LPSTR)IDI_APPLICATION); 49 nidW.uCallbackMessage = WM_USER+17; 50 ret = pShell_NotifyIconW(NIM_ADD, &nidW); 51 ok(ret, "NIM_ADD failed!\n"); 52 /* using an invalid cbSize does work */ 53 nidW.cbSize = 3; 54 nidW.hWnd = hMainWnd; 55 nidW.uID = 1; 56 ret = pShell_NotifyIconW(NIM_DELETE, &nidW); 57 ok( ret || broken(!ret), /* nt4 */ "NIM_DELETE failed!\n"); 58 /* as icon doesn't exist anymore - now there will be an error */ 59 nidW.cbSize = sizeof(nidW); 60 ok(!pShell_NotifyIconW(NIM_DELETE, &nidW) != !ret, "The icon was not deleted\n"); 61 } 62 63 /* same for Shell_NotifyIconA */ 64 ZeroMemory(&nidA, sizeof(nidA)); 65 nidA.cbSize = NOTIFYICONDATAA_V1_SIZE; 66 nidA.hWnd = hMainWnd; 67 nidA.uID = 1; 68 nidA.uFlags = NIF_ICON|NIF_MESSAGE; 69 nidA.hIcon = LoadIconA(NULL, (LPSTR)IDI_APPLICATION); 70 nidA.uCallbackMessage = WM_USER+17; 71 ok(Shell_NotifyIconA(NIM_ADD, &nidA), "NIM_ADD failed!\n"); 72 73 /* using an invalid cbSize does work */ 74 nidA.cbSize = 3; 75 nidA.hWnd = hMainWnd; 76 nidA.uID = 1; 77 ret = Shell_NotifyIconA(NIM_DELETE, &nidA); 78 ok(ret, "NIM_DELETE failed!\n"); 79 /* as icon doesn't exist anymore - now there will be an error */ 80 nidA.cbSize = sizeof(nidA); 81 ok(!Shell_NotifyIconA(NIM_DELETE, &nidA) != !ret, "The icon was not deleted\n"); 82 } 83 84 START_TEST(systray) 85 { 86 WNDCLASSA wc; 87 MSG msg; 88 RECT rc; 89 HMODULE hshell32; 90 91 hshell32 = GetModuleHandleA("shell32.dll"); 92 pShell_NotifyIconW = (void*)GetProcAddress(hshell32, "Shell_NotifyIconW"); 93 94 wc.style = CS_HREDRAW | CS_VREDRAW; 95 wc.cbClsExtra = 0; 96 wc.cbWndExtra = 0; 97 wc.hInstance = GetModuleHandleA(NULL); 98 wc.hIcon = NULL; 99 wc.hCursor = LoadCursorA(NULL, (LPSTR)IDC_IBEAM); 100 wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW); 101 wc.lpszMenuName = NULL; 102 wc.lpszClassName = "MyTestWnd"; 103 wc.lpfnWndProc = DefWindowProcA; 104 RegisterClassA(&wc); 105 106 hMainWnd = CreateWindowExA(0, "MyTestWnd", "Blah", WS_OVERLAPPEDWINDOW, 107 CW_USEDEFAULT, CW_USEDEFAULT, 680, 260, NULL, NULL, GetModuleHandleA(NULL), 0); 108 GetClientRect(hMainWnd, &rc); 109 ShowWindow(hMainWnd, SW_SHOW); 110 111 test_cbsize(); 112 113 PostQuitMessage(0); 114 while(GetMessageA(&msg,0,0,0)) { 115 TranslateMessage(&msg); 116 DispatchMessageA(&msg); 117 } 118 DestroyWindow(hMainWnd); 119 } 120