Ignore:
Timestamp:
Feb 3, 2000, 6:13:03 PM (26 years ago)
Author:
cbratschi
Message:

merged controls with wine 20000130

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/menu.cpp

    r2582 r2611  
    1 /* $Id: menu.cpp,v 1.14 2000-01-31 22:30:52 sandervl Exp $*/
     1/* $Id: menu.cpp,v 1.15 2000-02-03 17:13:00 cbratschi Exp $*/
    22/*
    33 * Menu functions
     
    99 * Copyright 1999 Christoph Bratschi
    1010 *
    11  * WINE version: 991212
     11 * WINE version: 20000130
    1212 *
    1313 * Status:  ???
     
    301301
    302302/***********************************************************************
     303 *           MENU_GetMenu
     304 *
     305 * Validate the given menu handle and returns the menu structure pointer.
     306 */
     307POPUPMENU *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/***********************************************************************
    303320 *           MENU_CopySysPopup
    304321 *
     
    578595    UINT i;
    579596
    580     if (((*hmenu)==0xffff) || (!(menu = (POPUPMENU*)*hmenu))) return NULL;
     597    if (((*hmenu)==0xffff) || (!(menu = MENU_GetMenu(*hmenu)))) return NULL;
    581598    if (wFlags & MF_BYPOSITION)
    582599    {
     
    623640    MENUITEM *item;
    624641    if (((*hmenu)==0xffff) ||
    625             (!(menu = (POPUPMENU*)*hmenu)))
     642            (!(menu = MENU_GetMenu(*hmenu))))
    626643        return NO_SELECTED_ITEM;
    627644    item = menu->items;
     
    701718    if (hmenu)
    702719    {
    703         POPUPMENU *menu = (POPUPMENU*)hmenu;
     720        POPUPMENU *menu = MENU_GetMenu(hmenu);
    704721        MENUITEM *item = menu->items;
    705722        LONG menuchar;
     
    13201337            /* draw menu items */
    13211338
    1322             menu = (POPUPMENU*)hmenu;
     1339            menu = MENU_GetMenu(hmenu);
    13231340            if (menu && menu->nItems)
    13241341            {
     
    13511368    HFONT hfontOld = 0;
    13521369
    1353     lppop = (LPPOPUPMENU)getMenu(hwnd);
     1370    lppop = MENU_GetMenu(getMenu(hwnd));
    13541371    if (lppop == NULL || lprect == NULL)
    13551372    {
     
    14931510    //hwndOwner, hmenu, id, x, y, xanchor, yanchor);
    14941511
    1495     if (!(menu = (POPUPMENU*)hmenu)) return FALSE;
     1512    if (!(menu = MENU_GetMenu(hmenu))) return FALSE;
    14961513    if (menu->FocusedItem != NO_SELECTED_ITEM)
    14971514    {
     
    16011618    //TRACE("owner=0x%04x menu=0x%04x index=0x%04x select=0x%04x\n", hwndOwner, hmenu, wIndex, sendMenuSelect);
    16021619
    1603     lppop = (POPUPMENU*)hmenu;
    1604     if (!lppop->nItems) return;
     1620    lppop = MENU_GetMenu(hmenu);
     1621    if ((!lppop) || (!lppop->nItems)) return;
    16051622
    16061623    if (lppop->FocusedItem == wIndex) return;
     
    16681685    //TRACE("hwnd=0x%04x hmenu=0x%04x off=0x%04x\n", hwndOwner, hmenu, offset);
    16691686
    1670     menu = (POPUPMENU*)hmenu;
    1671     if (!menu->items) return;
     1687    menu = MENU_GetMenu(hmenu);
     1688    if ((!menu) || (!menu->items)) return;
    16721689
    16731690    if ( menu->FocusedItem != NO_SELECTED_ITEM )
     
    17411758    if (flags & MF_POPUP)
    17421759    {
    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;
    17451762        else
    17461763        {
     
    17851802    POPUPMENU *menu;
    17861803
    1787     if (!(menu = (POPUPMENU*)hMenu))
    1788     {
    1789         //WARN("%04x not a menu handle\n",
    1790         //              hMenu );
     1804    if (!(menu = MENU_GetMenu(hMenu)))
    17911805        return NULL;
    1792     }
    17931806
    17941807    /* Find where to insert new item */
     
    17991812        /* Some programs specify the menu length to do that */
    18001813        pos = menu->nItems;
    1801     }
    1802     else
     1814    } else
    18031815    {
    18041816        if (!MENU_FindItem( &hMenu, &pos, flags ))
    18051817        {
    1806             //WARN("item %x not found\n",
    1807             //              pos );
     1818            //FIXME("item %x not found\n", pos );
    18081819            return NULL;
    18091820        }
    1810         if (!(menu = (LPPOPUPMENU)hMenu))
    1811         {
    1812             //WARN("%04x not a menu handle\n",
    1813             //             hMenu);
     1821        if (!(menu = MENU_GetMenu(hMenu)))
    18141822            return NULL;
    1815         }
    18161823    }
    18171824
     
    19521959    MENUITEM *item;
    19531960
    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;
    19571964
    19581965    item = &menu->items[menu->FocusedItem];
     
    19711978                                BOOL sendMenuSelect )
    19721979{
    1973     POPUPMENU *menu = (POPUPMENU*)hmenu;
     1980    POPUPMENU *menu = MENU_GetMenu(hmenu);
    19741981
    19751982    //TRACE("owner=0x%04x hmenu=0x%04x 0x%04x\n", hwndOwner, hmenu, sendMenuSelect);
     
    19901997        } else return;
    19911998
    1992         submenu = (POPUPMENU*)hsubmenu;
     1999        submenu = MENU_GetMenu(hsubmenu);
    19932000        MENU_HideSubPopups( hwndOwner, hsubmenu, FALSE );
    19942001        MENU_SelectItem( hwndOwner, hsubmenu, NO_SELECTED_ITEM, sendMenuSelect, 0 );
     
    20252032    //TRACE("owner=0x%04x hmenu=0x%04x 0x%04x\n", hwndOwner, hmenu, selectFirst);
    20262033
    2027     if (!(menu = (POPUPMENU*)hmenu)) return hmenu;
     2034    if (!(menu = MENU_GetMenu(hmenu))) return hmenu;
    20282035
    20292036    if (menu->FocusedItem == NO_SELECTED_ITEM)
     
    21242131static HMENU MENU_PtMenu(HMENU hMenu,POINT pt,BOOL inMenuBar)
    21252132{
    2126    POPUPMENU *menu = (POPUPMENU*)hMenu;
     2133   POPUPMENU *menu = MENU_GetMenu(hMenu);
    21272134   register UINT ht = menu->FocusedItem;
    21282135
     
    21652172{
    21662173    MENUITEM *item;
    2167     POPUPMENU *menu = (POPUPMENU*)hMenu;
     2174    POPUPMENU *menu = MENU_GetMenu(hMenu);
    21682175
    21692176    //TRACE("%p hmenu=0x%04x\n", pmt, hMenu);
     
    22072214static void MENU_SwitchTracking( MTRACKER* pmt, HMENU hPtMenu, UINT id )
    22082215{
    2209     POPUPMENU *ptmenu = (POPUPMENU*)hPtMenu;
    2210     POPUPMENU *topmenu = (POPUPMENU*)pmt->hTopMenu;
     2216    POPUPMENU *ptmenu = MENU_GetMenu(hPtMenu);
     2217    POPUPMENU *topmenu = MENU_GetMenu(pmt->hTopMenu);
    22112218
    22122219    //TRACE("%p hmenu=0x%04x 0x%04x\n", pmt, hPtMenu, id);
     
    22372244    {
    22382245        UINT id = 0;
    2239         POPUPMENU *ptmenu = (POPUPMENU*)hPtMenu;
     2246        POPUPMENU *ptmenu = MENU_GetMenu(hPtMenu);
    22402247        MENUITEM *item;
    22412248
     
    22782285    {
    22792286        UINT id = 0;
    2280         POPUPMENU *ptmenu = (POPUPMENU*)hPtMenu;
     2287        POPUPMENU *ptmenu = MENU_GetMenu(hPtMenu);
    22812288        MENUITEM *item;
    22822289
     
    23152322    if( hPtMenu )
    23162323    {
    2317         ptmenu = (POPUPMENU*)hPtMenu;
     2324        ptmenu = MENU_GetMenu(hPtMenu);
    23182325        if( IS_SYSTEM_MENU(ptmenu) )
    23192326            id = 0;
     
    23442351static LRESULT MENU_DoNextMenu( MTRACKER* pmt, UINT vk )
    23452352{
    2346     POPUPMENU *menu = (POPUPMENU*)pmt->hTopMenu;
     2353    POPUPMENU *menu = MENU_GetMenu(pmt->hTopMenu);
    23472354
    23482355    if( (vk == VK_LEFT &&  menu->FocusedItem == 0 ) ||
     
    23732380                if( vk == VK_LEFT )
    23742381                {
    2375                     menu = (POPUPMENU*)hNewMenu;
     2382                    menu = MENU_GetMenu(hNewMenu);
    23762383                    id = menu->nItems - 1;
    23772384                }
     
    24852492
    24862493    hmenuprev = hmenutmp = pmt->hTopMenu;
    2487     menu = (POPUPMENU*)hmenutmp;
     2494    menu = MENU_GetMenu(hmenutmp);
    24882495
    24892496    /* Try to move 1 column left (if possible) */
     
    25342541{
    25352542    HMENU hmenutmp;
    2536     POPUPMENU *menu = (POPUPMENU*)pmt->hTopMenu;
     2543    POPUPMENU *menu = MENU_GetMenu(pmt->hTopMenu);
    25372544    UINT  nextcol;
    25382545
     
    26192626
    26202627    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    }
    26242636
    26252637    //EVENT_Capture( mt.hOwnerWnd, HTMENU ); //CB: todo
     
    26292641    while (!fEndMenu)
    26302642    {
    2631         menu = (POPUPMENU*)mt.hCurrentMenu;
     2643        menu = MENU_GetMenu(mt.hCurrentMenu);
    26322644        msg.hwnd = (wFlags & TPM_ENTERIDLEEX && menu->wFlags & MF_POPUP) ? menu->hWnd : 0;
    26332645
     
    27202732                case VK_DOWN: /* If on menu bar, pull-down the menu */
    27212733
    2722                     menu = (POPUPMENU*)mt.hCurrentMenu;
     2734                    menu = MENU_GetMenu(mt.hCurrentMenu);
    27232735                    if (!(menu->wFlags & MF_POPUP))
    27242736                        mt.hCurrentMenu = MENU_ShowSubPopup(mt.hOwnerWnd, mt.hTopMenu, TRUE, wFlags,&mt.pt);
     
    28012813    ReleaseCapture();
    28022814
    2803     menu = (POPUPMENU*)mt.hTopMenu;
     2815    menu = MENU_GetMenu(mt.hTopMenu);
    28042816
    28052817    if( IsWindow( mt.hOwnerWnd ) )
     
    30893101    //             hwnd, menubarWidth, orgX, orgY );
    30903102
    3091     if (!(lppop = (LPPOPUPMENU)getMenu(hwnd)))
     3103    if (!(lppop = MENU_GetMenu(getMenu(hwnd))))
    30923104    {
    30933105        return 0;
     
    31843196
    31853197    /* Get the Popupmenu to access the owner menu */
    3186     if (!(menu = (POPUPMENU*)hMenu))
     3198    if (!(menu = MENU_GetMenu(hMenu)))
    31873199        return (UINT)-1;
    31883200
     
    32013213
    32023214            /* Get the parent menu to access*/
    3203             if (!(parentMenu = (POPUPMENU*)menu->hSysMenuOwner))
     3215            if (!(parentMenu = MENU_GetMenu(menu->hSysMenuOwner)))
    32043216                return (UINT)-1;
    32053217
     
    32173229 *         GetMenuString32A    (USER32.268)
    32183230 */
    3219 INT WINAPI GetMenuStringA(HMENU hMenu, UINT wItemID,
    3220                           LPSTR str, INT nMaxSiz, UINT wFlags )
    3221 {
     3231INT 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) {
    32223238    MENUITEM *item;
    32233239
     
    32703286    //             hWnd, hMenu, wItemID, wHilite);
    32713287    if (!MENU_FindItem( &hMenu, &wItemID, wHilite )) return FALSE;
    3272     if (!(menu = (LPPOPUPMENU)hMenu)) return FALSE;
     3288    if (!(menu = MENU_GetMenu(hMenu))) return FALSE;
    32733289    if (menu->FocusedItem == wItemID) return TRUE;
    32743290    MENU_HideSubPopups( hWnd, hMenu, FALSE );
     
    32953311    if (item->fType & MF_POPUP)
    32963312    {
    3297         POPUPMENU *menu = (POPUPMENU*)item->hSubMenu;
     3313        POPUPMENU *menu = MENU_GetMenu(item->hSubMenu);
    32983314        if (!menu) return -1;
    32993315        else return (menu->nItems << 8) | ((item->fState|item->fType) & 0xff);
     
    33143330INT WINAPI GetMenuItemCount( HMENU hMenu )
    33153331{
    3316     LPPOPUPMENU menu = (LPPOPUPMENU)hMenu;
     3332    LPPOPUPMENU menu = MENU_GetMenu(hMenu);
    33173333
    33183334    dprintf(("USER32: GetMenuItemCount"));
    33193335
    3320     if (!IS_A_MENU(menu)) return -1;
     3336    if (!menu) return -1;
    33213337    //TRACE("(%04x) returning %d\n",
    33223338    //              hMenu, menu->nItems );
     
    33663382
    33673383    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;
    33693385
    33703386    item->hCheckBit = item->hUnCheckBit = 0;
     
    34283444    //TRACE("(menu=%04x pos=%04x flags=%04x)\n",hMenu, nPos, wFlags);
    34293445    if (!(item = MENU_FindItem( &hMenu, &nPos, wFlags ))) return FALSE;
    3430     if (!(menu = (LPPOPUPMENU)hMenu)) return FALSE;
     3446    if (!(menu = MENU_GetMenu(hMenu))) return FALSE;
    34313447
    34323448      /* Remove item */
     
    36123628    if (hMenu && hMenu != MENU_DefSysPopup)
    36133629    {
    3614         LPPOPUPMENU lppop = (LPPOPUPMENU)hMenu;
     3630        LPPOPUPMENU lppop = MENU_GetMenu(hMenu);
    36153631        HWND pTPWnd = MENU_GetTopPopupWnd();
    36163632
     
    36183634          SetWindowLongA(pTPWnd,0,0);
    36193635
    3620         if (IS_A_MENU( lppop ))
     3636        if (!IS_A_MENU(lppop)) lppop = NULL;
     3637        if (lppop)
    36213638        {
    36223639            lppop->wMagic = 0;  /* Mark it as destroyed */
     
    36723689            else
    36733690            {
    3674                 POPUPMENU *menu = (POPUPMENU*)hSysMenu;
    3675                 if( IS_A_MENU(menu) )
     3691                POPUPMENU *menu = MENU_GetMenu(hSysMenu);
     3692                if(menu)
    36763693                {
    36773694                   if( menu->nItems > 0 && menu->items[0].hSubMenu == MENU_DefSysPopup )
     
    37013718            /* Store the dummy sysmenu handle to facilitate the refresh */
    37023719            /* 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)
    37053722               menu->hSysMenuOwner = hSysMenu;
    37063723        }
     
    37663783            LPPOPUPMENU lpmenu;
    37673784
    3768             if (!(lpmenu = (LPPOPUPMENU)hMenu))
     3785            if (!(lpmenu = MENU_GetMenu(hMenu)))
    37693786            {
    37703787                return FALSE;
     
    38113828    if (!(GetWindowLongA(hWnd,GWL_STYLE) & WS_CHILD) && getMenu(hWnd))
    38123829    {
    3813         lppop = (LPPOPUPMENU)getMenu(hWnd);
     3830        lppop = MENU_GetMenu(getMenu(hWnd));
    38143831        if (lppop == NULL)
    38153832        {
     
    40954112        menu->hSubMenu = lpmii->hSubMenu;
    40964113        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) {
    40994116                subMenu->wFlags |= MF_POPUP;
    41004117                menu->fType |= MF_POPUP;
     
    41584175        //TRACE("(0x%x,%d,%d)\n", hmenu, uItem, bypos);
    41594176
    4160         if (!(menu = (POPUPMENU*)hmenu)) return FALSE;
     4177        if (!(menu = MENU_GetMenu(hmenu))) return FALSE;
    41614178
    41624179        /* reset all default-item flags */
     
    42074224        //TRACE("(0x%x,%d,%d)\n", hmenu, bypos, flags);
    42084225
    4209         if (!(menu = (POPUPMENU*)hmenu)) return -1;
     4226        if (!(menu = MENU_GetMenu(hmenu))) return -1;
    42104227
    42114228        /* find default item */
     
    43264343     if(!hwnd)
    43274344     {
    4328          itemMenu = (POPUPMENU*)hMenu;
     4345         itemMenu = MENU_GetMenu(hMenu);
    43294346         if (itemMenu == NULL) {
    4330                 SetLastError(ERROR_INVALID_PARAMETER);
    4331                 return FALSE;
    4332         }
     4347                SetLastError(ERROR_INVALID_PARAMETER);
     4348                return FALSE;
     4349        }
    43334350
    43344351         if(itemMenu->hWnd == 0)
     
    43384355
    43394356     if ((rect == NULL) || (item == NULL)) {
    4340         SetLastError(ERROR_INVALID_PARAMETER);
     4357        SetLastError(ERROR_INVALID_PARAMETER);
    43414358        return FALSE;
    43424359     }
     
    43634380    //TRACE("(0x%04x %p)\n", hMenu, lpmi);
    43644381
    4365     if (lpmi && (lpmi->cbSize==sizeof(MENUINFO)) && (menu=(POPUPMENU*)hMenu))
     4382    if (lpmi && (lpmi->cbSize==sizeof(MENUINFO)) && (menu=MENU_GetMenu(hMenu)))
    43664383    {
    43674384
     
    43994416    //TRACE("(0x%04x %p)\n", hMenu, lpmi);
    44004417
    4401     if (lpmi && (menu = (POPUPMENU*)hMenu))
     4418    if (lpmi && (menu = MENU_GetMenu(hMenu)))
    44024419    {
    44034420
     
    44324449    //TRACE("(0x%04x 0x%08lx)\n", hMenu, dwContextHelpID);
    44334450
    4434     menu = (POPUPMENU*)hMenu;
     4451    menu = MENU_GetMenu(hMenu);
    44354452    if (menu)
    44364453    {
     
    44514468    //TRACE("(0x%04x)\n", hMenu);
    44524469
    4453     menu = (POPUPMENU*)hMenu;
     4470    menu = MENU_GetMenu(hMenu);
    44544471    if (menu)
    44554472    {
Note: See TracChangeset for help on using the changeset viewer.