All 19 FileMenu_* functions, some as stubs, some implemented.

This commit is contained in:
Juergen Schmied 1999-04-01 10:24:21 +00:00 committed by Alexandre Julliard
parent b18f3d6ff3
commit 7c6cc49c60
7 changed files with 639 additions and 31 deletions

View File

@ -19,6 +19,7 @@ C_SRCS = \
shell32_main.c \
shellguid.c \
shelllink.c \
shlmenu.c \
shellole.c \
shellord.c \
shellpath.c \

View File

@ -116,13 +116,13 @@ static void FillTreeView(IShellFolder * lpsf, LPITEMIDLIST pidl, HTREEITEM hPar
hr=IShellFolder_EnumObjects(lpsf,hwnd, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS,&lpe);
if (SUCCEEDED(hr))
{ while (NOERROR == lpe->lpvtbl->fnNext(lpe,1,&pidlTemp,&ulFetched))
{ ULONG ulAttrs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER;
IShellFolder_GetAttributesOf(lpsf, 1, &pidlTemp, &ulAttrs);
if (ulAttrs & (SFGAO_HASSUBFOLDER | SFGAO_FOLDER))
{ if (ulAttrs & SFGAO_FOLDER)
{ tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
if (SUCCEEDED(hr))
{ while (NOERROR == IEnumIDList_Next(lpe,1,&pidlTemp,&ulFetched))
{ ULONG ulAttrs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER;
IShellFolder_GetAttributesOf(lpsf, 1, &pidlTemp, &ulAttrs);
if (ulAttrs & (SFGAO_HASSUBFOLDER | SFGAO_FOLDER))
{ if (ulAttrs & SFGAO_FOLDER)
{ tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
if (ulAttrs & SFGAO_HASSUBFOLDER)
{ tvi.cChildren=1;

View File

@ -50,6 +50,7 @@ void pdump (LPCITEMIDLIST pidl)
else
TRACE(pidl,"empty pidl (Desktop)\n");
}
/*************************************************************************
* ILGetDisplayName [SHELL32.15]
*/

View File

@ -562,7 +562,7 @@ static HRESULT WINAPI IShellLink_fnGetHotkey(IShellLink * iface, WORD *pwHotkey)
{
ICOM_THIS(IShellLinkImpl, iface);
FIXME(shell,"(%p)->(%p)\n",This, pwHotkey);
FIXME(shell,"(%p)->(%p) returning 0\n",This, pwHotkey);
*pwHotkey=0x0;
return NOERROR;
}

558
dlls/shell32/shlmenu.c Normal file
View File

@ -0,0 +1,558 @@
/*
*
*/
#include <string.h>
#include "wine/obj_base.h"
#include "wine/obj_enumidlist.h"
#include "wine/obj_shellfolder.h"
#include "heap.h"
#include "debug.h"
#include "winversion.h"
#include "shell32_main.h"
#include "pidl.h"
BOOL WINAPI FileMenu_DeleteAllItems (HMENU hMenu);
/*************************************************************************
* FileMenu_Create [SHELL32.114]
*
*/
HMENU WINAPI FileMenu_Create (
COLORREF crBorderColor,
int nBorderWidth,
HBITMAP hBorderBmp,
int nSelHeight,
UINT uFlags)
{
HMENU ret = CreatePopupMenu();
FIXME(shell,"0x%08lx 0x%08x 0x%08x 0x%08x 0x%08x ret=0x%08x\n",
crBorderColor, nBorderWidth, hBorderBmp, nSelHeight, uFlags, ret);
return ret;
}
/*************************************************************************
* FileMenu_Destroy [SHELL32.118]
*
* NOTES
* exported by name
*/
void WINAPI FileMenu_Destroy (HMENU hMenu)
{
TRACE(shell,"0x%08x\n", hMenu);
FileMenu_DeleteAllItems (hMenu);
DestroyMenu (hMenu);
}
/*************************************************************************
* FileMenu_AppendItemAW [SHELL32.115]
*
*/
BOOL WINAPI FileMenu_AppendItemAW(
HMENU hMenu,
LPCVOID lpText,
UINT uID,
int icon,
HMENU hMenuPopup,
int nItemHeight)
{
LPSTR lpszText = (LPSTR)lpText;
MENUITEMINFOA mii;
ZeroMemory (&mii, sizeof(MENUITEMINFOA));
if (VERSION_OsIsUnicode() && (lpszText!=FM_SEPARATOR))
lpszText = HEAP_strdupWtoA ( GetProcessHeap(),0, lpText);
FIXME(shell,"0x%08x %s 0x%08x 0x%08x 0x%08x 0x%08x\n",
hMenu, (lpszText!=FM_SEPARATOR) ? lpszText: NULL,
uID, icon, hMenuPopup, nItemHeight);
mii.cbSize = sizeof(mii);
if ( hMenuPopup )
{ /* sub menu */
mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_DATA;;
mii.hSubMenu = hMenuPopup;
mii.fType = MFT_STRING;
mii.dwTypeData = lpszText;
}
else if (lpText == FM_SEPARATOR )
{ mii.fMask = MIIM_ID | MIIM_TYPE;
mii.fType = MFT_SEPARATOR;
}
else
{ /* normal item */
mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE;
mii.dwTypeData = lpszText;
mii.fState = MFS_ENABLED | MFS_DEFAULT;
mii.fType = MFT_STRING;
}
mii.wID = uID;
InsertMenuItemA (hMenu, (UINT)-1, TRUE, &mii);
if (VERSION_OsIsUnicode())
HeapFree( GetProcessHeap(), 0, lpszText );
return TRUE;
}
/*************************************************************************
* FileMenu_InsertUsingPidl [SHELL32.110]
*
* NOTES
* uEnumFlags any SHCONTF flag
*/
int WINAPI FileMenu_InsertUsingPidl (
HMENU hMenu,
UINT uID,
LPCITEMIDLIST pidl,
UINT uFlags,
UINT uEnumFlags,
LPFNFMCALLBACK lpfnCallback)
{
IShellFolder *lpsf, *lpsf2;
IEnumIDList *lpe=0;
ULONG ulFetched;
LPITEMIDLIST pidlTemp=0;
ULONG ulItemAttr;
char sTemp[MAX_PATH];
int NumberOfItems = 0;
FIXME(shell,"0x%08x 0x%08x %p 0x%08x 0x%08x %p\n",
hMenu, uID, pidl, uFlags, uEnumFlags, lpfnCallback);
pdump (pidl);
if (SUCCEEDED (SHGetDesktopFolder(&lpsf)))
{ if (SUCCEEDED(IShellFolder_BindToObject(lpsf, pidl,0,(REFIID)&IID_IShellFolder,(LPVOID *)&lpsf2)))
{ if (SUCCEEDED (IShellFolder_EnumObjects(lpsf2, 0, uEnumFlags, &lpe )))
{ while (NOERROR == IEnumIDList_Next(lpe,1,&pidlTemp,&ulFetched))
{ if (SUCCEEDED (IShellFolder_GetAttributesOf(lpsf, 1, &pidlTemp, &ulItemAttr)))
{ ILGetDisplayName( pidlTemp, sTemp);
if ( SFGAO_FOLDER & ulItemAttr)
{ FileMenu_AppendItemAW (hMenu, sTemp, uID, FM_BLANK_ICON, CreatePopupMenu(), FM_DEFAULT_HEIGHT);
}
else
{ FileMenu_AppendItemAW (hMenu, sTemp, uID, FM_BLANK_ICON, 0, FM_DEFAULT_HEIGHT);
}
}
TRACE(shell,"enter callback\n");
lpfnCallback ( pidl, pidlTemp);
TRACE(shell,"leave callback\n");
NumberOfItems++;
}
IEnumIDList_Release (lpe);
}
IShellFolder_Release(lpsf2);
}
IShellFolder_Release(lpsf);
}
return NumberOfItems;
}
/*************************************************************************
* FileMenu_ReplaceUsingPidl [SHELL32.113]
*
*/
int WINAPI FileMenu_ReplaceUsingPidl(
HMENU hMenu,
UINT uID,
LPCITEMIDLIST pidl,
UINT uEnumFlags,
LPFNFMCALLBACK lpfnCallback)
{
FIXME(shell,"0x%08x 0x%08x %p 0x%08x %p\n",
hMenu, uID, pidl, uEnumFlags, lpfnCallback);
return 0;
}
/*************************************************************************
* FileMenu_Invalidate [SHELL32.111]
*/
void WINAPI FileMenu_Invalidate (HMENU hMenu)
{
FIXME(shell,"0x%08x\n",hMenu);
}
/*************************************************************************
* FileMenu_FindSubMenuByPidl [SHELL32.106]
*/
HMENU WINAPI FileMenu_FindSubMenuByPidl(
HMENU hMenu,
LPCITEMIDLIST pidl)
{
FIXME(shell,"0x%08x %p\n",hMenu, pidl);
return 0;
}
/*************************************************************************
* FileMenu_AppendFilesForPidl [SHELL32.124]
*/
HMENU WINAPI FileMenu_AppendFilesForPidl(
HMENU hMenu,
LPCITEMIDLIST pidl,
BOOL bAddSeperator)
{
FIXME(shell,"0x%08x %p 0x%08x\n",hMenu, pidl,bAddSeperator);
return 0;
}
/*************************************************************************
* FileMenu_AddFilesForPidl [SHELL32.125]
*
* NOTES
* uEnumFlags any SHCONTF flag
*/
int WINAPI FileMenu_AddFilesForPidl (
HMENU hMenu,
UINT uReserved,
UINT uID,
LPCITEMIDLIST pidl,
UINT uFlags,
UINT uEnumFlags,
LPFNFMCALLBACK lpfnCallback)
{
FIXME(shell,"0x%08x 0x%08x 0x%08x %p 0x%08x 0x%08x %p\n",
hMenu, uReserved, uID, pidl, uFlags, uEnumFlags, lpfnCallback);
pdump (pidl);
return 0;
}
/*************************************************************************
* FileMenu_TrackPopupMenuEx [SHELL32.116]
*/
HRESULT WINAPI FileMenu_TrackPopupMenuEx (
HMENU hMenu,
UINT uFlags,
int x,
int y,
HWND hWnd,
LPTPMPARAMS lptpm)
{
FIXME(shell,"0x%08x 0x%08x 0x%x 0x%x 0x%08x %p stub\n",
hMenu, uFlags, x, y, hWnd, lptpm);
return TrackPopupMenuEx(hMenu, uFlags, x, y, hWnd, lptpm);
}
/*************************************************************************
* FileMenu_GetLastSelectedItemPidls [SHELL32.107]
*/
BOOL WINAPI FileMenu_GetLastSelectedItemPidls(
UINT uReserved,
LPCITEMIDLIST *ppidlFolder,
LPCITEMIDLIST *ppidlItem)
{
FIXME(shell,"0x%08x %p %p\n",uReserved, ppidlFolder, ppidlItem);
return 0;
}
/*************************************************************************
* FileMenu_MeasureItem [SHELL32.112]
*/
LRESULT WINAPI FileMenu_MeasureItem(
HWND hWnd,
LPMEASUREITEMSTRUCT lpmis)
{
FIXME(shell,"0x%08x %p\n", hWnd, lpmis);
return 0;
}
/*************************************************************************
* FileMenu_DrawItem [SHELL32.105]
*/
LRESULT WINAPI FileMenu_DrawItem(
HWND hWnd,
LPDRAWITEMSTRUCT lpdis)
{
FIXME(shell,"0x%08x %p\n", hWnd, lpdis);
return 0;
}
/*************************************************************************
* FileMenu_InitMenuPopup [SHELL32.109]
*
* NOTES
* The filemenu is a ownerdrawn menu. Call this function responding to
* WM_INITPOPUPMENU
*
*/
HRESULT WINAPI FileMenu_InitMenuPopup (DWORD hmenu)
{ FIXME(shell,"hmenu=0x%lx stub\n",hmenu);
return 0;
}
/*************************************************************************
* FileMenu_HandleMenuChar [SHELL32.108]
*/
LRESULT WINAPI FileMenu_HandleMenuChar(
HMENU hMenu,
WPARAM wParam)
{
FIXME(shell,"0x%08x 0x%08x\n",hMenu,wParam);
return 0;
}
/*************************************************************************
* FileMenu_DeleteAllItems [SHELL32.104]
*
* NOTES
* exported by name
*/
BOOL WINAPI FileMenu_DeleteAllItems (HMENU hMenu)
{
FIXME(shell,"0x%08x stub\n", hMenu);
DestroyMenu (hMenu);
return TRUE;
}
/*************************************************************************
* FileMenu_DeleteItemByCmd [SHELL32.]
*
*/
BOOL WINAPI FileMenu_DeleteItemByCmd (HMENU hMenu, UINT uID)
{
TRACE(shell,"0x%08x 0x%08x\n", hMenu, uID);
DeleteMenu(hMenu, MF_BYCOMMAND, uID);
return TRUE;
}
/*************************************************************************
* FileMenu_DeleteItemByIndex [SHELL32.140]
*/
BOOL WINAPI FileMenu_DeleteItemByIndex ( HMENU hMenu, UINT uPos)
{
TRACE(shell,"0x%08x 0x%08x\n", hMenu, uPos);
DeleteMenu(hMenu, MF_BYPOSITION, uPos);
return TRUE;
}
/*************************************************************************
* FileMenu_DeleteItemByFirstID [SHELL32.141]
*/
BOOL WINAPI FileMenu_DeleteItemByFirstID(
HMENU hMenu,
UINT uID)
{
TRACE(shell,"0x%08x 0x%08x\n", hMenu, uID);
return 0;
}
/*************************************************************************
* FileMenu_DeleteSeparator [SHELL32.142]
*/
BOOL WINAPI FileMenu_DeleteSeparator(HMENU hMenu)
{
TRACE(shell,"0x%08x\n", hMenu);
return 0;
}
/*************************************************************************
* FileMenu_EnableItemByCmd [SHELL32.143]
*/
BOOL WINAPI FileMenu_EnableItemByCmd(
HMENU hMenu,
UINT uID,
BOOL bEnable)
{
TRACE(shell,"0x%08x 0x%08x 0x%08x\n", hMenu, uID,bEnable);
return 0;
}
/*************************************************************************
* FileMenu_GetItemExtent [SHELL32.144]
*
*/
DWORD WINAPI FileMenu_GetItemExtent (HMENU hMenu, UINT uPos)
{ RECT rect;
FIXME (shell,"0x%08x 0x%08x\n", hMenu, uPos);
if (GetMenuItemRect(0, hMenu, uPos, &rect))
{ FIXME (shell,"0x%04x 0x%04x 0x%04x 0x%04x\n",
rect.right, rect.left, rect.top, rect.bottom);
return ((rect.right-rect.left)<<16) + (rect.top-rect.bottom);
}
return 0x00200020; /*fixme*/
}
/*************************************************************************
* FileMenu_AbortInitMenu [SHELL32.120]
*
*/
void WINAPI FileMenu_AbortInitMenu (void)
{ TRACE(shell,"\n");
}
/*************************************************************************
* SHFind_InitMenuPopup [SHELL32.149]
*
*
* PARAMETERS
* hMenu [in] handel of menu previously created
* hWndParent [in] parent window
* w [in] no pointer
* x [in] no pointer
*/
HRESULT WINAPI SHFind_InitMenuPopup (HMENU hMenu, HWND hWndParent, DWORD w, DWORD x)
{ FIXME(shell,"hmenu=0x%08x hwnd=0x%08x 0x%08lx 0x%08lx stub\n",
hMenu,hWndParent,w,x);
return TRUE;
}
/*************************************************************************
* Shell_MergeMenus [SHELL32.67]
*
*/
BOOL _SHIsMenuSeparator(HMENU hm, int i)
{
MENUITEMINFOA mii;
mii.cbSize = sizeof(MENUITEMINFOA);
mii.fMask = MIIM_TYPE;
mii.cch = 0; /* WARNING: We MUST initialize it to 0*/
if (!GetMenuItemInfoA(hm, i, TRUE, &mii))
{ return(FALSE);
}
if (mii.fType & MFT_SEPARATOR)
{ return(TRUE);
}
return(FALSE);
}
#define MM_ADDSEPARATOR 0x00000001L
#define MM_SUBMENUSHAVEIDS 0x00000002L
HRESULT WINAPI Shell_MergeMenus (HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uIDAdjust, UINT uIDAdjustMax, ULONG uFlags)
{ int nItem;
HMENU hmSubMenu;
BOOL bAlreadySeparated;
MENUITEMINFOA miiSrc;
char szName[256];
UINT uTemp, uIDMax = uIDAdjust;
FIXME(shell,"hmenu1=0x%04x hmenu2=0x%04x 0x%04x 0x%04x 0x%04x 0x%04lx stub\n",
hmDst, hmSrc, uInsert, uIDAdjust, uIDAdjustMax, uFlags);
if (!hmDst || !hmSrc)
{ return uIDMax;
}
nItem = GetMenuItemCount(hmDst);
if (uInsert >= (UINT)nItem)
{ uInsert = (UINT)nItem;
bAlreadySeparated = TRUE;
}
else
{ bAlreadySeparated = _SHIsMenuSeparator(hmDst, uInsert);;
}
if ((uFlags & MM_ADDSEPARATOR) && !bAlreadySeparated)
{ /* Add a separator between the menus */
InsertMenuA(hmDst, uInsert, MF_BYPOSITION | MF_SEPARATOR, 0, NULL);
bAlreadySeparated = TRUE;
}
/* Go through the menu items and clone them*/
for (nItem = GetMenuItemCount(hmSrc) - 1; nItem >= 0; nItem--)
{ miiSrc.cbSize = sizeof(MENUITEMINFOA);
miiSrc.fMask = MIIM_STATE | MIIM_ID | MIIM_SUBMENU | MIIM_CHECKMARKS | MIIM_TYPE | MIIM_DATA;
/* We need to reset this every time through the loop in case
menus DON'T have IDs*/
miiSrc.fType = MFT_STRING;
miiSrc.dwTypeData = szName;
miiSrc.dwItemData = 0;
miiSrc.cch = sizeof(szName);
if (!GetMenuItemInfoA(hmSrc, nItem, TRUE, &miiSrc))
{ continue;
}
if (miiSrc.fType & MFT_SEPARATOR)
{ /* This is a separator; don't put two of them in a row*/
if (bAlreadySeparated)
{ continue;
}
bAlreadySeparated = TRUE;
}
else if (miiSrc.hSubMenu)
{ if (uFlags & MM_SUBMENUSHAVEIDS)
{ /* Adjust the ID and check it*/
miiSrc.wID += uIDAdjust;
if (miiSrc.wID > uIDAdjustMax)
{ continue;
}
if (uIDMax <= miiSrc.wID)
{ uIDMax = miiSrc.wID + 1;
}
}
else
{ /* Don't set IDs for submenus that didn't have them already */
miiSrc.fMask &= ~MIIM_ID;
}
hmSubMenu = miiSrc.hSubMenu;
miiSrc.hSubMenu = CreatePopupMenu();
if (!miiSrc.hSubMenu)
{ return(uIDMax);
}
uTemp = Shell_MergeMenus(miiSrc.hSubMenu, hmSubMenu, 0, uIDAdjust, uIDAdjustMax, uFlags&MM_SUBMENUSHAVEIDS);
if (uIDMax <= uTemp)
{ uIDMax = uTemp;
}
bAlreadySeparated = FALSE;
}
else
{ /* Adjust the ID and check it*/
miiSrc.wID += uIDAdjust;
if (miiSrc.wID > uIDAdjustMax)
{ continue;
}
if (uIDMax <= miiSrc.wID)
{ uIDMax = miiSrc.wID + 1;
}
bAlreadySeparated = FALSE;
}
if (!InsertMenuItemA(hmDst, uInsert, TRUE, &miiSrc))
{ return(uIDMax);
}
}
/* Ensure the correct number of separators at the beginning of the
inserted menu items*/
if (uInsert == 0)
{ if (bAlreadySeparated)
{ DeleteMenu(hmDst, uInsert, MF_BYPOSITION);
}
}
else
{ if (_SHIsMenuSeparator(hmDst, uInsert-1))
{ if (bAlreadySeparated)
{ DeleteMenu(hmDst, uInsert, MF_BYPOSITION);
}
}
else
{ if ((uFlags & MM_ADDSEPARATOR) && !bAlreadySeparated)
{ /* Add a separator between the menus*/
InsertMenuA(hmDst, uInsert, MF_BYPOSITION | MF_SEPARATOR, 0, NULL);
}
}
}
return(uIDMax);
}

View File

@ -397,6 +397,43 @@ typedef struct
DWORD WINAPI SHGetMalloc(LPMALLOC *lpmal) ;
/****************************************************************************
* Shell File Menu API
*/
/* FileMenu_Create nSelHeight */
#define FM_FULL_SELHEIGHT -1;
#define FM_DEFAULT_SELHEIGHT 0
/* FileMenu_Create uFlags */
#define FMF_SMALL_ICONS 0x00
#define FMF_LARGE_ICONS 0x08
#define FMF_NO_COLUMN_BREAK 0x10
/* FileMenu_InsertUsingPidl uFlags */
#define FMF_NO_EMPTY_ITEM 0x01
#define FMF_NO_PROGRAM_GROUPS 0x04
typedef void (CALLBACK * LPFNFMCALLBACK)(LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlFile);
/* FileMenu_AppendItem lpszText */
#define FM_SEPARATOR (LPCSTR)1
#define FM_BLANK_ICON -1
#define FM_DEFAULT_HEIGHT 0
/* fixme: move to ShellApi.h */
#define ABM_NEW 0x00000000
#define ABM_REMOVE 0x00000001
#define ABM_QUERYPOS 0x00000002
#define ABM_SETPOS 0x00000003
#define ABM_GETSTATE 0x00000004
#define ABM_GETTASKBARPOS 0x00000005
#define ABM_ACTIVATE 0x00000006
#define ABM_GETAUTOHIDEBAR 0x00000007
#define ABM_SETAUTOHIDEBAR 0x00000008
#define ABM_WINDOWPOSCHANGED 0x00000009
#define ABS_AUTOHIDE 0x00000001
#define ABS_ALWAYSONTOP 0x00000002
#undef PURE
#undef FAR
#undef THIS

View File

@ -109,28 +109,28 @@ init Shell32LibMain
101 stub DragQueryFileAorW # exported by name
102 stdcall SHCoCreateInstance(ptr ptr long ptr ptr) SHCoCreateInstance
103 stdcall SignalFileOpen(long) SignalFileOpen
104 stub FileMenu_DeleteAllItems
105 stub FileMenu_DrawItem
106 stub FileMenu_FindSubMenuByPidl
107 stub FileMenu_GetLastSelectedItemPidls
108 stub FileMenu_HandleMenuChar
104 stdcall FileMenu_DeleteAllItems(long)FileMenu_DeleteAllItems
105 stdcall FileMenu_DrawItem(long ptr)FileMenu_DrawItem
106 stdcall FileMenu_FindSubMenuByPidl(long ptr)FileMenu_FindSubMenuByPidl
107 stdcall FileMenu_GetLastSelectedItemPidls(long ptr ptr)FileMenu_GetLastSelectedItemPidls
108 stdcall FileMenu_HandleMenuChar(long long)FileMenu_HandleMenuChar
109 stdcall FileMenu_InitMenuPopup (long) FileMenu_InitMenuPopup
110 stub FileMenu_InsertUsingPidl
111 stub FileMenu_Invalidate
112 stub FileMenu_MeasureItem
113 stub FileMenu_ReplaceUsingPidl
110 stdcall FileMenu_InsertUsingPidl (long long ptr long long ptr) FileMenu_InsertUsingPidl
111 stdcall FileMenu_Invalidate (long) FileMenu_Invalidate
112 stdcall FileMenu_MeasureItem(long ptr)FileMenu_MeasureItem
113 stdcall FileMenu_ReplaceUsingPidl (long long ptr long ptr) FileMenu_ReplaceUsingPidl
114 stdcall FileMenu_Create (long long long long long) FileMenu_Create
115 stub FileMenu_AppendItem
115 stdcall FileMenu_AppendItem (long ptr long long long long) FileMenu_AppendItemAW
116 stdcall FileMenu_TrackPopupMenuEx (long long long long long long) FileMenu_TrackPopupMenuEx
117 stub FileMenu_DeleteItemByCmd
117 stdcall FileMenu_DeleteItemByCmd(long long)FileMenu_DeleteItemByCmd
118 stdcall FileMenu_Destroy (long) FileMenu_Destroy
119 stdcall IsLFNDrive(str) IsLFNDriveA
120 stub FileMenu_AbortInitMenu
120 stdcall FileMenu_AbortInitMenu () FileMenu_AbortInitMenu
121 stdcall SHFlushClipboard () SHFlushClipboard
122 stdcall RunDLL_CallEntry16 (long long long long long) RunDLL_CallEntry16 #name wrong?
123 stdcall SHFreeUnusedLibraries () SHFreeUnusedLibraries
124 stub FileMenu_AppendFilesForPidl
125 stub FileMenu_AddFilesForPidl
124 stdcall FileMenu_AppendFilesForPidl(long ptr long)FileMenu_AppendFilesForPidl
125 stdcall FileMenu_AddFilesForPidl(long long long ptr long long ptr)FileMenu_AddFilesForPidl
126 stdcall SHOutOfMemoryMessageBox (long long long) SHOutOfMemoryMessageBox
127 stdcall SHWinHelp (long long long long) SHWinHelp
128 stdcall DllGetClassObject(long long ptr) SHELL32_DllGetClassObject
@ -145,13 +145,13 @@ init Shell32LibMain
137 stdcall DAD_ShowDragImage (long) DAD_ShowDragImage
138 stub DuplicateIcon # exported by name
139 stub Desktop_UpdateBriefcaseOnEvent
140 stub FileMenu_DeleteItemByIndex
141 stub FileMenu_DeleteItemByFirstID
142 stub FileMenu_DeleteSeparator
143 stub FileMenu_EnableItemByCmd
144 stub FileMenu_GetItemExtent
140 stdcall FileMenu_DeleteItemByIndex(long long) FileMenu_DeleteItemByIndex
141 stdcall FileMenu_DeleteItemByFirstID(long long)FileMenu_DeleteItemByFirstID
142 stdcall FileMenu_DeleteSeparator(long)FileMenu_DeleteSeparator
143 stdcall FileMenu_EnableItemByCmd(long long long)FileMenu_EnableItemByCmd
144 stdcall FileMenu_GetItemExtent (long long) FileMenu_GetItemExtent
145 stdcall PathFindOnPath (ptr ptr) PathFindOnPathAW
146 stub RLBuildListOfPaths
146 stdcall RLBuildListOfPaths()RLBuildListOfPaths
147 stdcall SHCLSIDFromString(long long) SHCLSIDFromString
148 stdcall ExtractAssociatedIconA(long ptr long) ExtractAssociatedIconA # exported by name
149 stdcall SHFind_InitMenuPopup(long long long long) SHFind_InitMenuPopup
@ -168,7 +168,7 @@ init Shell32LibMain
160 stub SHNetConnectionDialog
161 stdcall SHRunControlPanel (long long) SHRunControlPanel
162 stdcall SHSimpleIDListFromPath (ptr) SHSimpleIDListFromPathAW
163 stub StrToOleStr
163 stdcall StrToOleStr (wstr str) StrToOleStr
164 stub Win32DeleteFile
165 stdcall SHCreateDirectory(long long) SHCreateDirectory
166 stub CallCPLEntry16
@ -375,5 +375,16 @@ init Shell32LibMain
1217 stub FOOBAR1217 # no joke! This is the real name!!
# later additions ... FIXME: incorrect ordinals
1218 stdcall SHGetSpecialFolderPathA(long ptr long long) SHGetSpecialFolderPathA
1219 stub DoEnvironmentSubstW
# win 98 uses 2...330, 505..511, 520..526, 640..654, 660, 680, 700..707, 711
# win98:201
1220 stdcall DllGetVersion (ptr) SHELL32_DllGetVersion
# win98:292
1221 stdcall SHGetSpecialFolderPathA(long ptr long long) SHGetSpecialFolderPathA
# win98:293
1222 stub DoEnvironmentSubstA
# win98:204
1223 stub DoEnvironmentSubstW