Changeset 2611 for trunk/src/user32/menu.cpp
- Timestamp:
- Feb 3, 2000, 6:13:03 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/menu.cpp
r2582 r2611 1 /* $Id: menu.cpp,v 1.1 4 2000-01-31 22:30:52 sandervlExp $*/1 /* $Id: menu.cpp,v 1.15 2000-02-03 17:13:00 cbratschi Exp $*/ 2 2 /* 3 3 * Menu functions … … 9 9 * Copyright 1999 Christoph Bratschi 10 10 * 11 * WINE version: 99121211 * WINE version: 20000130 12 12 * 13 13 * Status: ??? … … 301 301 302 302 /*********************************************************************** 303 * MENU_GetMenu 304 * 305 * Validate the given menu handle and returns the menu structure pointer. 306 */ 307 POPUPMENU *MENU_GetMenu(HMENU hMenu) 308 { 309 POPUPMENU *menu; 310 menu = (POPUPMENU*)hMenu; 311 if (!IS_A_MENU(menu)) 312 { 313 //ERR("invalid menu handle=%x, ptr=%p, magic=%x\n", hMenu, menu, menu? menu->wMagic:0); 314 menu = NULL; 315 } 316 return menu; 317 } 318 319 /*********************************************************************** 303 320 * MENU_CopySysPopup 304 321 * … … 578 595 UINT i; 579 596 580 if (((*hmenu)==0xffff) || (!(menu = (POPUPMENU*)*hmenu))) return NULL;597 if (((*hmenu)==0xffff) || (!(menu = MENU_GetMenu(*hmenu)))) return NULL; 581 598 if (wFlags & MF_BYPOSITION) 582 599 { … … 623 640 MENUITEM *item; 624 641 if (((*hmenu)==0xffff) || 625 (!(menu = (POPUPMENU*)*hmenu)))642 (!(menu = MENU_GetMenu(*hmenu)))) 626 643 return NO_SELECTED_ITEM; 627 644 item = menu->items; … … 701 718 if (hmenu) 702 719 { 703 POPUPMENU *menu = (POPUPMENU*)hmenu;720 POPUPMENU *menu = MENU_GetMenu(hmenu); 704 721 MENUITEM *item = menu->items; 705 722 LONG menuchar; … … 1320 1337 /* draw menu items */ 1321 1338 1322 menu = (POPUPMENU*)hmenu;1339 menu = MENU_GetMenu(hmenu); 1323 1340 if (menu && menu->nItems) 1324 1341 { … … 1351 1368 HFONT hfontOld = 0; 1352 1369 1353 lppop = (LPPOPUPMENU)getMenu(hwnd);1370 lppop = MENU_GetMenu(getMenu(hwnd)); 1354 1371 if (lppop == NULL || lprect == NULL) 1355 1372 { … … 1493 1510 //hwndOwner, hmenu, id, x, y, xanchor, yanchor); 1494 1511 1495 if (!(menu = (POPUPMENU*)hmenu)) return FALSE;1512 if (!(menu = MENU_GetMenu(hmenu))) return FALSE; 1496 1513 if (menu->FocusedItem != NO_SELECTED_ITEM) 1497 1514 { … … 1601 1618 //TRACE("owner=0x%04x menu=0x%04x index=0x%04x select=0x%04x\n", hwndOwner, hmenu, wIndex, sendMenuSelect); 1602 1619 1603 lppop = (POPUPMENU*)hmenu;1604 if ( !lppop->nItems) return;1620 lppop = MENU_GetMenu(hmenu); 1621 if ((!lppop) || (!lppop->nItems)) return; 1605 1622 1606 1623 if (lppop->FocusedItem == wIndex) return; … … 1668 1685 //TRACE("hwnd=0x%04x hmenu=0x%04x off=0x%04x\n", hwndOwner, hmenu, offset); 1669 1686 1670 menu = (POPUPMENU*)hmenu;1671 if ( !menu->items) return;1687 menu = MENU_GetMenu(hmenu); 1688 if ((!menu) || (!menu->items)) return; 1672 1689 1673 1690 if ( menu->FocusedItem != NO_SELECTED_ITEM ) … … 1741 1758 if (flags & MF_POPUP) 1742 1759 { 1743 POPUPMENU *menu = (POPUPMENU*)(UINT)id;1744 if ( IS_A_MENU(menu)) menu->wFlags |= MF_POPUP;1760 POPUPMENU *menu = MENU_GetMenu((UINT)id); 1761 if (menu) menu->wFlags |= MF_POPUP; 1745 1762 else 1746 1763 { … … 1785 1802 POPUPMENU *menu; 1786 1803 1787 if (!(menu = (POPUPMENU*)hMenu)) 1788 { 1789 //WARN("%04x not a menu handle\n", 1790 // hMenu ); 1804 if (!(menu = MENU_GetMenu(hMenu))) 1791 1805 return NULL; 1792 }1793 1806 1794 1807 /* Find where to insert new item */ … … 1799 1812 /* Some programs specify the menu length to do that */ 1800 1813 pos = menu->nItems; 1801 } 1802 else 1814 } else 1803 1815 { 1804 1816 if (!MENU_FindItem( &hMenu, &pos, flags )) 1805 1817 { 1806 //WARN("item %x not found\n", 1807 // pos ); 1818 //FIXME("item %x not found\n", pos ); 1808 1819 return NULL; 1809 1820 } 1810 if (!(menu = (LPPOPUPMENU)hMenu)) 1811 { 1812 //WARN("%04x not a menu handle\n", 1813 // hMenu); 1821 if (!(menu = MENU_GetMenu(hMenu))) 1814 1822 return NULL; 1815 }1816 1823 } 1817 1824 … … 1952 1959 MENUITEM *item; 1953 1960 1954 menu = (POPUPMENU*)hmenu;1955 1956 if ( menu->FocusedItem == NO_SELECTED_ITEM) return 0;1961 menu = MENU_GetMenu(hmenu); 1962 1963 if ((!menu) || (menu->FocusedItem == NO_SELECTED_ITEM)) return 0; 1957 1964 1958 1965 item = &menu->items[menu->FocusedItem]; … … 1971 1978 BOOL sendMenuSelect ) 1972 1979 { 1973 POPUPMENU *menu = (POPUPMENU*)hmenu;1980 POPUPMENU *menu = MENU_GetMenu(hmenu); 1974 1981 1975 1982 //TRACE("owner=0x%04x hmenu=0x%04x 0x%04x\n", hwndOwner, hmenu, sendMenuSelect); … … 1990 1997 } else return; 1991 1998 1992 submenu = (POPUPMENU*)hsubmenu;1999 submenu = MENU_GetMenu(hsubmenu); 1993 2000 MENU_HideSubPopups( hwndOwner, hsubmenu, FALSE ); 1994 2001 MENU_SelectItem( hwndOwner, hsubmenu, NO_SELECTED_ITEM, sendMenuSelect, 0 ); … … 2025 2032 //TRACE("owner=0x%04x hmenu=0x%04x 0x%04x\n", hwndOwner, hmenu, selectFirst); 2026 2033 2027 if (!(menu = (POPUPMENU*)hmenu)) return hmenu;2034 if (!(menu = MENU_GetMenu(hmenu))) return hmenu; 2028 2035 2029 2036 if (menu->FocusedItem == NO_SELECTED_ITEM) … … 2124 2131 static HMENU MENU_PtMenu(HMENU hMenu,POINT pt,BOOL inMenuBar) 2125 2132 { 2126 POPUPMENU *menu = (POPUPMENU*)hMenu;2133 POPUPMENU *menu = MENU_GetMenu(hMenu); 2127 2134 register UINT ht = menu->FocusedItem; 2128 2135 … … 2165 2172 { 2166 2173 MENUITEM *item; 2167 POPUPMENU *menu = (POPUPMENU*)hMenu;2174 POPUPMENU *menu = MENU_GetMenu(hMenu); 2168 2175 2169 2176 //TRACE("%p hmenu=0x%04x\n", pmt, hMenu); … … 2207 2214 static void MENU_SwitchTracking( MTRACKER* pmt, HMENU hPtMenu, UINT id ) 2208 2215 { 2209 POPUPMENU *ptmenu = (POPUPMENU*)hPtMenu;2210 POPUPMENU *topmenu = (POPUPMENU*)pmt->hTopMenu;2216 POPUPMENU *ptmenu = MENU_GetMenu(hPtMenu); 2217 POPUPMENU *topmenu = MENU_GetMenu(pmt->hTopMenu); 2211 2218 2212 2219 //TRACE("%p hmenu=0x%04x 0x%04x\n", pmt, hPtMenu, id); … … 2237 2244 { 2238 2245 UINT id = 0; 2239 POPUPMENU *ptmenu = (POPUPMENU*)hPtMenu;2246 POPUPMENU *ptmenu = MENU_GetMenu(hPtMenu); 2240 2247 MENUITEM *item; 2241 2248 … … 2278 2285 { 2279 2286 UINT id = 0; 2280 POPUPMENU *ptmenu = (POPUPMENU*)hPtMenu;2287 POPUPMENU *ptmenu = MENU_GetMenu(hPtMenu); 2281 2288 MENUITEM *item; 2282 2289 … … 2315 2322 if( hPtMenu ) 2316 2323 { 2317 ptmenu = (POPUPMENU*)hPtMenu;2324 ptmenu = MENU_GetMenu(hPtMenu); 2318 2325 if( IS_SYSTEM_MENU(ptmenu) ) 2319 2326 id = 0; … … 2344 2351 static LRESULT MENU_DoNextMenu( MTRACKER* pmt, UINT vk ) 2345 2352 { 2346 POPUPMENU *menu = (POPUPMENU*)pmt->hTopMenu;2353 POPUPMENU *menu = MENU_GetMenu(pmt->hTopMenu); 2347 2354 2348 2355 if( (vk == VK_LEFT && menu->FocusedItem == 0 ) || … … 2373 2380 if( vk == VK_LEFT ) 2374 2381 { 2375 menu = (POPUPMENU*)hNewMenu;2382 menu = MENU_GetMenu(hNewMenu); 2376 2383 id = menu->nItems - 1; 2377 2384 } … … 2485 2492 2486 2493 hmenuprev = hmenutmp = pmt->hTopMenu; 2487 menu = (POPUPMENU*)hmenutmp;2494 menu = MENU_GetMenu(hmenutmp); 2488 2495 2489 2496 /* Try to move 1 column left (if possible) */ … … 2534 2541 { 2535 2542 HMENU hmenutmp; 2536 POPUPMENU *menu = (POPUPMENU*)pmt->hTopMenu;2543 POPUPMENU *menu = MENU_GetMenu(pmt->hTopMenu); 2537 2544 UINT nextcol; 2538 2545 … … 2619 2626 2620 2627 fEndMenu = FALSE; 2621 if (!(menu = (POPUPMENU*)hmenu)) return FALSE; 2622 2623 if (wFlags & TPM_BUTTONDOWN) MENU_ButtonDown( &mt, hmenu, wFlags ); 2628 if (!(menu = MENU_GetMenu(hmenu))) return FALSE; 2629 2630 if (wFlags & TPM_BUTTONDOWN) 2631 { 2632 /* Get the result in order to start the tracking or not */ 2633 fRemove = MENU_ButtonDown( &mt, hmenu, wFlags ); 2634 fEndMenu = !fRemove; 2635 } 2624 2636 2625 2637 //EVENT_Capture( mt.hOwnerWnd, HTMENU ); //CB: todo … … 2629 2641 while (!fEndMenu) 2630 2642 { 2631 menu = (POPUPMENU*)mt.hCurrentMenu;2643 menu = MENU_GetMenu(mt.hCurrentMenu); 2632 2644 msg.hwnd = (wFlags & TPM_ENTERIDLEEX && menu->wFlags & MF_POPUP) ? menu->hWnd : 0; 2633 2645 … … 2720 2732 case VK_DOWN: /* If on menu bar, pull-down the menu */ 2721 2733 2722 menu = (POPUPMENU*)mt.hCurrentMenu;2734 menu = MENU_GetMenu(mt.hCurrentMenu); 2723 2735 if (!(menu->wFlags & MF_POPUP)) 2724 2736 mt.hCurrentMenu = MENU_ShowSubPopup(mt.hOwnerWnd, mt.hTopMenu, TRUE, wFlags,&mt.pt); … … 2801 2813 ReleaseCapture(); 2802 2814 2803 menu = (POPUPMENU*)mt.hTopMenu;2815 menu = MENU_GetMenu(mt.hTopMenu); 2804 2816 2805 2817 if( IsWindow( mt.hOwnerWnd ) ) … … 3089 3101 // hwnd, menubarWidth, orgX, orgY ); 3090 3102 3091 if (!(lppop = (LPPOPUPMENU)getMenu(hwnd)))3103 if (!(lppop = MENU_GetMenu(getMenu(hwnd)))) 3092 3104 { 3093 3105 return 0; … … 3184 3196 3185 3197 /* Get the Popupmenu to access the owner menu */ 3186 if (!(menu = (POPUPMENU*)hMenu))3198 if (!(menu = MENU_GetMenu(hMenu))) 3187 3199 return (UINT)-1; 3188 3200 … … 3201 3213 3202 3214 /* Get the parent menu to access*/ 3203 if (!(parentMenu = (POPUPMENU*)menu->hSysMenuOwner))3215 if (!(parentMenu = MENU_GetMenu(menu->hSysMenuOwner))) 3204 3216 return (UINT)-1; 3205 3217 … … 3217 3229 * GetMenuString32A (USER32.268) 3218 3230 */ 3219 INT WINAPI GetMenuStringA(HMENU hMenu, UINT wItemID, 3220 LPSTR str, INT nMaxSiz, UINT wFlags ) 3221 { 3231 INT WINAPI GetMenuStringA( 3232 HMENU hMenu, /* [in] menuhandle */ 3233 UINT wItemID, /* [in] menu item (dep. on wFlags) */ 3234 LPSTR str, /* [out] outbuffer. If NULL, func returns entry length*/ 3235 INT nMaxSiz, /* [in] length of buffer. if 0, func returns entry len*/ 3236 UINT wFlags /* [in] MF_ flags */ 3237 ) { 3222 3238 MENUITEM *item; 3223 3239 … … 3270 3286 // hWnd, hMenu, wItemID, wHilite); 3271 3287 if (!MENU_FindItem( &hMenu, &wItemID, wHilite )) return FALSE; 3272 if (!(menu = (LPPOPUPMENU)hMenu)) return FALSE;3288 if (!(menu = MENU_GetMenu(hMenu))) return FALSE; 3273 3289 if (menu->FocusedItem == wItemID) return TRUE; 3274 3290 MENU_HideSubPopups( hWnd, hMenu, FALSE ); … … 3295 3311 if (item->fType & MF_POPUP) 3296 3312 { 3297 POPUPMENU *menu = (POPUPMENU*)item->hSubMenu;3313 POPUPMENU *menu = MENU_GetMenu(item->hSubMenu); 3298 3314 if (!menu) return -1; 3299 3315 else return (menu->nItems << 8) | ((item->fState|item->fType) & 0xff); … … 3314 3330 INT WINAPI GetMenuItemCount( HMENU hMenu ) 3315 3331 { 3316 LPPOPUPMENU menu = (LPPOPUPMENU)hMenu;3332 LPPOPUPMENU menu = MENU_GetMenu(hMenu); 3317 3333 3318 3334 dprintf(("USER32: GetMenuItemCount")); 3319 3335 3320 if (! IS_A_MENU(menu)) return -1;3336 if (!menu) return -1; 3321 3337 //TRACE("(%04x) returning %d\n", 3322 3338 // hMenu, menu->nItems ); … … 3366 3382 3367 3383 if (flags & MF_POPUP) /* Set the MF_POPUP flag on the popup-menu */ 3368 ( (POPUPMENU *)(HMENU)id)->wFlags |= MF_POPUP;3384 (MENU_GetMenu((HMENU)id))->wFlags |= MF_POPUP; 3369 3385 3370 3386 item->hCheckBit = item->hUnCheckBit = 0; … … 3428 3444 //TRACE("(menu=%04x pos=%04x flags=%04x)\n",hMenu, nPos, wFlags); 3429 3445 if (!(item = MENU_FindItem( &hMenu, &nPos, wFlags ))) return FALSE; 3430 if (!(menu = (LPPOPUPMENU)hMenu)) return FALSE;3446 if (!(menu = MENU_GetMenu(hMenu))) return FALSE; 3431 3447 3432 3448 /* Remove item */ … … 3612 3628 if (hMenu && hMenu != MENU_DefSysPopup) 3613 3629 { 3614 LPPOPUPMENU lppop = (LPPOPUPMENU)hMenu;3630 LPPOPUPMENU lppop = MENU_GetMenu(hMenu); 3615 3631 HWND pTPWnd = MENU_GetTopPopupWnd(); 3616 3632 … … 3618 3634 SetWindowLongA(pTPWnd,0,0); 3619 3635 3620 if (IS_A_MENU( lppop )) 3636 if (!IS_A_MENU(lppop)) lppop = NULL; 3637 if (lppop) 3621 3638 { 3622 3639 lppop->wMagic = 0; /* Mark it as destroyed */ … … 3672 3689 else 3673 3690 { 3674 POPUPMENU *menu = (POPUPMENU*)hSysMenu;3675 if( IS_A_MENU(menu))3691 POPUPMENU *menu = MENU_GetMenu(hSysMenu); 3692 if(menu) 3676 3693 { 3677 3694 if( menu->nItems > 0 && menu->items[0].hSubMenu == MENU_DefSysPopup ) … … 3701 3718 /* Store the dummy sysmenu handle to facilitate the refresh */ 3702 3719 /* of the close button if the SC_CLOSE item change */ 3703 menu = (POPUPMENU*)retvalue;3704 if ( IS_A_MENU(menu))3720 menu = MENU_GetMenu(retvalue); 3721 if (menu) 3705 3722 menu->hSysMenuOwner = hSysMenu; 3706 3723 } … … 3766 3783 LPPOPUPMENU lpmenu; 3767 3784 3768 if (!(lpmenu = (LPPOPUPMENU)hMenu))3785 if (!(lpmenu = MENU_GetMenu(hMenu))) 3769 3786 { 3770 3787 return FALSE; … … 3811 3828 if (!(GetWindowLongA(hWnd,GWL_STYLE) & WS_CHILD) && getMenu(hWnd)) 3812 3829 { 3813 lppop = (LPPOPUPMENU)getMenu(hWnd);3830 lppop = MENU_GetMenu(getMenu(hWnd)); 3814 3831 if (lppop == NULL) 3815 3832 { … … 4095 4112 menu->hSubMenu = lpmii->hSubMenu; 4096 4113 if (menu->hSubMenu) { 4097 POPUPMENU *subMenu = (POPUPMENU*)(UINT)menu->hSubMenu;4098 if ( IS_A_MENU(subMenu)) {4114 POPUPMENU *subMenu = MENU_GetMenu((UINT)menu->hSubMenu); 4115 if (subMenu) { 4099 4116 subMenu->wFlags |= MF_POPUP; 4100 4117 menu->fType |= MF_POPUP; … … 4158 4175 //TRACE("(0x%x,%d,%d)\n", hmenu, uItem, bypos); 4159 4176 4160 if (!(menu = (POPUPMENU*)hmenu)) return FALSE;4177 if (!(menu = MENU_GetMenu(hmenu))) return FALSE; 4161 4178 4162 4179 /* reset all default-item flags */ … … 4207 4224 //TRACE("(0x%x,%d,%d)\n", hmenu, bypos, flags); 4208 4225 4209 if (!(menu = (POPUPMENU*)hmenu)) return -1;4226 if (!(menu = MENU_GetMenu(hmenu))) return -1; 4210 4227 4211 4228 /* find default item */ … … 4326 4343 if(!hwnd) 4327 4344 { 4328 itemMenu = (POPUPMENU*)hMenu;4345 itemMenu = MENU_GetMenu(hMenu); 4329 4346 if (itemMenu == NULL) { 4330 4331 4332 4347 SetLastError(ERROR_INVALID_PARAMETER); 4348 return FALSE; 4349 } 4333 4350 4334 4351 if(itemMenu->hWnd == 0) … … 4338 4355 4339 4356 if ((rect == NULL) || (item == NULL)) { 4340 4357 SetLastError(ERROR_INVALID_PARAMETER); 4341 4358 return FALSE; 4342 4359 } … … 4363 4380 //TRACE("(0x%04x %p)\n", hMenu, lpmi); 4364 4381 4365 if (lpmi && (lpmi->cbSize==sizeof(MENUINFO)) && (menu= (POPUPMENU*)hMenu))4382 if (lpmi && (lpmi->cbSize==sizeof(MENUINFO)) && (menu=MENU_GetMenu(hMenu))) 4366 4383 { 4367 4384 … … 4399 4416 //TRACE("(0x%04x %p)\n", hMenu, lpmi); 4400 4417 4401 if (lpmi && (menu = (POPUPMENU*)hMenu))4418 if (lpmi && (menu = MENU_GetMenu(hMenu))) 4402 4419 { 4403 4420 … … 4432 4449 //TRACE("(0x%04x 0x%08lx)\n", hMenu, dwContextHelpID); 4433 4450 4434 menu = (POPUPMENU*)hMenu;4451 menu = MENU_GetMenu(hMenu); 4435 4452 if (menu) 4436 4453 { … … 4451 4468 //TRACE("(0x%04x)\n", hMenu); 4452 4469 4453 menu = (POPUPMENU*)hMenu;4470 menu = MENU_GetMenu(hMenu); 4454 4471 if (menu) 4455 4472 {
Note:
See TracChangeset
for help on using the changeset viewer.