[SHELL32]

- Fix few leaks and possible buffer overflows in New menu code
- Add icons of folder and shortcut to New menu
- Display message if file can't be created

svn path=/trunk/; revision=54848
This commit is contained in:
Rafal Harabien 2012-01-05 23:04:06 +00:00
parent 658d817a6e
commit e33649d62d
2 changed files with 386 additions and 420 deletions

File diff suppressed because it is too large Load diff

View file

@ -42,28 +42,31 @@ private:
struct SHELLNEW_ITEM struct SHELLNEW_ITEM
{ {
SHELLNEW_TYPE Type; SHELLNEW_TYPE Type;
LPWSTR szExt; LPWSTR pwszExt;
LPWSTR szTarget; LPWSTR pwszTarget;
LPWSTR szDesc; LPWSTR pwszDesc;
LPWSTR szIcon; LPWSTR pwszIcon;
SHELLNEW_ITEM *Next; SHELLNEW_ITEM *pNext;
}; };
LPWSTR szPath; LPWSTR m_wszPath;
SHELLNEW_ITEM *s_SnHead; SHELLNEW_ITEM *m_pShellItems;
IUnknown* fSite; IUnknown *m_pSite;
public: HMENU m_hSubMenu;
CNewMenu();
~CNewMenu(); void CleanupMenu();
SHELLNEW_ITEM *LoadItem(LPWSTR szKeyName); static BOOL GetKeyDescription(LPCWSTR pwszExt, LPWSTR pwszResult);
void UnloadItem(SHELLNEW_ITEM *item); SHELLNEW_ITEM *LoadItem(LPCWSTR pwszExt);
void UnloadItem(SHELLNEW_ITEM *pItem);
void UnloadShellItems(); void UnloadShellItems();
BOOL LoadShellNewItems(); BOOL LoadShellNewItems();
UINT InsertShellNewItems(HMENU hMenu, UINT idFirst, UINT idMenu); UINT InsertShellNewItems(HMENU hMenu, UINT idFirst, UINT idMenu);
HRESULT DoShellNewCmd(LPCMINVOKECOMMANDINFO lpcmi, IShellView * psv); HRESULT DoShellNewCmd(LPCMINVOKECOMMANDINFO lpcmi, IShellView *psv);
HRESULT DoMeasureItem(HWND hWnd, MEASUREITEMSTRUCT *lpmis); void CreateNewFolder(IShellView *psv);
HRESULT DoDrawItem(HWND hWnd, DRAWITEMSTRUCT *drawItem);
void DoNewFolder(IShellView *psv); public:
CNewMenu();
~CNewMenu();
// IObjectWithSite // IObjectWithSite
virtual HRESULT STDMETHODCALLTYPE SetSite(IUnknown *pUnkSite); virtual HRESULT STDMETHODCALLTYPE SetSite(IUnknown *pUnkSite);
@ -72,7 +75,7 @@ public:
// IContextMenu // IContextMenu
virtual HRESULT WINAPI QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags); virtual HRESULT WINAPI QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags);
virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi); virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi);
virtual HRESULT WINAPI GetCommandString(UINT_PTR idCommand,UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen); virtual HRESULT WINAPI GetCommandString(UINT_PTR idCommand, UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen);
// IContextMenu2 // IContextMenu2
virtual HRESULT WINAPI HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam); virtual HRESULT WINAPI HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam);