--- wine/dlls/user/tests/menu.c 2005-04-14 15:57:27.000000000 +0200 +++ mywine/dlls/user/tests/menu.c 2005-05-08 12:04:08.000000000 +0200 @@ -41,7 +41,30 @@ static LRESULT WINAPI menu_check_wnd_pro /* mark window as having entered menu loop */ SetWindowLongPtr(hwnd, GWLP_USERDATA, TRUE); /* exit menu modal loop */ - return SendMessage(hwnd, WM_CANCELMODE, 0, 0); + //return SendMessage(hwnd, WM_CANCELMODE, 0, 0); + return DefWindowProc(hwnd, msg, wparam, lparam); + + case WM_MEASUREITEM: + trace("WM_MEASUREITEM received\n"); + ((MEASUREITEMSTRUCT*)lparam)->itemWidth = 10; + ((MEASUREITEMSTRUCT*)lparam)->itemHeight = 30; + return TRUE; + case WM_DRAWITEM: + { + DRAWITEMSTRUCT * pdis; + RECT rc; + pdis = (DRAWITEMSTRUCT *) lparam; + trace("WM_DRAWITEM received item %d rc %ld,%ld-%ld,%ld \n", + pdis->itemID, + pdis->rcItem.left,pdis->rcItem.top,pdis->rcItem.right,pdis->rcItem.bottom ); + GetMenuItemRect( NULL, (HMENU)pdis->hwndItem, 1, &rc); + trace("it 1 rc %ld,%ld-%ld,%ld\n",rc.left, rc.top,rc.right,rc.bottom); + GetMenuItemRect( NULL, (HMENU)pdis->hwndItem, 3, &rc); + trace("it 3 rc %ld,%ld-%ld,%ld\n",rc.left, rc.top,rc.right,rc.bottom); + + + } + } return DefWindowProc(hwnd, msg, wparam, lparam); } @@ -101,9 +124,37 @@ static void test_menu_locked_by_window() DestroyWindow(hwnd); } +static void test_menu_ownerdrawn() +{ + int i,j,k; + BOOL ret; + HMENU hmenu; + HWND hwnd = CreateWindowEx(0, MAKEINTATOM(atomMenuCheckClass), NULL, + WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, + NULL, NULL, NULL, NULL); + ok(hwnd != NULL, "CreateWindowEx failed with error %ld\n", GetLastError()); + if( !hwnd) return; + hmenu = CreatePopupMenu(); + ok(hmenu != NULL, "CreateMenu failed with error %ld\n", GetLastError()); + if( !hmenu) { DestroyWindow(hwnd);return;} + k=1; + for( j=0;j<1;j++) + for(i=0;i<2;i++) { + ret = AppendMenu( hmenu, MF_OWNERDRAW | + (i==0 ? MF_MENUBREAK : 0), k++, 0); + ok( ret, "AppendMenu failed for %d\n", k-1); + } + ret = TrackPopupMenu( hmenu, 0x100, 100,100, 0, hwnd, NULL); + ok( ret, "TrackPopupMenu failed gle %ld\n", GetLastError()); + trace("done\n"); + + DestroyWindow(hwnd); +} + START_TEST(menu) { register_menu_check_class(); - test_menu_locked_by_window(); +// test_menu_locked_by_window(); + test_menu_ownerdrawn(); }