You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
457 lines
18 KiB
457 lines
18 KiB
/*++
|
|
|
|
Copyright (c) 1990-1998, Microsoft Corporation All rights reserved.
|
|
|
|
Module Name:
|
|
|
|
filenew.h
|
|
|
|
Abstract:
|
|
|
|
This module contains the header information for the new Win32 fileopen
|
|
dialogs.
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
|
|
|
|
#include "d32tlog.h"
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// TEMPMEM class
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
class TEMPMEM
|
|
{
|
|
public:
|
|
TEMPMEM(UINT cb)
|
|
{
|
|
m_uSize = cb;
|
|
m_pMem = cb ? LocalAlloc(LPTR, cb) : NULL;
|
|
}
|
|
|
|
~TEMPMEM()
|
|
{
|
|
if (m_pMem)
|
|
{
|
|
LocalFree(m_pMem);
|
|
}
|
|
}
|
|
|
|
operator LPBYTE() const
|
|
{
|
|
return ((LPBYTE)m_pMem);
|
|
}
|
|
|
|
BOOL Resize(UINT cb);
|
|
|
|
private:
|
|
LPVOID m_pMem;
|
|
|
|
protected:
|
|
UINT m_uSize;
|
|
};
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// TEMPSTR class
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
class TEMPSTR : public TEMPMEM
|
|
{
|
|
public:
|
|
TEMPSTR(UINT cc = 0) : TEMPMEM(cc * sizeof(TCHAR))
|
|
{
|
|
}
|
|
|
|
operator LPTSTR() const
|
|
{
|
|
return ((LPTSTR)(LPBYTE) * (TEMPMEM *)this);
|
|
}
|
|
|
|
BOOL TSStrCpy(LPCTSTR pszText);
|
|
BOOL TSStrCat(LPCTSTR pszText);
|
|
BOOL TSStrSize(UINT cb)
|
|
{
|
|
return (TEMPMEM::Resize(cb * sizeof(TCHAR)));
|
|
}
|
|
};
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// MYLISTBOXITEM class
|
|
//
|
|
// One object of this class exists for each item in the location dropdown.
|
|
//
|
|
// Data members:
|
|
// psfSub - instance of IShellFolder bound to this container
|
|
// pidlThis - IDL of this container, relative to its parent
|
|
// pidlFull - IDL of this container, relative to the desktop
|
|
// cIndent - indent level (0-based)
|
|
// dwFlags -
|
|
// MLBI_PERMANENT - item is an "information source" and should
|
|
// always remain
|
|
// dwAttrs - attributes of this container as reported by GetAttributesOf()
|
|
// iImage, iSelectedImage - indices into the system image list for this
|
|
// object
|
|
//
|
|
// Member functions:
|
|
// ShouldInclude() - returns whether item belongs in the location dropdown
|
|
// IsShared() - returns whether an item is shared or not
|
|
// SwitchCurrentDirectory() - changes the Win32 current directory to the
|
|
// directory indicated by this item
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
class MYLISTBOXITEM
|
|
{
|
|
public:
|
|
IShellFolder *psfSub;
|
|
IShellFolder *psfParent;
|
|
LPITEMIDLIST pidlThis;
|
|
LPITEMIDLIST pidlFull;
|
|
DWORD cIndent;
|
|
DWORD dwFlags;
|
|
DWORD dwAttrs;
|
|
int iImage;
|
|
int iSelectedImage;
|
|
HWND _hwndCmb;
|
|
|
|
MYLISTBOXITEM();
|
|
ULONG AddRef();
|
|
ULONG Release();
|
|
|
|
BOOL Init( HWND hwndCmb,
|
|
MYLISTBOXITEM *pParentItem,
|
|
IShellFolder *psf,
|
|
LPCITEMIDLIST pidl,
|
|
DWORD c,
|
|
DWORD f,
|
|
IShellTaskScheduler* pScheduler);
|
|
|
|
//This function is used to initialize all members directly.
|
|
BOOL Init(HWND hwndCmb, IShellFolder *psf, LPCITEMIDLIST pidl, DWORD c, DWORD f, DWORD dwAttrs, int iImage,
|
|
int iSelectedImage);
|
|
|
|
inline BOOL ShouldInclude()
|
|
{
|
|
return (dwAttrs & (SFGAO_FILESYSANCESTOR | SFGAO_FILESYSTEM));
|
|
}
|
|
|
|
inline BOOL IsShared()
|
|
{
|
|
return (dwAttrs & SFGAO_SHARE);
|
|
}
|
|
|
|
void SwitchCurrentDirectory(ICurrentWorkingDirectory * pcwd);
|
|
|
|
IShellFolder* GetShellFolder();
|
|
|
|
static void CALLBACK _AsyncIconTaskCallback(LPCITEMIDLIST pidl, LPVOID pvData, LPVOID pvHint, INT iIconIndex, INT iOpenIconIndex);
|
|
|
|
private:
|
|
~MYLISTBOXITEM();
|
|
LONG _cRef;
|
|
};
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CFileOpenBrowser class
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
typedef BOOL (*EIOCALLBACK)(class CFileOpenBrowser*that, LPCITEMIDLIST pidl, LPARAM lParam);
|
|
|
|
typedef enum
|
|
{
|
|
ECODE_S_OK = 0,
|
|
ECODE_BADDRIVE = 1,
|
|
ECODE_BADPATH = 2,
|
|
} ECODE;
|
|
|
|
typedef enum
|
|
{
|
|
OKBUTTON_NONE = 0x0000,
|
|
OKBUTTON_NODEFEXT = 0x0001,
|
|
OKBUTTON_QUOTED = 0x0002,
|
|
} OKBUTTON_FLAGS;
|
|
typedef UINT OKBUTTONFLAGS;
|
|
|
|
|
|
typedef struct _SHTCUTINFO
|
|
{
|
|
BOOL fReSolve; //[IN] Should we resolve the shortcut
|
|
DWORD dwAttr; //[IN/OUT] Attributes of the target pointed by shortcut
|
|
LPTSTR pszLinkFile; //[OUT] Target file name
|
|
UINT cchFile; //[IN] size of buffer pointed to by pszLinkFile
|
|
LPITEMIDLIST * ppidl; //[OUT] pidl of the target pointed to by shortcut
|
|
}SHTCUTINFO, *PSHTCUTINFO;
|
|
|
|
typedef enum
|
|
{
|
|
LOCTYPE_RECENT_FOLDER = 1,
|
|
LOCTYPE_MYPICTURES_FOLDER = 2,
|
|
LOCTYPE_OTHERS = 3,
|
|
LOCTYPE_WIA_FOLDER = 4
|
|
}LOCTYPE;
|
|
|
|
|
|
class CFileOpenBrowser
|
|
: public IShellBrowser
|
|
, public ICommDlgBrowser2
|
|
, public IServiceProvider
|
|
{
|
|
public:
|
|
// *** IUnknown methods ***
|
|
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID *ppvObj);
|
|
STDMETHOD_(ULONG,AddRef) (THIS);
|
|
STDMETHOD_(ULONG,Release) (THIS);
|
|
|
|
// *** IOleWindow methods ***
|
|
STDMETHOD(GetWindow) (THIS_ HWND *lphwnd);
|
|
STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode);
|
|
|
|
// *** IShellBrowser methods *** (same as IOleInPlaceFrame)
|
|
STDMETHOD(InsertMenusSB) (THIS_ HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths);
|
|
STDMETHOD(SetMenuSB) (THIS_ HMENU hmenuShared, HOLEMENU holemenu, HWND hwndActiveObject);
|
|
STDMETHOD(RemoveMenusSB) (THIS_ HMENU hmenuShared);
|
|
STDMETHOD(SetStatusTextSB) (THIS_ LPCOLESTR lpszStatusText);
|
|
STDMETHOD(EnableModelessSB) (THIS_ BOOL fEnable);
|
|
STDMETHOD(TranslateAcceleratorSB) (THIS_ LPMSG lpmsg, WORD wID);
|
|
|
|
// *** IShellBrowser methods ***
|
|
STDMETHOD(BrowseObject)(THIS_ LPCITEMIDLIST pidl, UINT wFlags);
|
|
STDMETHOD(GetViewStateStream)(THIS_ DWORD grfMode, LPSTREAM *pStrm);
|
|
STDMETHOD(GetControlWindow)(THIS_ UINT id, HWND *lphwnd);
|
|
STDMETHOD(SendControlMsg)(THIS_ UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pret);
|
|
STDMETHOD(QueryActiveShellView)(THIS_ struct IShellView **ppshv);
|
|
STDMETHOD(OnViewWindowActive)(THIS_ struct IShellView *pshv);
|
|
STDMETHOD(SetToolbarItems)(THIS_ LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags);
|
|
|
|
// *** ICommDlgBrowser methods ***
|
|
STDMETHOD(OnDefaultCommand) (THIS_ struct IShellView *ppshv);
|
|
STDMETHOD(OnStateChange) (THIS_ struct IShellView *ppshv, ULONG uChange);
|
|
STDMETHOD(IncludeObject) (THIS_ struct IShellView *ppshv, LPCITEMIDLIST lpItem);
|
|
|
|
// *** ICommDlgBrowser2 methods ***
|
|
STDMETHOD(Notify) (THIS_ struct IShellView *ppshv, DWORD dwNotifyType);
|
|
STDMETHOD(GetDefaultMenuText) (THIS_ struct IShellView *ppshv, WCHAR *pszText, INT cchMax);
|
|
STDMETHOD(GetViewFlags)(THIS_ DWORD *pdwFlags);
|
|
|
|
// *** IServiceProvider methods ***
|
|
STDMETHOD(QueryService)(THIS_ REFGUID guidService, REFIID riid, LPVOID* ppvObj);
|
|
|
|
|
|
// *** Our own methods ***
|
|
CFileOpenBrowser(HWND hDlg, BOOL fIsSaveAs);
|
|
~CFileOpenBrowser();
|
|
HRESULT SwitchView(struct IShellFolder *psfNew, LPCITEMIDLIST pidlNew, FOLDERSETTINGS *pfs, SHELLVIEWID const *pvid, BOOL fUseDefultView);
|
|
void OnDblClick(BOOL bFromOKButton);
|
|
LRESULT OnNotify(LPNMHDR lpnmhdr);
|
|
BOOL OnSetCursor(void);
|
|
void ViewCommand(UINT uIndex);
|
|
void PaintDriveLine(DRAWITEMSTRUCT *lpdis);
|
|
void GetFullPath(LPTSTR pszBuf);
|
|
BOOL OnSelChange(int iItem = -1, BOOL bForceUpdate = FALSE);
|
|
void OnDotDot();
|
|
void RefreshFilter(HWND hwndFilter);
|
|
BOOL JumpToPath(LPCTSTR pszDirectory, BOOL bTranslate = FALSE);
|
|
BOOL JumpToIDList(LPCITEMIDLIST pidlNew, BOOL bTranslate = FALSE, BOOL bAddToNavStack = TRUE);
|
|
BOOL SetDirRetry(LPTSTR pszDir, BOOL bNoValidate = FALSE);
|
|
BOOL MultiSelectOKButton(LPCTSTR pszFiles, OKBUTTONFLAGS Flags);
|
|
BOOL OKButtonPressed(LPCTSTR pszFile, OKBUTTONFLAGS Flags);
|
|
UINT GetDirectoryFromLB(LPTSTR szBuffer, int *pichRoot);
|
|
void SetCurrentFilter(LPCTSTR pszFilter, OKBUTTONFLAGS Flags = OKBUTTON_QUOTED);
|
|
UINT GetFullEditName(LPTSTR pszBuf, UINT cLen, TEMPSTR *pTempStr = NULL, BOOL *pbNoDefExt = NULL);
|
|
void ProcessEdit();
|
|
LRESULT OnCommandMessage(WPARAM wParam, LPARAM lParam);
|
|
BOOL OnCDMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
void RemoveOldPath(int *piNewSel);
|
|
BOOL LinkMatchSpec(LPCITEMIDLIST pidl, LPCTSTR szSpec);
|
|
BOOL GetLinkStatus(LPCITEMIDLIST pidl,PSHTCUTINFO pinfo);
|
|
HRESULT ResolveLink(LPCITEMIDLIST pidl, PSHTCUTINFO pinfo, IShellFolder *psf = NULL);
|
|
void SelFocusChange(BOOL bSelChange);
|
|
void SelRename(void);
|
|
void SetSaveButton(UINT idSaveButton);
|
|
void RealSetSaveButton(UINT idSaveButton);
|
|
void SetEditFile(LPCTSTR pszFile, LPCTSTR pszFileFriendly, BOOL bShowExt, BOOL bSaveNullExt = TRUE);
|
|
BOOL EnumItemObjects(UINT uItem, EIOCALLBACK pfnCallBack, LPARAM lParam);
|
|
BOOL IsKnownExtension(LPCTSTR pszExtension);
|
|
UINT FindNameInView(LPTSTR pszFile, OKBUTTONFLAGS Flags, LPTSTR pszPathName,
|
|
int nFileOffset, int nExtOffset, int *pnErrCode,
|
|
BOOL bTryAsDir = TRUE);
|
|
void UpdateLevel(HWND hwndLB, int iInsert, MYLISTBOXITEM *pParentItem);
|
|
void InitializeDropDown(HWND hwndCtl);
|
|
BOOL FSChange(LONG lNotification, LPCITEMIDLIST *ppidl);
|
|
int GetNodeFromIDList(LPCITEMIDLIST pidl);
|
|
void Timer(WPARAM wID);
|
|
BOOL CreateHookDialog(POINT *pPtSize);
|
|
void OnGetMinMax(LPMINMAXINFO pmmi);
|
|
void OnSize(int, int);
|
|
void VerifyListViewPosition(void);
|
|
BOOL CreateToolbar(); // Creates the file open toolbar
|
|
void EnableFileMRU(BOOL fEnable); // Enable/Disable File MRU based on the flag passed
|
|
void UpdateNavigation(); // Updates the Navigation by adding the current pidl
|
|
// to the navigation stack
|
|
void UpdateUI(LPITEMIDLIST pidlNew); // Updates the back navigation button and the hot item on the places bar
|
|
LPCTSTR JumpToInitialLocation(LPCTSTR pszDir, LPTSTR pszFile);
|
|
BOOL InitLookIn(HWND hDlg); //Initializes the look in drop down.
|
|
|
|
int _CopyFileNameToOFN(LPTSTR pszFile, DWORD *pdwError);
|
|
void _CopyTitleToOFN(LPCTSTR pszTitle);
|
|
|
|
BOOL _IsNoDereferenceLinks(LPCWSTR pszFile, IShellItem *psi);
|
|
BOOL _OpenAsContainer(IShellItem *psi, SFGAOF sfgao);
|
|
|
|
HRESULT _ParseName(LPCITEMIDLIST pidlParent, IShellFolder *psf, IBindCtx *pbc, LPCOLESTR psz, IShellItem **ppsi);
|
|
HRESULT _ParseNameAndTest(LPCOLESTR pszIn, IBindCtx *pbc, IShellItem **ppsi, BOOL fAllowJump);
|
|
HRESULT _ParseShellItem(LPCOLESTR pszIn, IShellItem **ppsi, BOOL fAllowJump);
|
|
HRESULT _TestShellItem(IShellItem *psi, BOOL fAllowJump, IShellItem **ppsiReal);
|
|
#ifdef RETURN_SHELLITEMS
|
|
HRESULT _ItemOKButtonPressed(LPCTSTR pszFile, OKBUTTONFLAGS Flags);
|
|
HRESULT _ProcessShellItem(IShellItem *psi);
|
|
#endif RETURN_SHELLITEMS
|
|
HRESULT _MakeFakeCopy(IShellItem *psi, LPWSTR *ppszPath);
|
|
|
|
BOOL CheckForRestrictedFolder(LPCTSTR lpszPath, int nFileOffset); //Checks to see whether a file can be saved in the given path.
|
|
|
|
void ResetDialogHeight(HWND hDlg, HWND hwndExclude, HWND hwndGrip, int nCtlsBottom);
|
|
void ReAdjustDialog(); // if help and open as read only is hidden then this function readjusts the dialog
|
|
// to reclaim the space occupied by these controls
|
|
|
|
//Places Bar Related Functions
|
|
HWND CreatePlacesbar(HWND hDlg); // Creates places bar
|
|
void _RecreatePlacesbar();
|
|
void _CleanupPlacesbar();
|
|
void _FillPlacesbar(HWND hwndPlacesbar);
|
|
BOOL _EnumPlacesBarItem(HKEY hkey, int i , SHFILEINFO *psfi, LPITEMIDLIST *ppidl);
|
|
BOOL _GetPlacesBarItemToolTip(int idCmd, LPTSTR pText, DWORD dwSize);
|
|
BOOL _GetPBItemFromTokenStrings(LPTSTR lpszPath, SHFILEINFO * psfi, LPITEMIDLIST *ppidl);
|
|
BOOL _GetPBItemFromCSIDL(DWORD csidl, SHFILEINFO * psfi, LPITEMIDLIST *ppidl);
|
|
BOOL _GetPBItemFromPath(LPTSTR lpszPath, size_t cchPath, SHFILEINFO * psfi, LPITEMIDLIST *ppidl);
|
|
|
|
//Pidl Processing Functions
|
|
BOOL _ProcessPidlSelection(); //Processes the selection pidl if any.
|
|
HRESULT _ProcessItemAsFile(IShellItem *psi);
|
|
|
|
//General Utility Functions
|
|
BOOL _ValidateSelectedFile(LPCTSTR pszFile, int *pErrCode);
|
|
BOOL _PostProcess(LPTSTR pszFile);
|
|
BOOL _IsThumbnailFolder(LPCITEMIDLIST pidl);
|
|
BOOL _IsWIAFolder(IShellFolder *psf);
|
|
LOCTYPE _GetLocationType(MYLISTBOXITEM *pLocation);
|
|
void _WaitCursor(BOOL fWait);
|
|
BOOL CFileOpenBrowser::_IsRestrictedDrive(LPCTSTR pszPath, LPCITEMIDLIST pidl);
|
|
void CFileOpenBrowser::JumpToLocationIfUnrestricted(LPCTSTR pszPath, LPCITEMIDLIST pidl, BOOL bTranslate);
|
|
BOOL CFileOpenBrowser::_SaveAccessDenied(LPCTSTR pszFile);
|
|
void _CleanupDialog(BOOL fRet);
|
|
|
|
void OnThemeActive(HWND hwndDlg, BOOL bActive);
|
|
|
|
//Member Variables
|
|
LONG _cRef; // compobj refcount
|
|
int _iCurrentLocation; // index of curr selection in location dropdown
|
|
int _iVersion; // Which version of dialog are we showing
|
|
MYLISTBOXITEM *_pCurrentLocation; // ptr to object for same
|
|
HWND _hwndDlg; // handle of this dialog
|
|
HWND _hSubDlg; // handle of the hook dialog
|
|
IShellView *_psv; // current view object
|
|
IShellFolder *_psfCurrent; // current shellfolder object
|
|
TravelLog *_ptlog; // ptr to travel log
|
|
HWND _hwndView; // current view window
|
|
HWND _hwndToolbar; // toolbar window
|
|
HWND _hwndPlacesbar; // places bar window
|
|
HWND _hwndLastFocus; // ctrl that had focus before OK button
|
|
HIMAGELIST _himl; // system imagelist (small images)
|
|
TEMPSTR _pszHideExt; // saved file with extension
|
|
TEMPSTR _tszDefSave; // saved file with extension
|
|
TEMPSTR _pszDefExt; // writable version of the DefExt
|
|
TEMPSTR _pszObjectPath; // full object path
|
|
TEMPSTR _pszObjectCurDir; // object current directory (folder)
|
|
UINT _uRegister;
|
|
int _iComboIndex;
|
|
int _iNodeDrives; // location of my computer in drop down
|
|
int _iNodeDesktop; // location of Desktop in drop down
|
|
int _iCommandID; // Next command id to use for a Placebar Item
|
|
int _iCheckedButton; // if > 0 tells which places bar button is checked
|
|
|
|
BOOL _bEnableSizing; // if sizing is enabled
|
|
BOOL _bUseCombo; // Use the edit window instead of comboxex for app compatibility
|
|
POINT _ptLastSize; // last known size of dialog
|
|
POINT _ptMinTrack; // initial size of view
|
|
SIZE _sizeView; // last known size of view
|
|
HWND _hwndGrip; // window handle of sizing grip
|
|
DWORD _dwPlacesbarPadding; // default placesbar toolbar padding
|
|
|
|
LPOPENFILENAME _pOFN; // caller's OPENFILENAME struct
|
|
|
|
BOOL _bSave : 1; // whether this is a save-as dialog
|
|
BOOL _fShowExtensions : 1; // whether to show extensions
|
|
BOOL _bUseHideExt : 1; // whether pszHideExt is valid
|
|
BOOL _bDropped : 1;
|
|
BOOL _bNoInferDefExt : 1; // don't get defext from combo
|
|
BOOL _fSelChangedPending : 1; // we have a selchanging message pending
|
|
BOOL _bSelIsObject : 1; // the last selected object is an object, not a file
|
|
BOOL _bUseSizeView : 1; // only use cached size after failure to create view...
|
|
BOOL _bAppRedrawn : 1; // Did app call RedrawWindow? - see ResetDialogHeight
|
|
BOOL _bDestroyPlacesbarImageList : 1; // Free placesbar imagelist first time only
|
|
HWND _hwndTips; // hWnd of tooltip control for this window
|
|
|
|
LPOPENFILEINFO _pOFI; // info for thunking (ansi callers only)
|
|
ICurrentWorkingDirectory * _pcwd; // Interface to AutoComplete COM Object that sets CurrentWorkingDir
|
|
UINT _CachedViewMode; // we force Some folders into specific views. this caches the users choice
|
|
UINT _fCachedViewFlags; // we also need to cache the view flags.
|
|
|
|
// Apphack for Borland JBuilder Professional - see ResetDialogHeight
|
|
int _topOrig; // original window top
|
|
|
|
LPITEMIDLIST _pidlSelection; // This is currently selected items pidl.
|
|
|
|
IShellTaskScheduler* _pScheduler; // This TaskScheduler is used to do delayed Icon extractions.
|
|
int _cWaitCursor;
|
|
LONG _cRefCannotNavigate;
|
|
HWND _hwndModelessFocus;
|
|
WNDPROC _lpOKProc;
|
|
|
|
// Perf: Big structures go at the end
|
|
TCHAR _szLastFilter[MAX_PATH + 1]; // last filter chosen by the user
|
|
TCHAR _szStartDir[MAX_PATH + 1]; // saved starting directory
|
|
TCHAR _szCurDir[MAX_PATH + 1]; // currently viewed dir (if FS)
|
|
TCHAR _szBuf[MAX_PATH + 4]; // scratch buffer
|
|
TCHAR _szTipBuf[MAX_PATH + 1]; // tool tip buffer
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// WAIT_CURSOR class
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
class WAIT_CURSOR
|
|
{
|
|
private:
|
|
CFileOpenBrowser *_that;
|
|
public:
|
|
WAIT_CURSOR(CFileOpenBrowser *that) : _that(that)
|
|
{
|
|
_that->_WaitCursor(TRUE);
|
|
}
|
|
|
|
~WAIT_CURSOR()
|
|
{
|
|
_that->_WaitCursor(FALSE);
|
|
}
|
|
};
|
|
|
|
|
|
};
|
|
|
|
#define VIEW_JUMPDESKTOP (VIEW_NEWFOLDER + 1)
|