- Timestamp:
- Oct 26, 1999, 1:14:52 PM (26 years ago)
- Location:
- trunk/src/user32
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/Makefile
r1446 r1453 1 # $Id: Makefile,v 1.3 6 1999-10-25 20:17:16sandervl Exp $1 # $Id: Makefile,v 1.37 1999-10-26 11:14:51 sandervl Exp $ 2 2 3 3 # … … 85 85 loadres.obj: loadres.cpp user32.h dib.h 86 86 icon.obj: icon.cpp $(PDWIN32_INCLUDE)\winicon.h 87 winmenu.obj: winmenu.cpp user32.h $(PDWIN32_INCLUDE)\winres.h $(PDWIN32_INCLUDE)\winresmenu.hwin32wbase.h winmenudef.h oslibwin.h oslibmenu.h87 winmenu.obj: winmenu.cpp user32.h $(PDWIN32_INCLUDE)\winres.h win32wbase.h winmenudef.h oslibwin.h oslibmenu.h 88 88 syscolor.obj: syscolor.cpp syscolor.h 89 89 dde.obj: dde.cpp -
trunk/src/user32/USER32.DEF
r1425 r1453 1 ; $Id: USER32.DEF,v 1.1 6 1999-10-23 23:04:32 sandervl Exp $1 ; $Id: USER32.DEF,v 1.17 1999-10-26 11:14:52 sandervl Exp $ 2 2 3 3 ;Created by BLAST for IBM's compiler … … 394 394 LoadKeyboardLayoutW = _LoadKeyboardLayoutW@8 @368 395 395 LoadMenuA = _LoadMenuA@8 @369 396 LoadMenuIndirectA = _LoadMenuIndirectA@4 @370 396 ;Menu resources are always in Unicode format 397 LoadMenuIndirectA = _LoadMenuIndirectW@4 @370 397 398 LoadMenuIndirectW = _LoadMenuIndirectW@4 @371 398 399 LoadMenuW = _LoadMenuW@8 @372 -
trunk/src/user32/winmenu.cpp
r1446 r1453 1 /* $Id: winmenu.cpp,v 1.1 0 1999-10-25 20:17:21sandervl Exp $ */1 /* $Id: winmenu.cpp,v 1.11 1999-10-26 11:14:52 sandervl Exp $ */ 2 2 3 3 /* … … 28 28 #include "oslibmenu.h" 29 29 #include "oslibwin.h" 30 #include <winresmenu.h>31 30 #include "winmenudef.h" 32 31 33 32 ODINDEBUGCHANNEL(USER32) 34 33 34 BOOL ODIN_INTERNAL ODIN_InsertMenuA(HMENU,UINT,UINT,UINT,LPCSTR); 35 BOOL ODIN_INTERNAL ODIN_InsertMenuW(HMENU,UINT,UINT,UINT,LPCWSTR); 36 BOOL ODIN_INTERNAL ODIN_InsertMenuItemA(HMENU,UINT,BOOL,const MENUITEMINFOA*); 37 BOOL ODIN_INTERNAL ODIN_InsertMenuItemW(HMENU,UINT,BOOL,const MENUITEMINFOW*); 38 BOOL ODIN_INTERNAL ODIN_AppendMenuA(HMENU,UINT,UINT,LPCSTR); 39 BOOL ODIN_INTERNAL ODIN_AppendMenuW(HMENU,UINT,UINT,LPCWSTR); 40 HMENU ODIN_INTERNAL ODIN_CreateMenu(void); 41 HMENU ODIN_INTERNAL ODIN_CreatePopupMenu(void); 42 BOOL ODIN_INTERNAL ODIN_DestroyMenu(HMENU); 43 44 45 //@@@PH: experiment with WINE LoadMenuIndirect code 46 #include <heapstring.h> 47 #define MENU_ITEM_TYPE(flags) \ 48 ((flags) & (MF_STRING | MF_BITMAP | MF_OWNERDRAW | MF_SEPARATOR)) 49 50 #define IS_STRING_ITEM(flags) (MENU_ITEM_TYPE ((flags)) == MF_STRING) 51 #define IS_BITMAP_ITEM(flags) (MENU_ITEM_TYPE ((flags)) == MF_BITMAP) 52 53 /********************************************************************** 54 * MENU_ParseResource 55 * 56 * Parse a standard menu resource and add items to the menu. 57 * Return a pointer to the end of the resource. 58 */ 59 static LPCSTR MENU_ParseResource( LPCSTR res, HMENU hMenu) 60 { 61 WORD flags, id = 0; 62 LPCSTR str; 63 64 do 65 { 66 flags = GET_WORD(res); 67 res += sizeof(WORD); 68 if (!(flags & MF_POPUP)) 69 { 70 id = GET_WORD(res); 71 res += sizeof(WORD); 72 } 73 if (!IS_STRING_ITEM(flags)) 74 dprintf(("USER32: WinMenu: MENU_ParseResource: not a string item %04x\n", flags )); 75 str = res; 76 77 res += (lstrlenW((LPCWSTR)str) + 1) * sizeof(WCHAR); 78 if (flags & MF_POPUP) 79 { 80 HMENU hSubMenu = ODIN_CreatePopupMenu(); 81 if (!hSubMenu) return NULL; 82 if (!(res = MENU_ParseResource( res, hSubMenu))) 83 return NULL; 84 ODIN_AppendMenuW( hMenu, flags, (UINT)hSubMenu, (LPCWSTR)str ); 85 } 86 else /* Not a popup */ 87 { 88 ODIN_AppendMenuW( hMenu, flags, id, *(LPCWSTR)str ? (LPCWSTR)str : NULL ); 89 } 90 } while (!(flags & MF_END)); 91 return res; 92 } 93 94 95 /********************************************************************** 96 * MENUEX_ParseResource 97 * 98 * Parse an extended menu resource and add items to the menu. 99 * Return a pointer to the end of the resource. 100 */ 101 static LPCSTR MENUEX_ParseResource( LPCSTR res, HMENU hMenu) 102 { 103 WORD resinfo; 104 105 do { 106 MENUITEMINFOW mii; 107 108 mii.cbSize = sizeof(mii); 109 mii.fMask = MIIM_STATE | MIIM_ID | MIIM_TYPE; 110 mii.fType = GET_DWORD(res); 111 res += sizeof(DWORD); 112 mii.fState = GET_DWORD(res); 113 res += sizeof(DWORD); 114 mii.wID = GET_DWORD(res); 115 res += sizeof(DWORD); 116 resinfo = GET_WORD(res); /* FIXME: for 16-bit apps this is a byte. */ 117 res += sizeof(WORD); 118 119 /* Align the text on a word boundary. */ 120 res += (~((int)res - 1)) & 1; 121 mii.dwTypeData = (LPWSTR) res; 122 res += (1 + lstrlenW(mii.dwTypeData)) * sizeof(WCHAR); 123 /* Align the following fields on a dword boundary. */ 124 res += (~((int)res - 1)) & 3; 125 126 /* FIXME: This is inefficient and cannot be optimised away by gcc. */ 127 { 128 LPSTR newstr = HEAP_strdupWtoA(GetProcessHeap(), 0, mii.dwTypeData); 129 130 dprintf(("USER32:WinMenu:MENUEX_ParseResource Menu item: [%08x,%08x,%04x,%04x,%s]\n", 131 mii.fType, mii.fState, mii.wID, resinfo, newstr)); 132 HeapFree( GetProcessHeap(), 0, newstr ); 133 } 134 135 if (resinfo & 1) { /* Pop-up? */ 136 /* DWORD helpid = GET_DWORD(res); FIXME: use this. */ 137 res += sizeof(DWORD); 138 mii.hSubMenu = ODIN_CreatePopupMenu(); 139 if (!mii.hSubMenu) 140 return NULL; 141 if (!(res = MENUEX_ParseResource(res, mii.hSubMenu))) { 142 DestroyMenu(mii.hSubMenu); 143 return NULL; 144 } 145 mii.fMask |= MIIM_SUBMENU; 146 mii.fType |= MF_POPUP; 147 } 148 ODIN_InsertMenuItemW(hMenu, -1, MF_BYPOSITION, &mii); 149 } 150 while (!(resinfo & MF_END)); 151 152 return res; 153 } 154 /********************************************************************** 155 * myLoadMenuIndirect 156 */ 157 HMENU myLoadMenuIndirect(LPCVOID pMenuTemplate) 158 { 159 HMENU hMenu; 160 WORD version, 161 offset; 162 LPCSTR p = (LPCSTR)pMenuTemplate; 163 164 version = GET_WORD(p); 165 p += sizeof(WORD); 166 167 switch (version) 168 { 169 case 0: 170 offset = GET_WORD(p); 171 p += sizeof(WORD) + offset; 172 if (!(hMenu = ODIN_CreateMenu())) 173 return 0; 174 if (!MENU_ParseResource( p, hMenu)) 175 { 176 DestroyMenu( hMenu ); 177 return 0; 178 } 179 return hMenu; 180 181 case 1: 182 offset = GET_WORD(p); 183 p += sizeof(WORD) + offset; 184 if (!(hMenu = ODIN_CreateMenu())) 185 return 0; 186 if (!MENUEX_ParseResource( p, hMenu)) 187 { 188 ODIN_DestroyMenu( hMenu ); 189 return 0; 190 } 191 return hMenu; 192 193 default: 194 dprintf(("USER32: LoadMenuIndirectA: version %d not supported.\n", version)); 195 return 0; 196 } 197 } 35 198 //****************************************************************************** 36 199 //****************************************************************************** … … 99 262 LPCSTR, lpszMenu) 100 263 { 101 Win32 MenuRes*winres;264 Win32Resource *winres; 102 265 HMENU hMenu; 103 266 104 winres = (Win32 MenuRes*)FindResourceA(hinst, lpszMenu, RT_MENUA);267 winres = (Win32Resource *)FindResourceA(hinst, lpszMenu, RT_MENUA); 105 268 if(winres) 106 269 { 107 hMenu = OSLibWinCreateMenu(winres->lockOS2Resource());270 hMenu = myLoadMenuIndirect((MENUITEMTEMPLATEHEADER *)winres->lockResource()); 108 271 if(hMenu) { 109 272 SetInternalMenuInfo(hMenu); … … 122 285 LPCWSTR, lpszMenu) 123 286 { 124 Win32 MenuRes*winres;287 Win32Resource *winres; 125 288 HMENU hMenu; 126 289 127 winres = (Win32 MenuRes*)FindResourceW(hinst, lpszMenu, RT_MENUW);290 winres = (Win32Resource *)FindResourceW(hinst, lpszMenu, RT_MENUW); 128 291 if(winres) { 129 hMenu = OSLibWinCreateMenu(winres->lockOS2Resource());292 hMenu = myLoadMenuIndirect((MENUITEMTEMPLATEHEADER *)winres->lockResource()); 130 293 if(hMenu) { 131 294 SetInternalMenuInfo(hMenu); … … 141 304 //NOTE: menutemplate strings are always in Unicode format 142 305 //****************************************************************************** 143 ODINFUNCTION1(HMENU, LoadMenuIndirect A,306 ODINFUNCTION1(HMENU, LoadMenuIndirectW, 144 307 const MENUITEMTEMPLATEHEADER *, menuTemplate) 145 308 { 146 Win32MenuRes *winres;147 309 HMENU hMenu; 148 310 149 winres = new Win32MenuRes((LPVOID)menuTemplate); 150 if(winres == NULL) 151 return 0; 152 153 hMenu = OSLibWinCreateMenu(winres->lockOS2Resource()); 311 hMenu = O32_LoadMenuIndirect(menuTemplate); 154 312 if(hMenu) { 155 313 SetInternalMenuInfo(hMenu); … … 157 315 else SetLastError(ERROR_INVALID_PARAMETER); 158 316 159 delete winres; 160 return (HMENU)winres; 161 } 162 //****************************************************************************** 163 //****************************************************************************** 164 ODINFUNCTION1(HMENU, LoadMenuIndirectW, 165 const MENUITEMTEMPLATEHEADER *, menuTemplate) 166 { 167 Win32MenuRes *winres; 168 HMENU hMenu; 169 170 winres = new Win32MenuRes((LPVOID)menuTemplate); 171 if(winres == NULL) 172 return 0; 173 174 hMenu = OSLibWinCreateMenu(winres->lockOS2Resource()); 175 if(hMenu) { 176 SetInternalMenuInfo(hMenu); 177 } 178 else SetLastError(ERROR_INVALID_PARAMETER); 179 180 delete winres; 181 return (HMENU)winres; 317 return (HMENU)hMenu; 182 318 } 183 319 //****************************************************************************** … … 305 441 int rc; 306 442 307 if(hMenu == 0) 308 { 309 SetLastError(ERROR_INVALID_PARAMETER); 310 return 0; 311 } 312 313 rc = O32_GetMenuString(hMenu, idItem, astring, cchMax, fuFlags); 443 rc = ODIN_GetMenuStringA(hMenu, idItem, astring, cchMax, fuFlags); 314 444 free(astring); 315 445 if(rc) … … 444 574 HMENU, hMenu, 445 575 UINT, uFlags, 446 UINT, ulDNewItem,576 UINT, id, 447 577 LPCSTR, lpNewItem) 448 578 { 449 BOOL rc; 450 451 dprintf(("USER32: OS2AppendMenuA uFlags = %X\n", uFlags)); 452 453 if(uFlags & MF_STRING || uFlags == 0) 454 dprintf(("USER32: OS2AppendMenuA %s\n", lpNewItem)); 455 456 if(hMenu == 0) 457 { 458 SetLastError(ERROR_INVALID_PARAMETER); 459 return 0; 460 } 461 rc = O32_AppendMenu(hMenu, uFlags, ulDNewItem, lpNewItem); 462 dprintf(("USER32: AppendMenuA returned %d\n", rc)); 463 return rc; 579 return ODIN_InsertMenuA( hMenu, -1, uFlags | MF_BYPOSITION, id, lpNewItem ); 464 580 } 465 581 //****************************************************************************** … … 467 583 ODINFUNCTION4(BOOL, AppendMenuW, 468 584 HMENU, hMenu, 469 UINT, arg2, 470 UINT, arg3, 471 LPCWSTR, arg4) 472 { 473 BOOL rc; 474 char *astring = NULL; 475 476 dprintf(("USER32: OS2AppendMenuW\n")); 477 478 if(arg2 & MF_STRING && (int)arg4 >> 16 != 0) 479 astring = UnicodeToAsciiString((LPWSTR)arg4); 480 else 481 astring = (char *) arg4; 482 483 if(hMenu == 0) 484 { 485 SetLastError(ERROR_INVALID_PARAMETER); 486 return 0; 487 } 488 rc = O32_AppendMenu(hMenu, arg2, arg3, astring); 489 if(arg2 & MF_STRING && (int)arg4 >> 16 != 0) 490 FreeAsciiString(astring); 491 return(rc); 585 UINT, uFlags, 586 UINT, id, 587 LPCWSTR, lpNewItem) 588 { 589 return ODIN_InsertMenuW( hMenu, -1, uFlags | MF_BYPOSITION, id, lpNewItem ); 492 590 } 493 591 //****************************************************************************** … … 551 649 char *astring = NULL; 552 650 553 dprintf(("USER32: OS2ModifyMenuW %s\n", astring)); 554 555 if(hMenu == 0) 556 { 557 SetLastError(ERROR_INVALID_PARAMETER); 558 return 0; 559 } 560 561 if(arg3 & MF_STRING && (int)arg5 >> 16 != 0) 651 if(hMenu == 0) 652 { 653 SetLastError(ERROR_INVALID_PARAMETER); 654 return 0; 655 } 656 657 if(HIWORD(arg5) != 0) 562 658 astring = UnicodeToAsciiString((LPWSTR)arg5); 563 659 else 564 660 astring = (char *) arg5; 565 661 566 rc = O 32_ModifyMenu(hMenu, arg2, arg3, arg4, astring);567 if( arg3 & MF_STRING && (int)arg5 >> 16!= 0)662 rc = ODIN_ModifyMenuA(hMenu, arg2, arg3, arg4, astring); 663 if(HIWORD(arg5) != 0) 568 664 FreeAsciiString(astring); 665 569 666 return(rc); 570 667 } … … 622 719 ODINFUNCTION5(BOOL, InsertMenuA, 623 720 HMENU, hMenu, 624 UINT, arg2, 625 UINT, arg3, 626 UINT, arg4, 627 LPCSTR, arg5) 628 { 629 dprintf(("USER32: OS2InsertMenuA\n")); 630 if(hMenu == 0) 631 { 632 SetLastError(ERROR_INVALID_PARAMETER); 633 return 0; 634 } 635 636 return O32_InsertMenu(hMenu, arg2, arg3, arg4, arg5); 721 UINT, pos, 722 UINT, flags, 723 UINT, id, 724 LPCSTR, str) 725 { 726 dprintf(("USER32: InsertMenuA %x %d %x %d %s", hMenu, pos, flags, id, str)); 727 if(hMenu == 0) 728 { 729 SetLastError(ERROR_INVALID_PARAMETER); 730 return 0; 731 } 732 733 if(!str || *str == NULL) { 734 flags |= MF_SEPARATOR; 735 } 736 return O32_InsertMenu(hMenu, pos, flags, id, str); 637 737 } 638 738 //****************************************************************************** … … 648 748 char *astring = NULL; 649 749 650 dprintf(("USER32: OS2InsertMenuW %s\n", astring)); 651 652 if(arg3 & MF_STRING && (int)arg5 >> 16 != 0) 750 if(HIWORD(arg5) != 0) 653 751 astring = UnicodeToAsciiString((LPWSTR)arg5); 654 752 else 655 753 astring = (char *) arg5; 656 754 657 rc = O32_InsertMenu(hMenu, arg2, arg3, arg4, astring); 658 if(arg3 & MF_STRING && (int)arg5 >> 16 != 0) 755 rc = ODIN_InsertMenuA(hMenu, arg2, arg3, arg4, astring); 756 757 if(HIWORD(arg5) != 0) 659 758 FreeAsciiString(astring); 759 660 760 return(rc); 661 761 } … … 717 817 dprintf(("USER32: ChangeMenuA flags %X\n", flags)); 718 818 719 if (flags & MF_APPEND) return AppendMenuA(hMenu, flags & ~MF_APPEND,720 id, data );721 if (flags & MF_DELETE) return DeleteMenu(hMenu, pos, flags & ~MF_DELETE);722 if (flags & MF_CHANGE) return ModifyMenuA(hMenu, pos, flags & ~MF_CHANGE,723 id, data );724 if (flags & MF_REMOVE) return RemoveMenu(hMenu,725 flags & MF_BYPOSITION ? pos : id,726 flags & ~MF_REMOVE );819 if (flags & MF_APPEND) return ODIN_AppendMenuA(hMenu, flags & ~MF_APPEND, 820 id, data ); 821 if (flags & MF_DELETE) return ODIN_DeleteMenu(hMenu, pos, flags & ~MF_DELETE); 822 if (flags & MF_CHANGE) return ODIN_ModifyMenuA(hMenu, pos, flags & ~MF_CHANGE, 823 id, data ); 824 if (flags & MF_REMOVE) return ODIN_RemoveMenu(hMenu, 825 flags & MF_BYPOSITION ? pos : id, 826 flags & ~MF_REMOVE ); 727 827 /* Default: MF_INSERT */ 728 828 return InsertMenuA( hMenu, pos, flags, id, data ); … … 739 839 dprintf(("USER32: ChangeMenuW flags %X\n", flags)); 740 840 741 if (flags & MF_APPEND) return AppendMenuW(hMenu, flags & ~MF_APPEND,742 id, data );743 if (flags & MF_DELETE) return DeleteMenu(hMenu, pos, flags & ~MF_DELETE);744 if (flags & MF_CHANGE) return ModifyMenuW(hMenu, pos, flags & ~MF_CHANGE,745 id, data );746 if (flags & MF_REMOVE) return RemoveMenu(hMenu,747 flags & MF_BYPOSITION ? pos : id,748 flags & ~MF_REMOVE );841 if (flags & MF_APPEND) return ODIN_AppendMenuW(hMenu, flags & ~MF_APPEND, 842 id, data ); 843 if (flags & MF_DELETE) return ODIN_DeleteMenu(hMenu, pos, flags & ~MF_DELETE); 844 if (flags & MF_CHANGE) return ODIN_ModifyMenuW(hMenu, pos, flags & ~MF_CHANGE, 845 id, data ); 846 if (flags & MF_REMOVE) return ODIN_RemoveMenu(hMenu, 847 flags & MF_BYPOSITION ? pos : id, 848 flags & ~MF_REMOVE ); 749 849 /* Default: MF_INSERT */ 750 850 return InsertMenuW(hMenu, pos, flags, id, data); … … 761 861 762 862 if (!hMenu) { 763 SetLastError(ERROR_INVALID_PARAMETER);764 return FALSE;863 SetLastError(ERROR_INVALID_PARAMETER); 864 return FALSE; 765 865 } 766 866 return TRUE; … … 841 941 uItem = GetMenuItemID(hMenu, uItem); 842 942 } 843 if( GetMenuState(hMenu, uItem, MF_BYCOMMAND) == -1) {943 if(ODIN_GetMenuState(hMenu, uItem, MF_BYCOMMAND) == -1) { 844 944 //item doesn't exist 845 945 dprintf(("USER32: GetMenuItemInfoAW %x item %d doesn't exist", hMenu, uItem)); … … 849 949 if (lpmii->fMask & MIIM_TYPE) 850 950 { 851 lpmii->fType = GetMenuState(hMenu, uItem, MF_BYCOMMAND); //not correct852 // 853 854 lpmii->cch =GetMenuStringW(hMenu, uItem, (LPWSTR)lpmii->dwTypeData, lpmii->cch, MF_BYCOMMAND);855 856 857 lpmii->cch =GetMenuStringA(hMenu, uItem, (LPSTR)lpmii->dwTypeData, lpmii->cch, MF_BYCOMMAND);858 859 //TODO: 860 #if 0 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 951 lpmii->fType = ODIN_GetMenuState(hMenu, uItem, MF_BYCOMMAND); //not correct 952 // lpmii->fType = menu->fType; 953 if (unicode) { 954 lpmii->cch = ODIN_GetMenuStringW(hMenu, uItem, (LPWSTR)lpmii->dwTypeData, lpmii->cch, MF_BYCOMMAND); 955 } 956 else { 957 lpmii->cch = ODIN_GetMenuStringA(hMenu, uItem, (LPSTR)lpmii->dwTypeData, lpmii->cch, MF_BYCOMMAND); 958 } 959 //TODO: 960 #if 0 961 switch (MENU_ITEM_TYPE(menu->fType)) { 962 case MF_STRING: 963 if (menu->text && lpmii->dwTypeData && lpmii->cch) { 964 if (unicode) { 965 lstrcpynAtoW((LPWSTR) lpmii->dwTypeData, menu->text, lpmii->cch); 966 lpmii->cch = lstrlenW((LPWSTR)menu->text); 967 } 968 else { 969 lstrcpynA(lpmii->dwTypeData, menu->text, lpmii->cch); 970 lpmii->cch = lstrlenA(menu->text); 971 } 972 } 973 break; 974 case MF_OWNERDRAW: 975 case MF_BITMAP: 976 lpmii->dwTypeData = menu->text; 977 /* fall through */ 978 default: 979 lpmii->cch = 0; 980 } 881 981 #endif 882 982 } 883 983 884 984 if (lpmii->fMask & MIIM_STRING) { 885 886 lpmii->cch =GetMenuStringW(hMenu, uItem, (LPWSTR)lpmii->dwTypeData, lpmii->cch, MF_BYCOMMAND);887 888 889 lpmii->cch =GetMenuStringA(hMenu, uItem, (LPSTR)lpmii->dwTypeData, lpmii->cch, MF_BYCOMMAND);890 985 if (unicode) { 986 lpmii->cch = ODIN_GetMenuStringW(hMenu, uItem, (LPWSTR)lpmii->dwTypeData, lpmii->cch, MF_BYCOMMAND); 987 } 988 else { 989 lpmii->cch = ODIN_GetMenuStringA(hMenu, uItem, (LPSTR)lpmii->dwTypeData, lpmii->cch, MF_BYCOMMAND); 990 } 891 991 } 892 992 … … 894 994 #if 0 895 995 if (lpmii->fMask & MIIM_FTYPE) 896 996 lpmii->fType = menu->fType; 897 997 898 998 if (lpmii->fMask & MIIM_BITMAP) 899 999 lpmii->hbmpItem = menu->hbmpItem; 900 1000 #endif 901 1001 902 1002 if (lpmii->fMask & MIIM_STATE) 903 lpmii->fState =GetMenuState(hMenu, uItem, MF_BYCOMMAND);1003 lpmii->fState = ODIN_GetMenuState(hMenu, uItem, MF_BYCOMMAND); 904 1004 905 1005 if (lpmii->fMask & MIIM_ID) 906 1006 lpmii->wID = uItem; 907 1007 908 1008 //TODO: … … 914 1014 #else 915 1015 if (lpmii->fMask & MIIM_SUBMENU) 916 lpmii->hSubMenu =GetSubMenu(hMenu, uItem); //need index, not id1016 lpmii->hSubMenu = ODIN_GetSubMenu(hMenu, uItem); //need index, not id 917 1017 918 1018 if (lpmii->fMask & MIIM_CHECKMARKS) { 919 920 1019 lpmii->hbmpChecked = menu->hCheckBit; 1020 lpmii->hbmpUnchecked = menu->hUnCheckBit; 921 1021 } 922 1022 if (lpmii->fMask & MIIM_DATA) 923 1023 lpmii->dwItemData = menu->dwItemData; 924 1024 #endif 925 1025 … … 1008 1108 const MENUITEMINFOA*, lpmii) 1009 1109 { 1010 dprintf(("USER32:InsertMenuItemA (%08xh,%08xh,%u,%08x) notimplemented.\n",1110 dprintf(("USER32:InsertMenuItemA (%08xh,%08xh,%u,%08x) not correctly implemented.\n", 1011 1111 hMenu, 1012 1112 uItem, … … 1014 1114 lpmii)); 1015 1115 1016 return (FALSE); 1116 if(fByPosition) { 1117 return ODIN_InsertMenuA(hMenu, uItem, lpmii->fType | MF_BYPOSITION, (lpmii->fType & MF_POPUP) ? lpmii->hSubMenu : lpmii->wID, lpmii->dwTypeData); 1118 } 1119 else return ODIN_InsertMenuA(hMenu, uItem, lpmii->fType | MF_BYCOMMAND, (lpmii->fType & MF_POPUP) ? lpmii->hSubMenu : lpmii->wID, lpmii->dwTypeData); 1017 1120 } 1018 1121 … … 1039 1142 const MENUITEMINFOW *, lpmii) 1040 1143 { 1041 dprintf(("USER32:InsertMenuItemW (%08xh,%08xh,%u,%08x) notimplemented.\n",1144 dprintf(("USER32:InsertMenuItemW (%08xh,%08xh,%u,%08x) not correctly implemented.\n", 1042 1145 hMenu, 1043 1146 uItem, … … 1045 1148 lpmii)); 1046 1149 1047 return (FALSE); 1150 if(fByPosition) { 1151 return ODIN_InsertMenuW(hMenu, uItem, lpmii->fType | MF_BYPOSITION, (lpmii->fType & MF_POPUP) ? lpmii->hSubMenu : lpmii->wID, lpmii->dwTypeData); 1152 } 1153 else return ODIN_InsertMenuW(hMenu, uItem, lpmii->fType | MF_BYCOMMAND, (lpmii->fType & MF_POPUP) ? lpmii->hSubMenu : lpmii->wID, lpmii->dwTypeData); 1048 1154 } 1049 1155 /*****************************************************************************
Note:
See TracChangeset
for help on using the changeset viewer.