ReactOS 0.4.16-dev-816-g135a9a9
CDefView Class Reference
Inheritance diagram for CDefView:
Collaboration diagram for CDefView:

Public Member Functions

 CDefView ()
 
 ~CDefView ()
 
HRESULT WINAPI Initialize (IShellFolder *shellFolder)
 
HRESULT IncludeObject (PCUITEMID_CHILD pidl)
 
HRESULT OnDefaultCommand ()
 
HRESULT OnStateChange (UINT uFlags)
 
void UpdateStatusbar ()
 
void CheckToolbar ()
 
BOOL CreateList ()
 
void UpdateListColors ()
 
BOOL InitList ()
 
HRESULT MapFolderColumnToListColumn (UINT FoldCol)
 
HRESULT MapListColumnToFolderColumn (UINT ListCol)
 
HRESULT GetDetailsByFolderColumn (PCUITEMID_CHILD pidl, UINT FoldCol, SHELLDETAILS &sd)
 
HRESULT GetDetailsByListColumn (PCUITEMID_CHILD pidl, UINT ListCol, SHELLDETAILS &sd)
 
HRESULT LoadColumn (UINT FoldCol, UINT ListCol, BOOL Insert, UINT ForceWidth=0)
 
HRESULT LoadColumns (SIZE_T *pColList=NULL, UINT ColListCount=0)
 
void ColumnListChanged ()
 
SFGAOF GetItemAttributes (PCUITEMID_CHILD pidl, UINT Query)
 
SFGAOF GetItemAttributes (int i, UINT Query)
 
void RefreshGhostedState ()
 
PCUITEMID_CHILD _PidlByItem (int i)
 
PCUITEMID_CHILD _PidlByItem (LVITEM &lvItem)
 
int LV_FindItemByPidl (PCUITEMID_CHILD pidl)
 
int LV_AddItem (PCUITEMID_CHILD pidl)
 
BOOLEAN LV_DeleteItem (PCUITEMID_CHILD pidl)
 
BOOLEAN LV_RenameItem (PCUITEMID_CHILD pidlOld, PCUITEMID_CHILD pidlNew)
 
BOOLEAN LV_UpdateItem (PCUITEMID_CHILD pidl)
 
void LV_RefreshIcon (INT iItem)
 
void LV_RefreshIcons ()
 
HRESULT FillList (BOOL IsRefreshCommand=TRUE)
 
HRESULT FillFileMenu ()
 
HRESULT FillEditMenu ()
 
HRESULT FillViewMenu ()
 
HRESULT FillArrangeAsMenu (HMENU hmenuArrange)
 
HRESULT CheckViewMode (HMENU hmenuView)
 
LRESULT DoColumnContextMenu (LRESULT lParam)
 
UINT GetSelections ()
 
SFGAOF GetSelectionAttributes (SFGAOF Query)
 
HRESULT OpenSelectedItems ()
 
void OnDeactivate ()
 
void DoActivate (UINT uState)
 
HRESULT drag_notify_subitem (DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
 
HRESULT InvokeContextMenuCommand (CComPtr< IContextMenu > &pCM, LPCSTR lpVerb, POINT *pt=NULL)
 
LRESULT OnExplorerCommand (UINT uCommand, BOOL bUseSelection)
 
FOLDERVIEWMODE GetDefaultViewMode ()
 
HRESULT GetDefaultViewStream (DWORD Stgm, IStream **ppStream)
 
HRESULT LoadViewState ()
 
HRESULT SaveViewState (IStream *pStream)
 
void UpdateFolderViewFlags ()
 
DWORD GetCommDlgViewFlags ()
 
STDMETHOD() GetWindow (HWND *lphwnd) override
 
STDMETHOD() ContextSensitiveHelp (BOOL fEnterMode) override
 
STDMETHOD() TranslateAccelerator (MSG *pmsg) override
 
STDMETHOD() EnableModeless (BOOL fEnable) override
 
STDMETHOD() UIActivate (UINT uState) override
 
STDMETHOD() Refresh () override
 
STDMETHOD() CreateViewWindow (IShellView *psvPrevious, LPCFOLDERSETTINGS pfs, IShellBrowser *psb, RECT *prcView, HWND *phWnd) override
 
STDMETHOD() DestroyViewWindow () override
 
STDMETHOD() GetCurrentInfo (LPFOLDERSETTINGS pfs) override
 
STDMETHOD() AddPropertySheetPages (DWORD dwReserved, LPFNSVADDPROPSHEETPAGE pfn, LPARAM lparam) override
 
STDMETHOD() SaveViewState () override
 
STDMETHOD() SelectItem (PCUITEMID_CHILD pidlItem, SVSIF uFlags) override
 
STDMETHOD() GetItemObject (UINT uItem, REFIID riid, void **ppv) override
 
STDMETHOD() GetView (SHELLVIEWID *view_guid, ULONG view_type) override
 
STDMETHOD() CreateViewWindow2 (LPSV2CVW2_PARAMS view_params) override
 
STDMETHOD() HandleRename (LPCITEMIDLIST new_pidl) override
 
STDMETHOD() SelectAndPositionItem (LPCITEMIDLIST item, UINT flags, POINT *point) override
 
STDMETHOD() CreateViewWindow3 (IShellBrowser *psb, IShellView *psvPrevious, SV3CVW3_FLAGS view_flags, FOLDERFLAGS mask, FOLDERFLAGS flags, FOLDERVIEWMODE mode, const SHELLVIEWID *view_id, const RECT *prcView, HWND *hwnd) override
 
STDMETHOD() GetCurrentViewMode (UINT *pViewMode) override
 
STDMETHOD() SetCurrentViewMode (UINT ViewMode) override
 
STDMETHOD() GetFolder (REFIID riid, void **ppv) override
 
STDMETHOD() Item (int iItemIndex, PITEMID_CHILD *ppidl) override
 
STDMETHOD() ItemCount (UINT uFlags, int *pcItems) override
 
STDMETHOD() Items (UINT uFlags, REFIID riid, void **ppv) override
 
STDMETHOD() GetSelectionMarkedItem (int *piItem) override
 
STDMETHOD() GetFocusedItem (int *piItem) override
 
STDMETHOD() GetItemPosition (PCUITEMID_CHILD pidl, POINT *ppt) override
 
STDMETHOD() GetSpacing (POINT *ppt) override
 
STDMETHOD() GetDefaultSpacing (POINT *ppt) override
 
STDMETHOD() GetAutoArrange () override
 
STDMETHOD() SelectItem (int iItem, DWORD dwFlags) override
 
STDMETHOD() SelectAndPositionItems (UINT cidl, PCUITEMID_CHILD_ARRAY apidl, POINT *apt, DWORD dwFlags) override
 
STDMETHOD() Rearrange (LPARAM sort) override
 
STDMETHOD() GetArrangeParam (LPARAM *sort) override
 
STDMETHOD() ArrangeGrid () override
 
STDMETHOD() AutoArrange () override
 
STDMETHOD() AddObject (PITEMID_CHILD pidl, UINT *item) override
 
STDMETHOD() GetObject (PITEMID_CHILD *pidl, UINT item) override
 
STDMETHOD() RemoveObject (PITEMID_CHILD pidl, UINT *item) override
 
STDMETHOD() GetObjectCount (UINT *count) override
 
STDMETHOD() SetObjectCount (UINT count, UINT flags) override
 
STDMETHOD() UpdateObject (PITEMID_CHILD pidl_old, PITEMID_CHILD pidl_new, UINT *item) override
 
STDMETHOD() RefreshObject (PITEMID_CHILD pidl, UINT *item) override
 
STDMETHOD() SetRedraw (BOOL redraw) override
 
STDMETHOD() GetSelectedCount (UINT *count) override
 
STDMETHOD() GetSelectedObjects (PCUITEMID_CHILD **pidl, UINT *items) override
 
STDMETHOD() IsDropOnSource (IDropTarget *drop_target) override
 
STDMETHOD() GetDragPoint (POINT *pt) override
 
STDMETHOD() GetDropPoint (POINT *pt) override
 
STDMETHOD() MoveIcons (IDataObject *obj) override
 
STDMETHOD() SetItemPos (PCUITEMID_CHILD pidl, POINT *pt) override
 
STDMETHOD() IsBkDropTarget (IDropTarget *drop_target) override
 
STDMETHOD() SetClipboard (BOOL move) override
 
STDMETHOD() SetPoints (IDataObject *obj) override
 
STDMETHOD() GetItemSpacing (ITEMSPACING *spacing) override
 
STDMETHOD() SetCallback (IShellFolderViewCB *new_cb, IShellFolderViewCB **old_cb) override
 
STDMETHOD() Select (UINT flags) override
 
STDMETHOD() QuerySupport (UINT *support) override
 
STDMETHOD() SetAutomationObject (IDispatch *disp) override
 
STDMETHOD() QueryStatus (const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText) override
 
STDMETHOD() Exec (const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override
 
STDMETHOD() DragEnter (IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
 
STDMETHOD() DragOver (DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
 
STDMETHOD() DragLeave () override
 
STDMETHOD() Drop (IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
 
STDMETHOD() QueryContinueDrag (BOOL fEscapePressed, DWORD grfKeyState) override
 
STDMETHOD() GiveFeedback (DWORD dwEffect) override
 
STDMETHOD() Draw (DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hdcTargetDev, HDC hdcDraw, LPCRECTL lprcBounds, LPCRECTL lprcWBounds, BOOL(STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue), ULONG_PTR dwContinue) override
 
STDMETHOD() GetColorSet (DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDev, LOGPALETTE **ppColorSet) override
 
STDMETHOD() Freeze (DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze) override
 
STDMETHOD() Unfreeze (DWORD dwFreeze) override
 
STDMETHOD() SetAdvise (DWORD aspects, DWORD advf, IAdviseSink *pAdvSink) override
 
STDMETHOD() GetAdvise (DWORD *pAspects, DWORD *pAdvf, IAdviseSink **ppAdvSink) override
 
STDMETHOD() QueryService (REFGUID guidService, REFIID riid, void **ppvObject) override
 
LRESULT OnShowWindow (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnGetDlgCode (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnDestroy (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnEraseBackground (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnPrintClient (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnSysColorChange (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnGetShellBrowser (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnNCCreate (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnCreate (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnContextMenu (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnSize (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnActivate (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnSetFocus (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnKillFocus (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnCommand (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnNotify (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnChangeNotify (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnUpdateStatusbar (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnCustomItem (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnSettingChange (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnInitMenuPopup (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnChangeCBChain (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnDrawClipboard (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
virtual VOID OnFinalMessage (HWND) override
 
virtual WNDPROC GetWindowProc ()
 
- Public Member Functions inherited from ATL::CWindowImpl< CDefView, CWindow, CControlWinTraits >
HWND Create (HWND hWndParent, _U_RECT rect=NULL, LPCTSTR szWindowName=NULL, DWORD dwStyle=0, DWORD dwExStyle=0, _U_MENUorID MenuOrID=0U, LPVOID lpCreateParam=NULL)
 
- Public Member Functions inherited from ATL::CWindowImplBaseT< TBase, TWinTraits >
 CWindowImplBaseT ()
 
virtual void OnFinalMessage (HWND)
 
BOOL SubclassWindow (HWND hWnd)
 
HWND UnsubclassWindow (BOOL bForce=FALSE)
 
virtual WNDPROC GetWindowProc ()
 
LRESULT DefWindowProc (UINT uMsg, WPARAM wParam, LPARAM lParam)
 
HWND Create (HWND hWndParent, _U_RECT rect, LPCTSTR szWindowName, DWORD dwStyle, DWORD dwExStyle, _U_MENUorID MenuOrID, ATOM atom, LPVOID lpCreateParam)
 
- Public Member Functions inherited from ATL::CWindowImplRoot< TBase >
 CWindowImplRoot ()
 
virtual ~CWindowImplRoot ()
 
- Public Member Functions inherited from ATL::CWindow
 CWindow (HWND hWnd=NULL)
 
 operator HWND () const
 
UINT ArrangeIconicWindows ()
 
void Attach (HWND hWndNew)
 
HDC BeginPaint (LPPAINTSTRUCT lpPaint)
 
BOOL BringWindowToTop ()
 
BOOL CenterWindow (HWND hWndCenter=NULL)
 
BOOL ChangeClipboardChain (HWND hWndNewNext)
 
BOOL CheckDlgButton (int nIDButton, UINT nCheck)
 
BOOL CheckRadioButton (int nIDFirstButton, int nIDLastButton, int nIDCheckButton)
 
HWND ChildWindowFromPoint (POINT point) const
 
HWND ChildWindowFromPointEx (POINT point, UINT uFlags) const
 
BOOL ClientToScreen (LPPOINT lpPoint) const
 
BOOL ClientToScreen (LPRECT lpRect) const
 
HWND Create (LPCTSTR lpstrWndClass, HWND hWndParent, _U_RECT rect=NULL, LPCTSTR szWindowName=NULL, DWORD dwStyle=0, DWORD dwExStyle=0, _U_MENUorID MenuOrID=0U, LPVOID lpCreateParam=NULL)
 
BOOL CreateCaret (HBITMAP pBitmap)
 
BOOL CreateGrayCaret (int nWidth, int nHeight)
 
BOOL CreateSolidCaret (int nWidth, int nHeight)
 
HDWP DeferWindowPos (HDWP hWinPosInfo, HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags)
 
BOOL DestroyWindow ()
 
HWND Detach ()
 
int DlgDirList (LPTSTR lpPathSpec, int nIDListBox, int nIDStaticPath, UINT nFileType)
 
int DlgDirListComboBox (LPTSTR lpPathSpec, int nIDComboBox, int nIDStaticPath, UINT nFileType)
 
BOOL DlgDirSelect (LPTSTR lpString, int nCount, int nIDListBox)
 
BOOL DlgDirSelectComboBox (LPTSTR lpString, int nCount, int nIDComboBox)
 
void DragAcceptFiles (BOOL bAccept=TRUE)
 
BOOL DrawMenuBar ()
 
BOOL EnableScrollBar (UINT uSBFlags, UINT uArrowFlags=ESB_ENABLE_BOTH)
 
BOOL EnableWindow (BOOL bEnable=TRUE)
 
void EndPaint (LPPAINTSTRUCT lpPaint)
 
BOOL FlashWindow (BOOL bInvert)
 
BOOL GetClientRect (LPRECT lpRect) const
 
HDC GetDC ()
 
HDC GetDCEx (HRGN hRgnClip, DWORD flags)
 
HWND GetDescendantWindow (int nID) const
 
HRESULT GetDlgControl (int nID, REFIID iid, void **ppCtrl)
 
int GetDlgCtrlID () const
 
HRESULT GetDlgHost (int nID, REFIID iid, void **ppHost)
 
HWND GetDlgItem (_In_ int nID) const
 
UINT GetDlgItemInt (_In_ int nID, _Out_opt_ BOOL *lpTrans=NULL, _In_ BOOL bSigned=TRUE) const
 
UINT GetDlgItemText (_In_ int nID, _Out_writes_to_(nMaxCount, return+1) LPTSTR lpStr, _In_ int nMaxCount) const
 
BOOL GetDlgItemText (_In_ int nID, _Inout_ _Outref_result_maybenull_ _Post_z_ BSTR &bstrText) const
 
DWORD GetExStyle () const
 
HFONT GetFont () const
 
DWORD GetHotKey () const
 
HICON GetIcon (BOOL bBigIcon=TRUE) const
 
HWND GetLastActivePopup () const
 
HMENU GetMenu () const
 
HWND GetNextDlgGroupItem (HWND hWndCtl, BOOL bPrevious=FALSE) const
 
HWND GetNextDlgTabItem (HWND hWndCtl, BOOL bPrevious=FALSE) const
 
CWindow GetParent () const
 
BOOL GetScrollInfo (int nBar, LPSCROLLINFO lpScrollInfo)
 
BOOL GetScrollPos (int nBar)
 
BOOL GetScrollRange (int nBar, LPINT lpMinPos, LPINT lpMaxPos) const
 
DWORD GetStyle () const
 
HMENU GetSystemMenu (BOOL bRevert)
 
HWND GetTopLevelParent () const
 
HWND GetTopLevelWindow () const
 
HWND GetTopWindow () const
 
BOOL GetUpdateRect (LPRECT lpRect, BOOL bErase=FALSE)
 
int GetUpdateRgn (HRGN hRgn, BOOL bErase=FALSE)
 
HWND GetWindow (UINT nCmd) const
 
DWORD GetWindowContextHelpId () const
 
HDC GetWindowDC ()
 
LONG GetWindowLong (int nIndex) const
 
LONG_PTR GetWindowLongPtr (int nIndex) const
 
BOOL GetWindowPlacement (WINDOWPLACEMENT *lpwndpl) const
 
DWORD GetWindowProcessID ()
 
BOOL GetWindowRect (LPRECT lpRect) const
 
int GetWindowRgn (HRGN hRgn)
 
int GetWindowText (_Out_writes_to_(nMaxCount, return+1) LPTSTR lpszStringBuf, _In_ int nMaxCount) const
 
BOOL GetWindowText (_Inout_ _Outref_result_maybenull_ _Post_z_ BSTR &bstrText) const
 
int GetWindowTextLength () const
 
DWORD GetWindowThreadID ()
 
WORD GetWindowWord (int nIndex) const
 
void GotoDlgCtrl (HWND hWndCtrl) const
 
BOOL HideCaret ()
 
BOOL HiliteMenuItem (HMENU hMenu, UINT uHiliteItem, UINT uHilite)
 
BOOL Invalidate (BOOL bErase=TRUE)
 
BOOL InvalidateRect (LPCRECT lpRect, BOOL bErase=TRUE)
 
void InvalidateRgn (HRGN hRgn, BOOL bErase=TRUE)
 
BOOL IsChild (const HWND hWnd) const
 
BOOL IsDialogMessage (LPMSG lpMsg)
 
UINT IsDlgButtonChecked (int nIDButton) const
 
BOOL IsIconic () const
 
BOOL IsParentDialog ()
 
BOOL IsWindow () const
 
BOOL IsWindowEnabled () const
 
BOOL IsWindowVisible () const
 
BOOL IsWindowUnicode ()
 
BOOL IsZoomed () const
 
BOOL KillTimer (UINT_PTR nIDEvent)
 
BOOL LockWindowUpdate (BOOL bLock=TRUE)
 
int MapWindowPoints (HWND hWndTo, LPPOINT lpPoint, UINT nCount) const
 
int MapWindowPoints (HWND hWndTo, LPRECT lpRect) const
 
int MessageBox (LPCTSTR lpszText, LPCTSTR lpszCaption=NULL, UINT nType=MB_OK)
 
BOOL ModifyStyle (DWORD dwRemove, DWORD dwAdd, UINT nFlags=0)
 
BOOL ModifyStyleEx (DWORD dwRemove, DWORD dwAdd, UINT nFlags=0)
 
BOOL MoveWindow (int x, int y, int nWidth, int nHeight, BOOL bRepaint=TRUE)
 
void NextDlgCtrl () const
 
BOOL OpenClipboard ()
 
BOOL PostMessage (UINT message, WPARAM wParam=0, LPARAM lParam=0)
 
void PrevDlgCtrl () const
 
void Print (HDC hDC, DWORD dwFlags) const
 
void PrintClient (HDC hDC, DWORD dwFlags) const
 
BOOL RedrawWindow (LPCRECT lpRectUpdate=NULL, HRGN hRgnUpdate=NULL, UINT flags=RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE)
 
int ReleaseDC (HDC hDC)
 
BOOL ResizeClient (int nWidth, int nHeight, BOOL bRedraw=FALSE)
 
BOOL ScreenToClient (LPPOINT lpPoint) const
 
BOOL ScrollWindow (int xAmount, int yAmount, LPCRECT lpRect=NULL, LPCRECT lpClipRect=NULL)
 
int ScrollWindowEx (int dx, int dy, LPCRECT lpRectScroll, LPCRECT lpRectClip, HRGN hRgnUpdate, LPRECT lpRectUpdate, UINT flags)
 
LRESULT SendDlgItemMessage (int nID, UINT message, WPARAM wParam=0, LPARAM lParam=0)
 
LRESULT SendMessage (UINT message, WPARAM wParam=0, LPARAM lParam=0)
 
void SendMessageToDescendants (UINT message, WPARAM wParam=0, LPARAM lParam=0, BOOL bDeep=TRUE)
 
BOOL SendNotifyMessage (UINT message, WPARAM wParam=0, LPARAM lParam=0)
 
HWND SetActiveWindow ()
 
HWND SetCapture ()
 
HWND SetClipboardViewer ()
 
int SetDlgCtrlID (int nID)
 
BOOL SetDlgItemInt (int nID, UINT nValue, BOOL bSigned=TRUE)
 
BOOL SetDlgItemText (int nID, LPCTSTR lpszString)
 
HWND SetFocus ()
 
void SetFont (HFONT hFont, BOOL bRedraw=TRUE)
 
int SetHotKey (WORD wVirtualKeyCode, WORD wModifiers)
 
HICON SetIcon (HICON hIcon, BOOL bBigIcon=TRUE)
 
BOOL SetMenu (HMENU hMenu)
 
HWND SetParent (HWND hWndNewParent)
 
void SetRedraw (BOOL bRedraw=TRUE)
 
int SetScrollInfo (int nBar, LPSCROLLINFO lpScrollInfo, BOOL bRedraw=TRUE)
 
int SetScrollPos (int nBar, int nPos, BOOL bRedraw=TRUE)
 
BOOL SetScrollRange (int nBar, int nMinPos, int nMaxPos, BOOL bRedraw=TRUE)
 
UINT_PTR SetTimer (UINT_PTR nIDEvent, UINT nElapse, void(CALLBACK *lpfnTimer)(HWND, UINT, UINT_PTR, DWORD)=NULL)
 
BOOL SetWindowContextHelpId (DWORD dwContextHelpId)
 
LONG SetWindowLong (int nIndex, LONG dwNewLong)
 
LONG_PTR SetWindowLongPtr (int nIndex, LONG_PTR dwNewLong)
 
BOOL SetWindowPlacement (const WINDOWPLACEMENT *lpwndpl)
 
BOOL SetWindowPos (HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags)
 
int SetWindowRgn (HRGN hRgn, BOOL bRedraw=FALSE)
 
BOOL SetWindowText (LPCTSTR lpszString)
 
WORD SetWindowWord (int nIndex, WORD wNewWord)
 
BOOL ShowCaret ()
 
BOOL ShowOwnedPopups (BOOL bShow=TRUE)
 
BOOL ShowScrollBar (UINT nBar, BOOL bShow=TRUE)
 
BOOL ShowWindow (int nCmdShow)
 
BOOL ShowWindowAsync (int nCmdShow)
 
BOOL UpdateWindow ()
 
BOOL ValidateRect (LPCRECT lpRect)
 
BOOL ValidateRgn (HRGN hRgn)
 
BOOL WinHelp (LPCTSTR lpszHelp, UINT nCmd=HELP_CONTEXT, DWORD dwData=0)
 
- Public Member Functions inherited from ATL::CMessageMap
virtual BOOL ProcessWindowMessage (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult, DWORD dwMsgMapID)=0
 
- Public Member Functions inherited from ATL::CComObjectRootEx< CComMultiThreadModelNoCS >
 ~CComObjectRootEx ()
 
ULONG InternalAddRef ()
 
ULONG InternalRelease ()
 
void Lock ()
 
void Unlock ()
 
HRESULT _AtlInitialConstruct ()
 
- Public Member Functions inherited from ATL::CComObjectRootBase
 CComObjectRootBase ()
 
 ~CComObjectRootBase ()
 
void SetVoid (void *)
 
HRESULT _AtlFinalConstruct ()
 
HRESULT FinalConstruct ()
 
void InternalFinalConstructAddRef ()
 
void InternalFinalConstructRelease ()
 
void FinalRelease ()
 
HRESULT CreateViewWindow3 ([in] IShellBrowser *owner, [in, unique] IShellView *prev_view, [in] SV3CVW3_FLAGS view_flags, [in] FOLDERFLAGS mask, [in] FOLDERFLAGS flags, [in] FOLDERVIEWMODE mode, [in, unique] const SHELLVIEWID *view_id, [in] const RECT *rect, [out] HWND *hwnd)
 
- Public Member Functions inherited from IShellView2
HRESULT GetView ([in, out] SHELLVIEWID *view_guid, [in] ULONG view_type)
 
HRESULT CreateViewWindow2 ([in] LPSV2CVW2_PARAMS view_params)
 
HRESULT HandleRename ([in] PCUITEMID_CHILD new_pidl)
 
HRESULT SelectAndPositionItem ([in] PCUITEMID_CHILD item, [in] UINT flags, [in] POINT *point)
 
HRESULT TranslateAccelerator ([in] MSG *pmsg)
 
HRESULT EnableModeless ([in] BOOL fEnable)
 
HRESULT UIActivate ([in] UINT uState)
 
HRESULT Refresh ()
 
HRESULT CreateViewWindow ([in] IShellView *psvPrevious, [in] LPCFOLDERSETTINGS lpfs, [in] IShellBrowser *psb, [out] RECT *prcView, [out] HWND *phWnd)
 
HRESULT DestroyViewWindow ()
 
HRESULT GetCurrentInfo ([out] LPFOLDERSETTINGS lpfs)
 
HRESULT AddPropertySheetPages ([in] DWORD dwReserved, [in] LPFNSVADDPROPSHEETPAGE pfn, [in] LPARAM lparam)
 
HRESULT SaveViewState ()
 
HRESULT SelectItem ([in] PCUITEMID_CHILD pidlItem, [in] SVSIF uFlags)
 
HRESULT GetItemObject ([in] UINT uItem, [in] REFIID riid, [out, iid_is(riid)] void **ppv)
 
HRESULT GetWindow ([out] HWND *phwnd)
 
HRESULT ContextSensitiveHelp ([in] BOOL fEnterMode)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 
HRESULT GetCurrentViewMode ([out] UINT *mode)
 
HRESULT SetCurrentViewMode ([in] UINT mode)
 
HRESULT GetFolder ([in] REFIID riid, [out, iid_is(riid)] void **ppv)
 
HRESULT Item ([in] int index, [out] PITEMID_CHILD *ppidl)
 
HRESULT ItemCount ([in] UINT flags, [out] int *items)
 
HRESULT Items ([in] UINT flags, [in] REFIID riid, [out, iid_is(riid)] void **ppv)
 
HRESULT GetSelectionMarkedItem ([out] int *item)
 
HRESULT GetFocusedItem ([out] int *item)
 
HRESULT GetItemPosition ([in] PCUITEMID_CHILD pidl, [out] POINT *ppt)
 
HRESULT GetSpacing ([in, out, unique] POINT *pt)
 
HRESULT GetDefaultSpacing ([out] POINT *pt)
 
HRESULT GetAutoArrange ()
 
HRESULT SelectItem ([in] int item, [in] DWORD flags)
 
HRESULT SelectAndPositionItems ([in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in, unique, size_is(cidl)] POINT *apt, [in] DWORD flags)
 
HRESULT QueryStatus ([in, unique] const GUID *pguidCmdGroup, [in] ULONG cCmds, [in, out, size_is(cCmds)] OLECMD prgCmds[], [in, out, unique] OLECMDTEXT *pCmdText)
 
HRESULT Exec ([in, unique] const GUID *pguidCmdGroup, [in] DWORD nCmdID, [in] DWORD nCmdexecopt, [in, unique] VARIANT *pvaIn, [in, out, unique] VARIANT *pvaOut)
 
HRESULT DragEnter ([in, unique] IDataObject *pDataObj, [in] DWORD grfKeyState, [in] POINTL pt, [in, out] DWORD *pdwEffect)
 
HRESULT DragOver ([in] DWORD grfKeyState, [in] POINTL pt, [in, out] DWORD *pdwEffect)
 
HRESULT DragLeave ()
 
HRESULT Drop ([in, unique] IDataObject *pDataObj, [in] DWORD grfKeyState, [in] POINTL pt, [in, out] DWORD *pdwEffect)
 
HRESULT QueryContinueDrag ([in] BOOL fEscapePressed, [in] DWORD grfKeyState)
 
HRESULT GiveFeedback ([in] DWORD dwEffect)
 
- Public Member Functions inherited from IViewObject
HRESULT Draw ([in] DWORD dwDrawAspect, [in] LONG lindex, [in, unique] void *pvAspect, [in, unique] DVTARGETDEVICE *ptd, [in] HDC hdcTargetDev, [in] HDC hdcDraw, [in] LPCRECTL lprcBounds, [in, unique] LPCRECTL lprcWBounds, [in] BOOL(*pfnContinue)(ULONG_PTR dwContinue), [in] ULONG_PTR dwContinue)
 
HRESULT RemoteDraw ([in] DWORD dwDrawAspect, [in] LONG lindex, [in] ULONG_PTR pvAspect, [in, unique] DVTARGETDEVICE *ptd, [in] ULONG_PTR hdcTargetDev, [in] ULONG_PTR hdcDraw, [in] LPCRECTL lprcBounds, [in, unique] LPCRECTL lprcWBounds, [in] IContinue *pContinue)
 
HRESULT GetColorSet ([in] DWORD dwDrawAspect, [in] LONG lindex, [in, unique] void *pvAspect, [in, unique] DVTARGETDEVICE *ptd, [in] HDC hicTargetDev, [out] LOGPALETTE **ppColorSet)
 
HRESULT RemoteGetColorSet ([in] DWORD dwDrawAspect, [in] LONG lindex, [in] ULONG_PTR pvAspect, [in, unique] DVTARGETDEVICE *ptd, [in] ULONG_PTR hicTargetDev, [out] LOGPALETTE **ppColorSet)
 
HRESULT Freeze ([in] DWORD dwDrawAspect, [in] LONG lindex, [in, unique] void *pvAspect, [out] DWORD *pdwFreeze)
 
HRESULT RemoteFreeze ([in] DWORD dwDrawAspect, [in] LONG lindex, [in] ULONG_PTR pvAspect, [out] DWORD *pdwFreeze)
 
HRESULT Unfreeze ([in] DWORD dwFreeze)
 
HRESULT SetAdvise ([in] DWORD aspects, [in] DWORD advf, [in, unique] IAdviseSink *pAdvSink)
 
HRESULT GetAdvise ([out, unique] DWORD *pAspects, [out, unique] DWORD *pAdvf, [out] IAdviseSink **ppAdvSink)
 
HRESULT RemoteGetAdvise ([out] DWORD *pAspects, [out] DWORD *pAdvf, [out] IAdviseSink **ppAdvSink)
 
- Public Member Functions inherited from IServiceProvider
HRESULT QueryService ([in] REFGUID guidService, [in] REFIID riid, [out] void **ppvObject)
 
HRESULT RemoteQueryService ([in] REFGUID guidService, [in] REFIID riid, [out, iid_is(riid)] IUnknown **ppvObject)
 

Static Public Member Functions

static INT CALLBACK ListViewCompareItems (LPARAM lParam1, LPARAM lParam2, LPARAM lpData)
 
static INT CALLBACK fill_list (LPVOID ptr, LPVOID arg)
 
static ATL::CWndClassInfoGetWndClassInfo ()
 
static LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
- Static Public Member Functions inherited from ATL::CWindowImpl< CDefView, CWindow, CControlWinTraits >
static LPCTSTR GetWndCaption ()
 
- Static Public Member Functions inherited from ATL::CWindowImplBaseT< TBase, TWinTraits >
static DWORD GetWndStyle (DWORD dwStyle)
 
static DWORD GetWndExStyle (DWORD dwExStyle)
 
static LRESULT CALLBACK StartWindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
static LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
- Static Public Member Functions inherited from ATL::CWindow
static LPCTSTR GetWndClassName ()
 
static LRESULT SendMessage (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 
- Static Public Member Functions inherited from ATL::CComObjectRootBase
static void WINAPI ObjectMain (bool)
 
static const struct _ATL_CATMAP_ENTRYGetCategoryMap ()
 
static HRESULT WINAPI InternalQueryInterface (void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject)
 

Private Member Functions

HRESULT _MergeToolbar ()
 
BOOL _Sort (int Col=-1)
 
HRESULT _DoFolderViewCB (UINT uMsg, WPARAM wParam, LPARAM lParam)
 
HRESULT _GetSnapToGrid ()
 
void _MoveSelectionOnAutoArrange (POINT pt)
 
INT _FindInsertableIndexFromPoint (POINT pt)
 
void _HandleStatusBarResize (int width)
 
void _ForceStatusBarResize ()
 
void _DoCopyToMoveToFolder (BOOL bCopy)
 
BOOL IsDesktop () const
 

Private Attributes

CComPtr< IShellFolderm_pSFParent
 
CComPtr< IShellFolder2m_pSF2Parent
 
CComPtr< IShellDetails > m_pSDParent
 
CComPtr< IShellFolderViewCB > m_pShellFolderViewCB
 
CComPtr< IShellBrowserm_pShellBrowser
 
CComPtr< ICommDlgBrowserm_pCommDlgBrowser
 
CComPtr< IFolderFilterm_pFolderFilter
 
CComPtr< IShellFolderViewDual > m_pShellFolderViewDual
 
ClipboardViewerChain m_ClipboardChain
 
CListView m_ListView
 
HWND m_hWndParent
 
FOLDERSETTINGS m_FolderSettings
 
HMENU m_hMenu
 
HMENU m_hMenuArrangeModes
 
HMENU m_hMenuViewModes
 
HMENU m_hContextMenu
 
BOOL m_bmenuBarInitialized
 
UINT m_uState
 
UINT m_cidl
 
PCUITEMID_CHILDm_apidl
 
PIDLIST_ABSOLUTE m_pidlParent
 
HDPA m_LoadColumnsList
 
HDPA m_ListToFolderColMap
 
LISTVIEW_SORT_INFO m_sortInfo
 
ULONG m_hNotify
 
HACCEL m_hAccel
 
DWORD m_dwAspects
 
DWORD m_dwAdvf
 
CComPtr< IAdviseSinkm_pAdvSink
 
CComPtr< IDataObjectm_pSourceDataObject
 
CComPtr< IDropTargetm_pCurDropTarget
 
CComPtr< IDataObjectm_pCurDataObject
 
LONG m_iDragOverItem
 
UINT m_cScrollDelay
 
POINT m_ptLastMousePos
 
POINT m_ptFirstMousePos
 
DWORD m_grfKeyState
 
CComPtr< IContextMenum_pCM
 
CComPtr< IContextMenum_pFileMenu
 
BOOL m_isEditing
 
BOOL m_isParentFolderSpecial
 
bool m_ScheduledStatusbarUpdate
 
bool m_HasCutItems
 
CLSID m_Category
 
BOOL m_Destroyed
 
SFVM_CUSTOMVIEWINFO_DATA m_viewinfo_data
 
HICON m_hMyComputerIcon
 

Additional Inherited Members

- Public Types inherited from ATL::CWindowImplRoot< TBase >
enum  { WINSTATE_DESTROYED = 0x00000001 }
 
- Public Types inherited from IShellView3
enum  _SV3CVW3_FLAGS { SV3CVW3_DEFAULT = 0x00000000 , SV3CVW3_NONINTERACTIVE = 0x00000001 , SV3CVW3_FORCEVIEWMODE = 0x00000002 , SV3CVW3_FORCEFOLDERFLAGS = 0x00000004 }
 
typedef DWORD SV3CVW3_FLAGS
 
- Public Types inherited from IShellView2
typedef GUID SHELLVIEWID
 
typedef struct IShellView2::_SV2CVW2_PARAMS SV2CVW2_PARAMS
 
typedef struct IShellView2::_SV2CVW2_PARAMSLPSV2CVW2_PARAMS
 
- Public Types inherited from IShellView
enum  SVGIO {
  SVGIO_BACKGROUND = 0x00000000 , SVGIO_SELECTION = 0x00000001 , SVGIO_ALLVIEW = 0x00000002 , SVGIO_CHECKED = 0x00000003 ,
  SVGIO_TYPE_MASK = 0x0000000f , SVGIO_FLAG_VIEWORDER = 0x80000000
}
 
enum  SVUIA_STATUS { SVUIA_DEACTIVATE = 0 , SVUIA_ACTIVATE_NOFOCUS = 1 , SVUIA_ACTIVATE_FOCUS = 2 , SVUIA_INPLACEACTIVATE = 3 }
 
typedef IShellViewLPSHELLVIEW
 
typedef UINT SVSIF
 
- Public Types inherited from IOleWindow
typedef IOleWindowLPOLEWINDOW
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- Public Types inherited from IOleCommandTarget
enum  OLECMDF {
  OLECMDF_SUPPORTED = 0x1 , OLECMDF_ENABLED = 0x2 , OLECMDF_LATCHED = 0x4 , OLECMDF_NINCHED = 0x8 ,
  OLECMDF_INVISIBLE = 0x10 , OLECMDF_DEFHIDEONCTXTMENU = 0x20
}
 
enum  OLECMDTEXTF { OLECMDTEXTF_NONE = 0 , OLECMDTEXTF_NAME = 1 , OLECMDTEXTF_STATUS = 2 }
 
enum  OLECMDEXECOPT { OLECMDEXECOPT_DODEFAULT = 0 , OLECMDEXECOPT_PROMPTUSER = 1 , OLECMDEXECOPT_DONTPROMPTUSER = 2 , OLECMDEXECOPT_SHOWHELP = 3 }
 
enum  OLECMDID {
  OLECMDID_OPEN = 1 , OLECMDID_NEW = 2 , OLECMDID_SAVE = 3 , OLECMDID_SAVEAS = 4 ,
  OLECMDID_SAVECOPYAS = 5 , OLECMDID_PRINT = 6 , OLECMDID_PRINTPREVIEW = 7 , OLECMDID_PAGESETUP = 8 ,
  OLECMDID_SPELL = 9 , OLECMDID_PROPERTIES = 10 , OLECMDID_CUT = 11 , OLECMDID_COPY = 12 ,
  OLECMDID_PASTE = 13 , OLECMDID_PASTESPECIAL = 14 , OLECMDID_UNDO = 15 , OLECMDID_REDO = 16 ,
  OLECMDID_SELECTALL = 17 , OLECMDID_CLEARSELECTION = 18 , OLECMDID_ZOOM = 19 , OLECMDID_GETZOOMRANGE = 20 ,
  OLECMDID_UPDATECOMMANDS = 21 , OLECMDID_REFRESH = 22 , OLECMDID_STOP = 23 , OLECMDID_HIDETOOLBARS = 24 ,
  OLECMDID_SETPROGRESSMAX = 25 , OLECMDID_SETPROGRESSPOS = 26 , OLECMDID_SETPROGRESSTEXT = 27 , OLECMDID_SETTITLE = 28 ,
  OLECMDID_SETDOWNLOADSTATE = 29 , OLECMDID_STOPDOWNLOAD = 30 , OLECMDID_ONTOOLBARACTIVATED = 31 , OLECMDID_FIND = 32 ,
  OLECMDID_DELETE = 33 , OLECMDID_HTTPEQUIV = 34 , OLECMDID_HTTPEQUIV_DONE = 35 , OLECMDID_ENABLE_INTERACTION = 36 ,
  OLECMDID_ONUNLOAD = 37 , OLECMDID_PROPERTYBAG2 = 38 , OLECMDID_PREREFRESH = 39 , OLECMDID_SHOWSCRIPTERROR = 40 ,
  OLECMDID_SHOWMESSAGE = 41 , OLECMDID_SHOWFIND = 42 , OLECMDID_SHOWPAGESETUP = 43 , OLECMDID_SHOWPRINT = 44 ,
  OLECMDID_CLOSE = 45 , OLECMDID_ALLOWUILESSSAVEAS = 46 , OLECMDID_DONTDOWNLOADCSS = 47 , OLECMDID_UPDATEPAGESTATUS = 48 ,
  OLECMDID_PRINT2 = 49 , OLECMDID_PRINTPREVIEW2 = 50 , OLECMDID_SETPRINTTEMPLATE = 51 , OLECMDID_GETPRINTTEMPLATE = 52 ,
  OLECMDID_PAGEACTIONBLOCKED = 55 , OLECMDID_PAGEACTIONUIQUERY = 56 , OLECMDID_FOCUSVIEWCONTROLS = 57 , OLECMDID_FOCUSVIEWCONTROLSQUERY = 58 ,
  OLECMDID_SHOWPAGEACTIONMENU = 59 , OLECMDID_ADDTRAVELENTRY = 60 , OLECMDID_UPDATETRAVELENTRY = 61 , OLECMDID_UPDATEBACKFORWARDSTATE = 62 ,
  OLECMDID_OPTICAL_ZOOM = 63 , OLECMDID_OPTICAL_GETZOOMRANGE = 64 , OLECMDID_WINDOWSTATECHANGED = 65 , OLECMDID_ACTIVEXINSTALLSCOPE = 66 ,
  OLECMDID_UPDATETRAVELENTRY_DATARECOVERY = 67 , OLECMDID_SHOWTASKDLG = 68 , OLECMDID_POPSTATEEVENT = 69 , OLECMDID_VIEWPORT_MODE = 70 ,
  OLECMDID_LAYOUT_VIEWPORT_WIDTH = 71 , OLECMDID_VISUAL_VIEWPORT_EXCLUDE_BOTTOM = 72 , OLECMDID_USER_OPTICAL_ZOOM = 73 , OLECMDID_PAGEAVAILABLE = 74 ,
  OLECMDID_GETUSERSCALABLE = 75 , OLECMDID_UPDATE_CARET = 76 , OLECMDID_ENABLE_VISIBILITY = 77 , OLECMDID_MEDIA_PLAYBACK = 78
}
 
typedef IOleCommandTargetLPOLECOMMANDTARGET
 
typedef enum IOleCommandTarget::OLECMDF OLECMDF
 
typedef struct IOleCommandTarget::_tagOLECMD OLECMD
 
typedef struct IOleCommandTarget::_tagOLECMDTEXT OLECMDTEXT
 
typedef enum IOleCommandTarget::OLECMDTEXTF OLECMDTEXTF
 
typedef enum IOleCommandTarget::OLECMDEXECOPT OLECMDEXECOPT
 
typedef enum IOleCommandTarget::OLECMDID OLECMDID
 
- Public Types inherited from IDropTarget
typedef IDropTargetLPDROPTARGET
 
- Public Types inherited from IDropSource
typedef IDropSourceLPDROPSOURCE
 
- Public Types inherited from IViewObject
typedef IViewObjectLPVIEWOBJECT
 
- Public Types inherited from IServiceProvider
typedef IServiceProviderLPSERVICEPROVIDER
 
- Public Attributes inherited from ATL::CWindowImplBaseT< TBase, TWinTraits >
WNDPROC m_pfnSuperWindowProc
 
- Public Attributes inherited from ATL::CWindowImplRoot< TBase >
CWndProcThunk m_thunk
 
const _ATL_MSGm_pCurrentMsg
 
DWORD m_dwState
 
- Public Attributes inherited from ATL::CWindow
HWND m_hWnd
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 
- Public Attributes inherited from IDropTarget
const DWORD MK_ALT = 0x20
 
const DWORD DROPEFFECT_NONE = 0
 
const DWORD DROPEFFECT_COPY = 1
 
const DWORD DROPEFFECT_MOVE = 2
 
const DWORD DROPEFFECT_LINK = 4
 
const DWORD DROPEFFECT_SCROLL = 0x80000000
 
const DWORD DD_DEFSCROLLINSET = 11
 
const DWORD DD_DEFSCROLLDELAY = 50
 
const DWORD DD_DEFSCROLLINTERVAL = 50
 
const DWORD DD_DEFDRAGDELAY = 200
 
const DWORD DD_DEFDRAGMINDIST = 2
 
- Static Public Attributes inherited from ATL::CWindow
static RECT rcDefault
 

Detailed Description

Definition at line 220 of file CDefView.cpp.

Constructor & Destructor Documentation

◆ CDefView()

CDefView::CDefView ( )

Definition at line 583 of file CDefView.cpp.

583 :
584 m_ListView(),
586 m_hMenu(NULL),
591 m_uState(0),
592 m_cidl(0),
593 m_apidl(NULL),
596 m_hNotify(0),
597 m_hAccel(NULL),
598 m_dwAspects(0),
599 m_dwAdvf(0),
605 m_HasCutItems(false),
607{
614
618}
#define shell32_hInstance
HMENU m_hMenu
Definition: CDefView.cpp:245
HDPA m_LoadColumnsList
Definition: CDefView.cpp:254
bool m_ScheduledStatusbarUpdate
Definition: CDefView.cpp:277
HMENU m_hMenuArrangeModes
Definition: CDefView.cpp:246
HWND m_hWndParent
Definition: CDefView.cpp:243
DWORD m_dwAdvf
Definition: CDefView.cpp:260
DWORD m_dwAspects
Definition: CDefView.cpp:259
BOOL m_isParentFolderSpecial
Definition: CDefView.cpp:276
UINT m_cScrollDelay
Definition: CDefView.cpp:267
LISTVIEW_SORT_INFO m_sortInfo
Definition: CDefView.cpp:256
PIDLIST_ABSOLUTE m_pidlParent
Definition: CDefView.cpp:253
HMENU m_hContextMenu
Definition: CDefView.cpp:248
BOOL m_Destroyed
Definition: CDefView.cpp:281
PCUITEMID_CHILD * m_apidl
Definition: CDefView.cpp:252
HDPA m_ListToFolderColMap
Definition: CDefView.cpp:255
CLSID m_Category
Definition: CDefView.cpp:280
HICON m_hMyComputerIcon
Definition: CDefView.cpp:284
BOOL m_bmenuBarInitialized
Definition: CDefView.cpp:249
UINT m_cidl
Definition: CDefView.cpp:251
UINT m_uState
Definition: CDefView.cpp:250
BOOL m_isEditing
Definition: CDefView.cpp:275
POINT m_ptLastMousePos
Definition: CDefView.cpp:268
ULONG m_hNotify
Definition: CDefView.cpp:257
bool m_HasCutItems
Definition: CDefView.cpp:278
LONG m_iDragOverItem
Definition: CDefView.cpp:266
HMENU m_hMenuViewModes
Definition: CDefView.cpp:247
HACCEL m_hAccel
Definition: CDefView.cpp:258
FOLDERSETTINGS m_FolderSettings
Definition: CDefView.cpp:244
CListView m_ListView
Definition: CDefView.cpp:242
SFVM_CUSTOMVIEWINFO_DATA m_viewinfo_data
Definition: CDefView.cpp:282
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
HDPA WINAPI DPA_Create(INT nGrow)
Definition: dpa.c:950
#define IDI_SHELL_COMPUTER_DESKTOP
Definition: shresdef.h:651
#define ZeroMemory
Definition: winbase.h:1737
#define CLR_INVALID
Definition: wingdi.h:883
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2161

◆ ~CDefView()

CDefView::~CDefView ( )

Definition at line 620 of file CDefView.cpp.

621{
622 TRACE(" destroying IShellView(%p)\n", this);
623
625
627 {
630 }
631
632 if (m_hWnd)
633 {
635 }
636
640}
#define SFVM_VIEWRELEASE
HWND m_hWnd
Definition: atlwin.h:273
STDMETHOD() DestroyViewWindow() override
Definition: CDefView.cpp:3180
HRESULT _DoFolderViewCB(UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: CDefView.cpp:4742
BOOL WINAPI DPA_Destroy(HDPA hdpa)
Definition: dpa.c:396
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
pKey DeleteObject()
#define TRACE(s)
Definition: solgame.cpp:4

Member Function Documentation

◆ _DoCopyToMoveToFolder()

void CDefView::_DoCopyToMoveToFolder ( BOOL  bCopy)
private

Definition at line 2434 of file CDefView.cpp.

2435{
2436 if (!GetSelections())
2437 return;
2438
2439 SFGAOF rfg = SFGAO_CANCOPY | SFGAO_CANMOVE | SFGAO_FILESYSTEM;
2440 HRESULT hr = m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &rfg);
2442 return;
2443
2444 if (!bCopy && !(rfg & SFGAO_CANMOVE))
2445 return;
2446 if (bCopy && !(rfg & SFGAO_CANCOPY))
2447 return;
2448
2450 hr = m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, m_apidl, IID_IContextMenu, 0, (void **)&pCM);
2452 return;
2453
2454 InvokeContextMenuCommand(pCM, (bCopy ? "copyto" : "moveto"), NULL);
2455}
CComPtr< IShellFolder > m_pSFParent
Definition: CDefView.cpp:233
HRESULT InvokeContextMenuCommand(CComPtr< IContextMenu > &pCM, LPCSTR lpVerb, POINT *pt=NULL)
Definition: CDefView.cpp:2113
UINT GetSelections()
Definition: CDefView.cpp:2072
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
Definition: ebrowser.c:83
HRESULT hr
Definition: shlfolder.c:183

Referenced by OnCommand().

◆ _DoFolderViewCB()

HRESULT CDefView::_DoFolderViewCB ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
private

Definition at line 4742 of file CDefView.cpp.

4743{
4745
4747 {
4748 hr = m_pShellFolderViewCB->MessageSFVCB(uMsg, wParam, lParam);
4749 }
4750
4751 return hr;
4752}
CComPtr< IShellFolderViewCB > m_pShellFolderViewCB
Definition: CDefView.cpp:236
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define E_NOTIMPL
Definition: ddrawi.h:99

Referenced by AddPropertySheetPages(), CreateList(), CreateViewWindow3(), DestroyViewWindow(), FillList(), GetDefaultViewMode(), InvokeContextMenuCommand(), LV_AddItem(), LV_DeleteItem(), LV_UpdateItem(), OnChangeNotify(), OnCommand(), OnCreate(), OnNotify(), OnSize(), Refresh(), and ~CDefView().

◆ _FindInsertableIndexFromPoint()

INT CDefView::_FindInsertableIndexFromPoint ( POINT  pt)
private

Definition at line 4398 of file CDefView.cpp.

4399{
4400 RECT rcBound;
4401 INT i, nCount = m_ListView.GetItemCount();
4402 DWORD dwSpacing;
4403 INT dx, dy;
4404 BOOL bSmall = ((m_ListView.GetStyle() & LVS_TYPEMASK) != LVS_ICON);
4405
4406 // FIXME: LVM_GETORIGIN is broken. See CORE-17266
4407 pt.x += m_ListView.GetScrollPos(SB_HORZ);
4408 pt.y += m_ListView.GetScrollPos(SB_VERT);
4409
4410 if (m_ListView.GetStyle() & LVS_ALIGNLEFT)
4411 {
4412 // vertically
4413 for (i = 0; i < nCount; ++i)
4414 {
4415 dwSpacing = ListView_GetItemSpacing(m_ListView, bSmall);
4416 dx = LOWORD(dwSpacing);
4417 dy = HIWORD(dwSpacing);
4419 rcBound.right = rcBound.left + dx;
4420 rcBound.bottom = rcBound.top + dy;
4421 if (pt.x < rcBound.right && pt.y < (rcBound.top + rcBound.bottom) / 2)
4422 {
4423 return i;
4424 }
4425 }
4426 for (i = nCount - 1; i >= 0; --i)
4427 {
4429 if (rcBound.left < pt.x && rcBound.top < pt.y)
4430 {
4431 return i + 1;
4432 }
4433 }
4434 }
4435 else
4436 {
4437 // horizontally
4438 for (i = 0; i < nCount; ++i)
4439 {
4440 dwSpacing = ListView_GetItemSpacing(m_ListView, bSmall);
4441 dx = LOWORD(dwSpacing);
4442 dy = HIWORD(dwSpacing);
4444 rcBound.right = rcBound.left + dx;
4445 rcBound.bottom = rcBound.top + dy;
4446 if (pt.y < rcBound.bottom && pt.x < rcBound.left)
4447 {
4448 return i;
4449 }
4450 if (pt.y < rcBound.bottom && pt.x < rcBound.right)
4451 {
4452 return i + 1;
4453 }
4454 }
4455 for (i = nCount - 1; i >= 0; --i)
4456 {
4458 if (rcBound.left < pt.x && rcBound.top < pt.y)
4459 {
4460 return i + 1;
4461 }
4462 }
4463 }
4464
4465 return nCount;
4466}
int GetItemCount()
Definition: rosctrls.h:121
#define pt(x, y)
Definition: drawing.c:79
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLint dy
Definition: linetemp.h:97
GLint dx
Definition: linetemp.h:97
#define LOWORD(l)
Definition: pedump.c:82
#define ListView_GetItemRect(hwnd, i, prc, code)
Definition: commctrl.h:2483
#define LVS_ICON
Definition: commctrl.h:2266
#define LVS_TYPEMASK
Definition: commctrl.h:2270
#define LVIR_SELECTBOUNDS
Definition: commctrl.h:2480
#define LVS_ALIGNLEFT
Definition: commctrl.h:2285
#define ListView_GetItemSpacing(hwndLV, fSmall)
Definition: commctrl.h:2717
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
int32_t INT
Definition: typedefs.h:58
#define HIWORD(l)
Definition: typedefs.h:247
#define SB_VERT
Definition: winuser.h:553
#define SB_HORZ
Definition: winuser.h:552

Referenced by _MoveSelectionOnAutoArrange().

◆ _ForceStatusBarResize()

void CDefView::_ForceStatusBarResize ( )
private

Definition at line 4494 of file CDefView.cpp.

4495{
4496 // Get the handle for the status bar
4497 HWND fStatusBar;
4498 m_pShellBrowser->GetControlWindow(FCW_STATUS, &fStatusBar);
4499
4500 // Get the size of our status bar
4501 RECT statusBarSize;
4502 ::GetWindowRect(fStatusBar, &statusBarSize);
4503
4504 // Resize the status bar
4505 _HandleStatusBarResize(statusBarSize.right - statusBarSize.left);
4506}
CComPtr< IShellBrowser > m_pShellBrowser
Definition: CDefView.cpp:237
void _HandleStatusBarResize(int width)
Definition: CDefView.cpp:4468
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)

Referenced by OnCreate(), OnSize(), and UIActivate().

◆ _GetSnapToGrid()

HRESULT CDefView::_GetSnapToGrid ( )
private

Definition at line 3712 of file CDefView.cpp.

3713{
3714 DWORD dwExStyle = (DWORD)m_ListView.SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
3715 return ((dwExStyle & LVS_EX_SNAPTOGRID) ? S_OK : S_FALSE);
3716}
#define S_OK
Definition: intsafe.h:52
#define DWORD
Definition: nt_native.h:44
#define LVS_EX_SNAPTOGRID
Definition: commctrl.h:2753
#define LVM_GETEXTENDEDLISTVIEWSTYLE
Definition: commctrl.h:2732
#define S_FALSE
Definition: winerror.h:2357

Referenced by FillArrangeAsMenu(), OnCommand(), and UpdateFolderViewFlags().

◆ _HandleStatusBarResize()

void CDefView::_HandleStatusBarResize ( int  width)
private

Definition at line 4468 of file CDefView.cpp.

4469{
4470 LRESULT lResult;
4471
4473 {
4474 int nPartArray[] = {-1};
4475 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETPARTS, _countof(nPartArray), (LPARAM)nPartArray, &lResult);
4476 return;
4477 }
4478
4479 int nFileSizePartLength = 125;
4480 const int nLocationPartLength = 150;
4481 const int nRightPartsLength = nFileSizePartLength + nLocationPartLength;
4482 int nObjectsPartLength = nWidth - nRightPartsLength;
4483
4484 // If the window is small enough just divide each part into thirds
4485 // to match the behavior of Windows Server 2003
4486 if (nObjectsPartLength <= nLocationPartLength)
4487 nObjectsPartLength = nFileSizePartLength = nWidth / 3;
4488
4489 int nPartArray[] = {nObjectsPartLength, nObjectsPartLength + nFileSizePartLength, -1};
4490
4491 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETPARTS, _countof(nPartArray), (LPARAM)nPartArray, &lResult);
4492}
#define SB_SETPARTS
Definition: commctrl.h:1959
#define _countof(array)
Definition: sndvol32.h:70
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209

Referenced by _ForceStatusBarResize().

◆ _MergeToolbar()

HRESULT CDefView::_MergeToolbar ( )
private

Definition at line 4715 of file CDefView.cpp.

4716{
4718 HRESULT hr = S_OK;
4719
4720 hr = IUnknown_QueryService(m_pShellBrowser, IID_IExplorerToolbar, IID_PPV_ARG(IExplorerToolbar, &ptb));
4721 if (FAILED(hr))
4722 return hr;
4723
4724 m_Category = CGID_DefViewFrame;
4725
4726 hr = ptb->SetCommandTarget(static_cast<IOleCommandTarget*>(this), &m_Category, 0);
4727 if (FAILED(hr))
4728 return hr;
4729
4730 if (hr == S_FALSE)
4731 return S_OK;
4732
4733#if 0
4734 hr = ptb->AddButtons(&m_Category, buttonsCount, buttons);
4735 if (FAILED(hr))
4736 return hr;
4737#endif
4738
4739 return S_OK;
4740}
HRESULT WINAPI IUnknown_QueryService(IUnknown *, REFGUID, REFIID, LPVOID *)
Definition: ordinal.c:1501
#define FAILED(hr)
Definition: intsafe.h:51
HWND buttons[5]
Definition: sndrec32.cpp:40
#define IID_PPV_ARG(Itype, ppType)

Referenced by CreateViewWindow3().

◆ _MoveSelectionOnAutoArrange()

void CDefView::_MoveSelectionOnAutoArrange ( POINT  pt)
private

Definition at line 4522 of file CDefView.cpp.

4523{
4524 // get insertable index from position
4526
4527 // create identity mapping of indexes
4529 INT nCount = m_ListView.GetItemCount();
4530 for (INT i = 0; i < nCount; ++i)
4531 {
4532 array.Add(i);
4533 }
4534
4535 // re-ordering mapping
4536 INT iItem = -1;
4537 while ((iItem = m_ListView.GetNextItem(iItem, LVNI_SELECTED)) >= 0)
4538 {
4539 INT iFrom = iItem, iTo = iPosition;
4540 if (iFrom < iTo)
4541 --iTo;
4542 if (iFrom >= nCount)
4543 iFrom = nCount - 1;
4544 if (iTo >= nCount)
4545 iTo = nCount - 1;
4546
4547 // shift indexes by swapping (like a bucket relay)
4548 if (iFrom < iTo)
4549 {
4550 for (INT i = iFrom; i < iTo; ++i)
4551 {
4552 // swap array[i] and array[i + 1]
4553 INT tmp = array[i];
4554 array[i] = array[i + 1];
4555 array[i + 1] = tmp;
4556 }
4557 }
4558 else
4559 {
4560 for (INT i = iFrom; i > iTo; --i)
4561 {
4562 // swap array[i] and array[i - 1]
4563 INT tmp = array[i];
4564 array[i] = array[i - 1];
4565 array[i - 1] = tmp;
4566 }
4567 }
4568 }
4569
4570 // create mapping (ListView's lParam to index) from array
4572 for (INT i = 0; i < nCount; ++i)
4573 {
4575 map.Add(lParam, i);
4576 }
4577
4578 // finally sort
4580}
static INT CALLBACK SelectionMoveCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
Definition: CDefView.cpp:4511
INT _FindInsertableIndexFromPoint(POINT pt)
Definition: CDefView.cpp:4398
int GetNextItem(int i, WORD flags)
Definition: rosctrls.h:161
BOOL SortItems(PFNLVCOMPARE pfnCompare, PVOID lParam)
Definition: rosctrls.h:141
DWORD_PTR GetItemData(int i)
Definition: rosctrls.h:204
Definition: _map.h:48
#define LVNI_SELECTED
Definition: commctrl.h:2429

Referenced by Drop().

◆ _PidlByItem() [1/2]

PCUITEMID_CHILD CDefView::_PidlByItem ( int  i)

Definition at line 1313 of file CDefView.cpp.

1314{
1315 if (!m_ListView)
1316 return nullptr;
1317 return reinterpret_cast<PCUITEMID_CHILD>(m_ListView.GetItemData(i));
1318}
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70

Referenced by drag_notify_subitem(), GetItemAttributes(), GetSelections(), Item(), LV_FindItemByPidl(), LV_UpdateItem(), OnNotify(), and UpdateStatusbar().

◆ _PidlByItem() [2/2]

PCUITEMID_CHILD CDefView::_PidlByItem ( LVITEM lvItem)

Definition at line 1320 of file CDefView.cpp.

1321{
1322 if (!m_ListView)
1323 return nullptr;
1324 return reinterpret_cast<PCUITEMID_CHILD>(lvItem.lParam);
1325}

◆ _Sort()

BOOL CDefView::_Sort ( int  Col = -1)
private

Definition at line 1249 of file CDefView.cpp.

1250{
1251 HWND hHeader;
1252 HDITEM hColumn;
1253 int prevCol = m_sortInfo.ListColumn;
1255
1256 // FIXME: Is this correct? Who sets this style?
1257 // And if it is set, should it also block sorting using the menu?
1258 // Any why should it block sorting when the view is loaded initially?
1259 if (m_ListView.GetWindowLongPtr(GWL_STYLE) & LVS_NOSORTHEADER)
1260 return TRUE;
1261
1262 hHeader = ListView_GetHeader(m_ListView.m_hWnd);
1263 if (Col != -1)
1264 {
1265 if (Col >= Header_GetItemCount(hHeader))
1266 {
1267 ERR("Sort column out of range\n");
1268 return FALSE;
1269 }
1270
1271 if (prevCol == Col)
1272 m_sortInfo.Direction *= -1;
1273 else
1275 m_sortInfo.ListColumn = Col;
1276 }
1277 if (!m_sortInfo.Direction)
1278 m_sortInfo.Direction += 1;
1279
1280 /* If the sorting column changed, remove the sorting style from the old column */
1281 if (prevCol != -1 && prevCol != m_sortInfo.ListColumn)
1282 {
1283 hColumn.mask = HDI_FORMAT;
1284 Header_GetItem(hHeader, prevCol, &hColumn);
1285 hColumn.fmt &= ~(HDF_SORTUP | HDF_SORTDOWN);
1286 Header_SetItem(hHeader, prevCol, &hColumn);
1287 }
1288
1289 /* Set the sorting style on the new column */
1290 hColumn.mask = HDI_FORMAT;
1291 Header_GetItem(hHeader, m_sortInfo.ListColumn, &hColumn);
1292 hColumn.fmt &= ~(HDF_SORTDOWN | HDF_SORTUP);
1293 hColumn.fmt |= (m_sortInfo.Direction > 0 ? HDF_SORTUP : HDF_SORTDOWN);
1294 Header_SetItem(hHeader, m_sortInfo.ListColumn, &hColumn);
1295
1296 /* Sort the list, using the current values of ListColumn and bIsAscending */
1299}
#define ERR(fmt,...)
Definition: precomp.h:57
static INT CALLBACK ListViewCompareItems(LPARAM lParam1, LPARAM lParam2, LPARAM lpData)
Definition: CDefView.cpp:1235
#define TRUE
Definition: types.h:120
#define ASSERT(a)
Definition: mode.c:44
#define Header_GetItem(hwndHD, i, phdi)
Definition: commctrl.h:751
#define Header_SetItem(hwndHD, i, phdi)
Definition: commctrl.h:758
#define ListView_GetHeader(hwnd)
Definition: commctrl.h:2656
#define HDF_SORTUP
Definition: commctrl.h:724
#define HDI_FORMAT
Definition: commctrl.h:705
#define LVS_NOSORTHEADER
Definition: commctrl.h:2290
#define Header_GetItemCount(hwndHD)
Definition: commctrl.h:734
#define HDITEM
Definition: commctrl.h:697
#define HDF_SORTDOWN
Definition: commctrl.h:725
bool bLoadedFromViewState
Definition: CDefView.cpp:64
#define GWL_STYLE
Definition: winuser.h:855

Referenced by FillList(), OnCommand(), OnNotify(), and Rearrange().

◆ AddObject()

HRESULT STDMETHODCALLTYPE CDefView::AddObject ( PITEMID_CHILD  pidl,
UINT item 
)
override

Definition at line 3920 of file CDefView.cpp.

3921{
3922 TRACE("(%p)->(%p %p)\n", this, pidl, item);
3923 if (!m_ListView)
3924 {
3925 ERR("!m_ListView\n");
3926 return E_FAIL;
3927 }
3928 *item = LV_AddItem(pidl);
3929 return (int)*item >= 0 ? S_OK : E_OUTOFMEMORY;
3930}
int LV_AddItem(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1357
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_FAIL
Definition: ddrawi.h:102
static ATOM item
Definition: dde.c:856

◆ AddPropertySheetPages()

HRESULT WINAPI CDefView::AddPropertySheetPages ( DWORD  dwReserved,
LPFNSVADDPROPSHEETPAGE  pfn,
LPARAM  lparam 
)
override

Implements IShellView.

Definition at line 3240 of file CDefView.cpp.

3241{
3242 TRACE("(%p)->(0x%lX, %p, %p)\n", this, dwReserved, lpfn, lparam);
3243
3246 return S_OK;
3247}
@ lparam
Definition: SystemMenu.c:31
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95
#define SFVM_ADDPROPERTYPAGES
Definition: shlobj.h:1335

◆ ArrangeGrid()

HRESULT STDMETHODCALLTYPE CDefView::ArrangeGrid ( )
override

Definition at line 3907 of file CDefView.cpp.

3908{
3910 return S_OK;
3911}
DWORD SetExtendedListViewStyle(DWORD dw, DWORD dwMask=0)
Definition: rosctrls.h:47

Referenced by OnCommand().

◆ AutoArrange()

HRESULT STDMETHODCALLTYPE CDefView::AutoArrange ( )
override

Definition at line 3913 of file CDefView.cpp.

3914{
3915 m_ListView.ModifyStyle(0, LVS_AUTOARRANGE);
3917 return S_OK;
3918}
BOOL Arrange(UINT nCode)
Definition: rosctrls.h:241
#define LVA_DEFAULT
Definition: commctrl.h:2532
#define LVS_AUTOARRANGE
Definition: commctrl.h:2277

Referenced by OnCommand().

◆ CheckToolbar()

void CDefView::CheckToolbar ( )

Definition at line 702 of file CDefView.cpp.

703{
705
706 TRACE("\n");
707
708 if (m_pCommDlgBrowser != NULL)
709 {
710 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_CHECKBUTTON,
712 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_CHECKBUTTON,
714 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON,
716 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON,
718 }
719}
CComPtr< ICommDlgBrowser > m_pCommDlgBrowser
Definition: CDefView.cpp:238
GLuint64EXT * result
Definition: glext.h:11304
#define TB_CHECKBUTTON
Definition: commctrl.h:1043
#define TB_ENABLEBUTTON
Definition: commctrl.h:1042
@ FVM_LIST
Definition: shobjidl.idl:682
@ FVM_DETAILS
Definition: shobjidl.idl:683
#define FCIDM_TB_SMALLICON
Definition: shresdef.h:863
#define FCIDM_TB_REPORTVIEW
Definition: shresdef.h:864

Referenced by CreateViewWindow3(), and OnCommand().

◆ CheckViewMode()

HRESULT CDefView::CheckViewMode ( HMENU  hmenuView)

Definition at line 1952 of file CDefView.cpp.

1953{
1955 {
1956 UINT iItemFirst = FCIDM_SHVIEW_BIGICON;
1957 UINT iItemLast = iItemFirst + FVM_LAST - FVM_FIRST;
1958 UINT iItem = iItemFirst + m_FolderSettings.ViewMode - FVM_FIRST;
1959 CheckMenuRadioItem(hmenuView, iItemFirst, iItemLast, iItem, MF_BYCOMMAND);
1960 }
1961
1962 return S_OK;
1963}
unsigned int UINT
Definition: ndis.h:50
@ FVM_LAST
Definition: shobjidl.idl:688
@ FVM_FIRST
Definition: shobjidl.idl:680
#define FCIDM_SHVIEW_BIGICON
Definition: shresdef.h:842
#define MF_BYCOMMAND
Definition: winuser.h:202
BOOL WINAPI CheckMenuRadioItem(_In_ HMENU, _In_ UINT, _In_ UINT, _In_ UINT, _In_ UINT)

Referenced by Exec(), and OnInitMenuPopup().

◆ ColumnListChanged()

void CDefView::ColumnListChanged ( )

Definition at line 1170 of file CDefView.cpp.

1171{
1173 m_ListToFolderColMap = NULL; // No cache while we are building the cache
1175 for (UINT i = 0;; ++i)
1176 {
1178 if (FAILED(hr))
1179 break; // No more columns
1180 if (!DPA_SetPtr(cache, i, (void*)(INT_PTR) hr))
1181 break; // Cannot allow holes in the cache, must stop now.
1182 }
1184
1185 for (;;)
1186 {
1188 break;
1189 }
1191 if (hMenu)
1192 {
1193 hMenu = GetSubmenuByID(hMenu, FCIDM_SHVIEW_ARRANGE);
1194 for (UINT i = DVIDM_ARRANGESORT_FIRST; i <= DVIDM_ARRANGESORT_LAST && hMenu; ++i)
1195 {
1196 RemoveMenu(hMenu, i, MF_BYCOMMAND);
1197 }
1198 if ((int) GetMenuItemID(hMenu, 0) <= 0)
1199 RemoveMenu(hMenu, 0, MF_BYPOSITION); // Separator
1200 }
1202 LVCOLUMN lvc;
1203 lvc.mask = LVCF_TEXT;
1204 lvc.pszText = buf;
1205 lvc.cchTextMax = _countof(buf);
1206 for (UINT listCol = 0; listCol < DEFVIEW_ARRANGESORT_MAXENUM; ++listCol)
1207 {
1208 if (!ListView_GetColumn(m_ListView.m_hWnd, listCol, &lvc))
1209 break;
1210 HRESULT foldCol = MapListColumnToFolderColumn(listCol);
1211 assert(SUCCEEDED(foldCol));
1213 DVIDM_ARRANGESORT_FIRST + listCol, lvc.pszText, listCol);
1214 }
1215
1216 ListView_RedrawItems(m_ListView.m_hWnd, 0, 0x7fffffff);
1217 m_ListView.InvalidateRect(NULL, TRUE);
1218}
static BOOL AppendMenuItem(HMENU hMenu, UINT MF, UINT Id, LPCWSTR String, SIZE_T Data=0)
Definition: CDefView.cpp:157
static HMENU GetSubmenuByID(HMENU hmenu, UINT id)
Definition: CDefView.cpp:181
@ DVIDM_ARRANGESORT_FIRST
Definition: CDefView.cpp:50
@ DEFVIEW_ARRANGESORT_MAXENUM
Definition: CDefView.cpp:47
@ DVIDM_ARRANGESORT_LAST
Definition: CDefView.cpp:49
HRESULT MapListColumnToFolderColumn(UINT ListCol)
Definition: CDefView.cpp:1016
BOOL WINAPI DPA_SetPtr(HDPA hdpa, INT i, LPVOID p)
Definition: dpa.c:626
BOOL WINAPI DPA_DeleteAllPtrs(HDPA hdpa)
Definition: dpa.c:730
#define MAX_PATH
Definition: compat.h:34
#define assert(x)
Definition: debug.h:53
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define SUCCEEDED(hr)
Definition: intsafe.h:50
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
#define ListView_GetColumn(hwnd, iCol, pcol)
Definition: commctrl.h:2627
#define ListView_RedrawItems(hwndLV, iFirst, iLast)
Definition: commctrl.h:2530
#define LVCF_TEXT
Definition: commctrl.h:2593
#define LVCOLUMN
Definition: commctrl.h:2586
#define FCIDM_MENU_VIEW
Definition: shlobj.h:632
#define FCIDM_SHVIEW_ARRANGE
Definition: shresdef.h:828
Definition: dpa.c:49
Definition: cache.c:49
int32_t INT_PTR
Definition: typedefs.h:64
#define MF_STRING
Definition: winuser.h:138
UINT WINAPI GetMenuItemID(_In_ HMENU, _In_ int)
#define MF_BYPOSITION
Definition: winuser.h:203
BOOL WINAPI RemoveMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by DoColumnContextMenu(), and LoadColumns().

◆ ContextSensitiveHelp()

HRESULT WINAPI CDefView::ContextSensitiveHelp ( BOOL  fEnterMode)
override

Implements IOleWindow.

Definition at line 3109 of file CDefView.cpp.

3110{
3111 FIXME("(%p) stub\n", this);
3112
3113 return E_NOTIMPL;
3114}
#define FIXME(fmt,...)
Definition: precomp.h:53

◆ CreateList()

BOOL CDefView::CreateList ( )

Definition at line 819 of file CDefView.cpp.

820{
821 HRESULT hr;
822 DWORD dwStyle, dwExStyle, ListExStyle;
823 UINT ViewMode;
824
825 TRACE("%p\n", this);
826
828 LVS_SHAREIMAGELISTS | LVS_EDITLABELS | LVS_AUTOARRANGE; // FIXME: Remove LVS_AUTOARRANGE when the view is able to save ItemPos
830 ListExStyle = LVS_EX_INFOTIP | LVS_EX_LABELTIP;
831
833 {
835 dwStyle |= LVS_ALIGNLEFT;
836 // LVS_EX_REGIONAL?
837 }
838 else
839 {
840 dwStyle |= LVS_SHOWSELALWAYS; // MSDN says FWF_SHOWSELALWAYS is deprecated, always turn on for folders
842#if 0 // FIXME: Temporarily disabled until ListView is fixed (CORE-19624, CORE-19818)
843 ListExStyle |= LVS_EX_DOUBLEBUFFER;
844#endif
845 }
846
847 ViewMode = m_FolderSettings.ViewMode;
848 hr = _DoFolderViewCB(SFVM_DEFVIEWMODE, 0, (LPARAM)&ViewMode);
849 if (SUCCEEDED(hr))
850 {
851 if (ViewMode >= FVM_FIRST && ViewMode <= FVM_LAST)
852 m_FolderSettings.ViewMode = ViewMode;
853 else
854 ERR("Ignoring invalid ViewMode from SFVM_DEFVIEWMODE: %u (was: %u)\n", ViewMode, m_FolderSettings.ViewMode);
855 }
856
858 {
859 case FVM_ICON:
860 dwStyle |= LVS_ICON;
861 break;
862 case FVM_DETAILS:
863 dwStyle |= LVS_REPORT;
864 break;
865 case FVM_SMALLICON:
866 dwStyle |= LVS_SMALLICON;
867 break;
868 case FVM_LIST:
869 dwStyle |= LVS_LIST;
870 break;
871 default:
872 dwStyle |= LVS_LIST;
873 break;
874 }
875
877 dwStyle |= LVS_AUTOARRANGE;
878
880 ListExStyle |= LVS_EX_SNAPTOGRID;
881
883 dwStyle |= LVS_SINGLESEL;
884
886 ListExStyle |= LVS_EX_FULLROWSELECT;
887
889 (!SHELL_GetSetting(SSF_DOUBLECLICKINWEBVIEW, fDoubleClickInWebView) && !SHELL_GetSetting(SSF_WIN95CLASSIC, fWin95Classic)))
891
893 dwStyle |= LVS_NOCOLUMNHEADER;
894
895#if 0
896 // FIXME: Because this is a negative, everyone gets the new flag by default unless they
897 // opt out. This code should be enabled when shell looks like Vista instead of 2003
899 ListExStyle |= LVS_EX_HEADERINALLVIEWS;
900#endif
901
903 dwExStyle &= ~WS_EX_CLIENTEDGE;
904
905 RECT rcListView = {0,0,0,0};
906 m_ListView.Create(m_hWnd, rcListView, L"FolderView", dwStyle, dwExStyle, ID_LISTVIEW);
907
908 if (!m_ListView)
909 return FALSE;
910
912
913 /* UpdateShellSettings(); */
914 return TRUE;
915}
#define ID_LISTVIEW
Definition: CDefView.cpp:574
HWND Create(HWND hWndParent, _U_RECT rect, LPCTSTR szWindowName=NULL, DWORD dwStyle=0, DWORD dwExStyle=0, _U_MENUorID MenuOrID=0U, LPVOID lpCreateParam=NULL)
Definition: rosctrls.h:8
#define L(x)
Definition: ntvdm.h:50
#define WS_TABSTOP
Definition: pedump.c:634
#define WS_VISIBLE
Definition: pedump.c:620
#define WS_CHILDWINDOW
Definition: pedump.c:639
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define WS_CLIPCHILDREN
Definition: pedump.c:619
#define LVS_EX_ONECLICKACTIVATE
Definition: commctrl.h:2740
#define LVS_SINGLESEL
Definition: commctrl.h:2271
#define LVS_SHAREIMAGELISTS
Definition: commctrl.h:2275
#define LVS_EX_LABELTIP
Definition: commctrl.h:2748
#define LVS_NOCOLUMNHEADER
Definition: commctrl.h:2289
#define LVS_SHOWSELALWAYS
Definition: commctrl.h:2272
#define LVS_REPORT
Definition: commctrl.h:2267
#define LVS_SMALLICON
Definition: commctrl.h:2268
#define LVS_ALIGNTOP
Definition: commctrl.h:2284
#define LVS_EX_FULLROWSELECT
Definition: commctrl.h:2739
#define LVS_EX_TRACKSELECT
Definition: commctrl.h:2737
#define LVS_EDITLABELS
Definition: commctrl.h:2278
#define LVS_EX_DOUBLEBUFFER
Definition: commctrl.h:2750
#define LVS_LIST
Definition: commctrl.h:2269
#define LVS_EX_INFOTIP
Definition: commctrl.h:2744
#define SHELL_GetSetting(pss, ssf, field)
Definition: shellutils.h:828
#define SFVM_DEFVIEWMODE
Definition: shlobj.h:1318
#define SSF_DOUBLECLICKINWEBVIEW
Definition: shlobj.h:1610
#define SSF_WIN95CLASSIC
Definition: shlobj.h:1613
@ FWF_SNAPTOGRID
Definition: shobjidl.idl:644
@ FWF_AUTOARRANGE
Definition: shobjidl.idl:642
@ FWF_ALIGNLEFT
Definition: shobjidl.idl:653
@ FWF_NOSCROLL
Definition: shobjidl.idl:652
@ FWF_NOHEADERINALLVIEWS
Definition: shobjidl.idl:666
@ FWF_SINGLECLICKACTIVATE
Definition: shobjidl.idl:657
@ FWF_FULLROWSELECT
Definition: shobjidl.idl:663
@ FWF_NOCLIENTEDGE
Definition: shobjidl.idl:651
@ FWF_SINGLESEL
Definition: shobjidl.idl:648
@ FWF_NOCOLUMNHEADER
Definition: shobjidl.idl:665
@ FWF_DESKTOP
Definition: shobjidl.idl:647
@ FVM_SMALLICON
Definition: shobjidl.idl:681
@ FVM_ICON
Definition: shobjidl.idl:679
#define WS_EX_CLIENTEDGE
Definition: winuser.h:384

Referenced by OnCreate().

◆ CreateViewWindow()

HRESULT WINAPI CDefView::CreateViewWindow ( IShellView psvPrevious,
LPCFOLDERSETTINGS  pfs,
IShellBrowser psb,
RECT prcView,
HWND phWnd 
)
override

Implements IShellView.

Definition at line 3174 of file CDefView.cpp.

3175{
3176 return CreateViewWindow3(psb, lpPrevView, SV3CVW3_DEFAULT,
3177 (FOLDERFLAGS)lpfs->fFlags, (FOLDERFLAGS)lpfs->fFlags, (FOLDERVIEWMODE)lpfs->ViewMode, NULL, prcView, phWnd);
3178}
STDMETHOD() CreateViewWindow3(IShellBrowser *psb, IShellView *psvPrevious, SV3CVW3_FLAGS view_flags, FOLDERFLAGS mask, FOLDERFLAGS flags, FOLDERVIEWMODE mode, const SHELLVIEWID *view_id, const RECT *prcView, HWND *hwnd) override
Definition: CDefView.cpp:3786
FOLDERFLAGS
Definition: shobjidl.idl:641
FOLDERVIEWMODE
Definition: shobjidl.idl:677

◆ CreateViewWindow2()

HRESULT STDMETHODCALLTYPE CDefView::CreateViewWindow2 ( LPSV2CVW2_PARAMS  view_params)
override

Implements IShellView2.

Definition at line 3779 of file CDefView.cpp.

3780{
3781 return CreateViewWindow3(view_params->psbOwner, view_params->psvPrev,
3782 SV3CVW3_DEFAULT, (FOLDERFLAGS)view_params->pfs->fFlags, (FOLDERFLAGS)view_params->pfs->fFlags,
3783 (FOLDERVIEWMODE)view_params->pfs->ViewMode, view_params->pvid, view_params->prcView, &view_params->hwndView);
3784}

◆ CreateViewWindow3()

HRESULT STDMETHODCALLTYPE CDefView::CreateViewWindow3 ( IShellBrowser psb,
IShellView psvPrevious,
SV3CVW3_FLAGS  view_flags,
FOLDERFLAGS  mask,
FOLDERFLAGS  flags,
FOLDERVIEWMODE  mode,
const SHELLVIEWID view_id,
const RECT prcView,
HWND hwnd 
)
override

Implements IShellView3.

Definition at line 3786 of file CDefView.cpp.

3787{
3788 OLEMENUGROUPWIDTHS omw = { { 0, 0, 0, 0, 0, 0 } };
3789 const UINT SUPPORTED_SV3CVW3 = SV3CVW3_FORCEVIEWMODE | SV3CVW3_FORCEFOLDERFLAGS;
3790 const UINT IGNORE_FWF = FWF_OWNERDATA; // FIXME: Support this
3791
3792 *hwnd = NULL;
3793
3794 TRACE("(%p)->(shlview=%p shlbrs=%p rec=%p hwnd=%p vmode=%x flags=%x)\n", this, psvPrevious, psb, prcView, hwnd, mode, flags);
3795 if (prcView != NULL)
3796 TRACE("-- left=%i top=%i right=%i bottom=%i\n", prcView->left, prcView->top, prcView->right, prcView->bottom);
3797
3798 /* Validate the Shell Browser */
3799 if (psb == NULL || m_hWnd)
3800 return E_UNEXPECTED;
3801
3802 if (view_flags & ~SUPPORTED_SV3CVW3)
3803 FIXME("unsupported view flags 0x%08x\n", view_flags & ~SUPPORTED_SV3CVW3);
3804
3805 if (mode == FVM_AUTO)
3807
3808 /* Set up the member variables */
3809 m_pShellBrowser = psb;
3811 m_FolderSettings.fFlags = (mask & flags) & ~IGNORE_FWF;
3812
3813 if (view_id)
3814 {
3815 if (IsEqualIID(*view_id, VID_LargeIcons))
3817 else if (IsEqualIID(*view_id, VID_SmallIcons))
3819 else if (IsEqualIID(*view_id, VID_List))
3821 else if (IsEqualIID(*view_id, VID_Details))
3823 else if (IsEqualIID(*view_id, VID_Thumbnails))
3825 else if (IsEqualIID(*view_id, VID_Tile))
3827 else if (IsEqualIID(*view_id, VID_ThumbStrip))
3829 else
3830 FIXME("Ignoring unrecognized VID %s\n", debugstr_guid(view_id));
3831 }
3832 const UINT requestedViewMode = m_FolderSettings.ViewMode;
3833
3834 /* Get our parent window */
3835 m_pShellBrowser->GetWindow(&m_hWndParent);
3837
3838 /* Try to get the ICommDlgBrowserInterface, adds a reference !!! */
3841 {
3842 TRACE("-- CommDlgBrowser\n");
3843 }
3844
3845 LoadViewState();
3846 if (view_flags & SV3CVW3_FORCEVIEWMODE)
3847 m_FolderSettings.ViewMode = requestedViewMode;
3848 if (view_flags & SV3CVW3_FORCEFOLDERFLAGS)
3849 m_FolderSettings.fFlags = (mask & flags) & ~IGNORE_FWF;
3850
3851 RECT rcView = *prcView;
3853 if (m_hWnd == NULL)
3854 return E_FAIL;
3855
3856 *hwnd = m_hWnd;
3857
3858 CheckToolbar();
3859
3860 if (!*hwnd)
3861 return E_FAIL;
3862
3864
3866 UpdateWindow();
3867
3868 if (!m_hMenu)
3869 {
3870 m_hMenu = CreateMenu();
3871 m_pShellBrowser->InsertMenusSB(m_hMenu, &omw);
3872 TRACE("-- after fnInsertMenusSB\n");
3873 }
3874
3875 _MergeToolbar();
3876
3877 return S_OK;
3878}
#define U(x)
Definition: wordpad.c:45
@ Create
Definition: registry.c:563
BOOL UpdateWindow()
Definition: atlwin.h:1345
HRESULT _MergeToolbar()
Definition: CDefView.cpp:4715
void CheckToolbar()
Definition: CDefView.cpp:702
FOLDERVIEWMODE GetDefaultViewMode()
Definition: CDefView.cpp:3544
HRESULT LoadViewState()
Definition: CDefView.cpp:3288
GLenum GLint GLuint mask
Definition: glext.h:6028
GLenum mode
Definition: glext.h:6217
GLbitfield flags
Definition: glext.h:7161
@ SV3CVW3_FORCEVIEWMODE
Definition: shobjidl.idl:837
@ SV3CVW3_FORCEFOLDERFLAGS
Definition: shobjidl.idl:838
#define debugstr_guid
Definition: kernel32.h:35
if(dx< 0)
Definition: linetemp.h:194
#define WS_CHILD
Definition: pedump.c:617
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define SFVM_WINDOWCREATED
Definition: shlobj.h:1308
#define SFVM_HWNDMAIN
Definition: shlobj.h:1334
@ FWF_OWNERDATA
Definition: shobjidl.idl:645
@ FVM_AUTO
Definition: shobjidl.idl:678
@ FVM_TILE
Definition: shobjidl.idl:685
@ FVM_THUMBNAIL
Definition: shobjidl.idl:684
@ FVM_THUMBSTRIP
Definition: shobjidl.idl:686
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
UINT_PTR WPARAM
Definition: windef.h:207
#define E_UNEXPECTED
Definition: winerror.h:2456
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
HMENU WINAPI CreateMenu(void)
Definition: menu.c:829
#define SWP_NOMOVE
Definition: winuser.h:1247
#define SWP_NOSIZE
Definition: winuser.h:1248
#define HWND_TOP
Definition: winuser.h:1210
#define SWP_SHOWWINDOW
Definition: winuser.h:1251

Referenced by CreateViewWindow(), and CreateViewWindow2().

◆ DestroyViewWindow()

HRESULT WINAPI CDefView::DestroyViewWindow ( )
override

Implements IShellView.

Definition at line 3180 of file CDefView.cpp.

3181{
3182 TRACE("(%p)\n", this);
3183
3184 /* Make absolutely sure all our UI is cleaned up */
3186
3187 if (m_hAccel)
3188 {
3189 // MSDN: Accelerator tables loaded from resources are freed automatically when application terminates
3190 m_hAccel = NULL;
3191 }
3192
3194 {
3197 }
3198
3199 if (m_hMenuViewModes)
3200 {
3203 }
3204
3205 if (m_hMenu)
3206 {
3208 m_hMenu = NULL;
3209 }
3210
3211 if (m_ListView)
3212 {
3213 m_ListView.DestroyWindow();
3214 }
3215
3216 if (m_hWnd)
3217 {
3219 DestroyWindow();
3220 }
3221
3224
3225 return S_OK;
3226}
#define SFVM_WINDOWCLOSING
void Release()
Definition: atlcomcli.h:170
BOOL DestroyWindow()
Definition: atlwin.h:462
STDMETHOD() UIActivate(UINT uState) override
Definition: CDefView.cpp:3139
@ SVUIA_DEACTIVATE
Definition: shobjidl.idl:753
BOOL WINAPI DestroyMenu(_In_ HMENU)

Referenced by ~CDefView().

◆ DoActivate()

void CDefView::DoActivate ( UINT  uState)

Definition at line 2400 of file CDefView.cpp.

2401{
2402 TRACE("%p uState=%x\n", this, uState);
2403
2404 // don't do anything if the state isn't really changing
2405 if (m_uState == uState)
2406 {
2407 return;
2408 }
2409
2410 if (uState == SVUIA_DEACTIVATE)
2411 {
2412 OnDeactivate();
2413 }
2414 else
2415 {
2417 {
2418 FillEditMenu();
2419 FillViewMenu();
2420 m_pShellBrowser->SetMenuSB(m_hMenu, 0, m_hWnd);
2422 }
2423
2424 if (SVUIA_ACTIVATE_FOCUS == uState)
2425 {
2426 m_ListView.SetFocus();
2427 }
2428 }
2429
2430 m_uState = uState;
2431 TRACE("--\n");
2432}
HRESULT FillEditMenu()
Definition: CDefView.cpp:1863
void OnDeactivate()
Definition: CDefView.cpp:2389
HRESULT FillViewMenu()
Definition: CDefView.cpp:1880
@ SVUIA_ACTIVATE_FOCUS
Definition: shobjidl.idl:755

Referenced by OnActivate(), OnKillFocus(), OnSetFocus(), and UIActivate().

◆ DoColumnContextMenu()

LRESULT CDefView::DoColumnContextMenu ( LRESULT  lParam)

Definition at line 1965 of file CDefView.cpp.

1966{
1967 const UINT maxItems = 15; // Feels about right
1968 const UINT idMore = 0x1337;
1969 UINT idFirst = idMore + 1, idLast = idFirst;
1970 UINT lastValidListCol = 0; // Keep track of where the new column should be inserted
1971 UINT showMore = GetKeyState(VK_SHIFT) < 0;
1973 HWND hWndHdr = ListView_GetHeader(m_ListView.m_hWnd);
1974
1975 if (lParam == ~0)
1976 {
1977 RECT r;
1978 ::GetWindowRect(hWndHdr, &r);
1979 pt.x = r.left + ((r.right - r.left) / 2);
1980 pt.y = r.top + ((r.bottom - r.top) / 2);
1981 }
1982
1983 HMENU hMenu = CreatePopupMenu();
1984 if (!hMenu)
1985 return 0;
1986
1987 for (UINT foldCol = 0;; ++foldCol)
1988 {
1991 sd.str.uType = !STRRET_WSTR;
1992 if (FAILED(GetDetailsByFolderColumn(NULL, foldCol, sd)))
1993 break;
1994 if (FAILED(StrRetToStrNW(buf, _countof(buf), &sd.str, NULL)))
1995 break;
1996
1997 SHCOLSTATEF state = 0;
1998 if (!m_pSF2Parent || FAILED(m_pSF2Parent->GetDefaultColumnState(foldCol, &state)))
1999 state = 0;
2000 showMore |= (state & (SHCOLSTATE_SECONDARYUI));
2001
2002 UINT mf = MF_STRING;
2003 HRESULT listCol = MapFolderColumnToListColumn(foldCol);
2004
2005 if (foldCol == 0)
2006 mf |= MF_CHECKED | MF_GRAYED | MF_DISABLED; // Force column 0
2008 continue;
2009 else if (SUCCEEDED(listCol))
2010 mf |= MF_CHECKED;
2011
2012 if (AppendMenuItem(hMenu, mf, idLast, buf, lastValidListCol + 1))
2013 {
2014 idLast++;
2015 if (SUCCEEDED(listCol))
2016 lastValidListCol = listCol;
2017 }
2018
2019 if (idLast - idFirst == maxItems)
2020 {
2021 showMore++;
2022 break;
2023 }
2024 }
2025
2026 if (showMore)
2027 {
2028#if 0 // TODO
2029 InsertMenuW(hMenu, -1, MF_SEPARATOR, 0, NULL);
2030 InsertMenuW(hMenu, -1, MF_STRING, idMore, L"More...");
2031#endif
2032 }
2033
2034 // A cludge to force the cursor to update so we are not stuck with "size left/right" if
2035 // the right-click was on a column divider.
2037
2038 // Note: Uses the header as the owner so CDefView::OnInitMenuPopup does not mess us up.
2040 pt.x, pt.y, 0, hWndHdr, NULL);
2041 if (idCmd == idMore)
2042 {
2043 FIXME("Open More dialog\n");
2044 }
2045 else if (idCmd)
2046 {
2047 UINT foldCol = idCmd - idFirst;
2048 HRESULT listCol = MapFolderColumnToListColumn(foldCol);
2049 if (SUCCEEDED(listCol))
2050 {
2051 ListView_DeleteColumn(m_ListView.m_hWnd, listCol);
2052 }
2053 else
2054 {
2055 listCol = (UINT) GetMenuItemDataById(hMenu, idCmd);
2056 LoadColumn(foldCol, listCol, TRUE);
2057 }
2059 }
2060 DestroyMenu(hMenu);
2061 return 0;
2062}
static SIZE_T GetMenuItemDataById(HMENU hMenu, UINT Id)
Definition: CDefView.cpp:170
static int state
Definition: maze.c:121
HRESULT LoadColumn(UINT FoldCol, UINT ListCol, BOOL Insert, UINT ForceWidth=0)
Definition: CDefView.cpp:1068
CComPtr< IShellFolder2 > m_pSF2Parent
Definition: CDefView.cpp:234
HRESULT MapFolderColumnToListColumn(UINT FoldCol)
Definition: CDefView.cpp:1003
void ColumnListChanged()
Definition: CDefView.cpp:1170
HRESULT GetDetailsByFolderColumn(PCUITEMID_CHILD pidl, UINT FoldCol, SHELLDETAILS &sd)
Definition: CDefView.cpp:1037
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
static const WCHAR sd[]
Definition: suminfo.c:286
#define ListView_DeleteColumn(hwnd, iCol)
Definition: commctrl.h:2644
BOOL WINAPI StrRetToStrNW(LPWSTR dest, DWORD len, LPSTRRET src, const ITEMIDLIST *pidl)
Definition: shellstring.c:85
@ STRRET_WSTR
Definition: shtypes.idl:85
@ SHCOLSTATE_HIDDEN
Definition: shtypes.idl:129
@ SHCOLSTATE_SECONDARYUI
Definition: shtypes.idl:128
DWORD SHCOLSTATEF
Definition: shtypes.idl:142
#define GET_Y_LPARAM(lp)
Definition: windowsx.h:300
#define GET_X_LPARAM(lp)
Definition: windowsx.h:299
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:838
#define TPM_RIGHTBUTTON
Definition: winuser.h:2383
BOOL WINAPI InsertMenuW(_In_ HMENU, _In_ UINT, _In_ UINT, _In_ UINT_PTR, _In_opt_ LPCWSTR)
#define MF_CHECKED
Definition: winuser.h:132
#define MF_SEPARATOR
Definition: winuser.h:137
#define HTCLIENT
Definition: winuser.h:2478
#define TPM_LEFTBUTTON
Definition: winuser.h:2382
#define PostMessage
Definition: winuser.h:5844
#define WM_SETCURSOR
Definition: winuser.h:1639
#define VK_SHIFT
Definition: winuser.h:2205
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
#define TPM_RETURNCMD
Definition: winuser.h:2390
SHORT WINAPI GetKeyState(_In_ int)
#define MF_GRAYED
Definition: winuser.h:129
#define MF_DISABLED
Definition: winuser.h:130

Referenced by OnContextMenu().

◆ drag_notify_subitem()

HRESULT CDefView::drag_notify_subitem ( DWORD  grfKeyState,
POINTL  pt,
DWORD pdwEffect 
)

Definition at line 4236 of file CDefView.cpp.

4237{
4238 LONG lResult;
4239 HRESULT hr;
4240 RECT clientRect;
4241
4242 /* The key state on drop doesn't have MK_LBUTTON or MK_RBUTTON because it
4243 reflects the key state after the user released the button, so we need
4244 to remember the last key state when the button was pressed */
4245 m_grfKeyState = grfKeyState;
4246
4247 // Map from global to client coordinates and query the index of the
4248 // listview-item, which is currently under the mouse cursor.
4249 LVHITTESTINFO htinfo = {{pt.x, pt.y}, LVHT_ONITEM};
4250 ScreenToClient(&htinfo.pt);
4251 lResult = m_ListView.HitTest(&htinfo);
4252
4253 /* Send WM_*SCROLL messages every 250 ms during drag-scrolling */
4254 ::GetClientRect(m_ListView, &clientRect);
4255 if (htinfo.pt.x == m_ptLastMousePos.x && htinfo.pt.y == m_ptLastMousePos.y &&
4256 (htinfo.pt.x < SCROLLAREAWIDTH || htinfo.pt.x > clientRect.right - SCROLLAREAWIDTH ||
4257 htinfo.pt.y < SCROLLAREAWIDTH || htinfo.pt.y > clientRect.bottom - SCROLLAREAWIDTH))
4258 {
4259 m_cScrollDelay = (m_cScrollDelay + 1) % 5; // DragOver is called every 50 ms
4260 if (m_cScrollDelay == 0)
4261 {
4262 /* Mouse did hover another 250 ms over the scroll-area */
4263 if (htinfo.pt.x < SCROLLAREAWIDTH)
4264 m_ListView.SendMessageW(WM_HSCROLL, SB_LINEUP, 0);
4265
4266 if (htinfo.pt.x > clientRect.right - SCROLLAREAWIDTH)
4267 m_ListView.SendMessageW(WM_HSCROLL, SB_LINEDOWN, 0);
4268
4269 if (htinfo.pt.y < SCROLLAREAWIDTH)
4270 m_ListView.SendMessageW(WM_VSCROLL, SB_LINEUP, 0);
4271
4272 if (htinfo.pt.y > clientRect.bottom - SCROLLAREAWIDTH)
4273 m_ListView.SendMessageW(WM_VSCROLL, SB_LINEDOWN, 0);
4274 }
4275 }
4276 else
4277 {
4278 m_cScrollDelay = 0; // Reset, if cursor is not over the listview's scroll-area
4279 }
4280
4281 m_ptLastMousePos = htinfo.pt;
4283
4284 /* We need to check if we drag the selection over itself */
4285 if (lResult != -1 && m_pSourceDataObject.p != NULL)
4286 {
4287 PCUITEMID_CHILD pidl = _PidlByItem(lResult);
4288
4289 for (UINT i = 0; i < m_cidl; i++)
4290 {
4291 if (pidl == m_apidl[i])
4292 {
4293 /* The item that is being draged is hovering itself. */
4294 lResult = -1;
4295 break;
4296 }
4297 }
4298 }
4299
4300 // If we are still over the previous sub-item, notify it via DragOver and return
4301 if (m_pCurDropTarget && lResult == m_iDragOverItem)
4302 return m_pCurDropTarget->DragOver(grfKeyState, pt, pdwEffect);
4303
4304 // We've left the previous sub-item, notify it via DragLeave and release it
4305 if (m_pCurDropTarget)
4306 {
4308 if (pidl)
4309 SelectItem(pidl, 0);
4310
4311 m_pCurDropTarget->DragLeave();
4313 }
4314
4315 m_iDragOverItem = lResult;
4316
4317 if (lResult == -1)
4318 {
4319 // We are not above one of the listview's subitems. Bind to the
4320 // parent folder's DropTarget interface.
4322 }
4323 else
4324 {
4325 // Query the relative PIDL of the shellfolder object represented
4326 // by the currently dragged over listview-item ...
4327 PCUITEMID_CHILD pidl = _PidlByItem(lResult);
4328
4329 // ... and bind m_pCurDropTarget to the IDropTarget interface of an UIObject of this object
4330 hr = m_pSFParent->GetUIObjectOf(m_ListView, 1, &pidl, IID_NULL_PPV_ARG(IDropTarget, &m_pCurDropTarget));
4331 }
4332
4334
4335 // If anything failed, m_pCurDropTarget should be NULL now, which ought to be a save state
4336 if (FAILED(hr))
4337 {
4338 *pdwEffect = DROPEFFECT_NONE;
4339 return hr;
4340 }
4341
4342 if (m_iDragOverItem != -1)
4343 {
4344 SelectItem(m_iDragOverItem, SVSI_SELECT);
4345 }
4346
4347 // Notify the item just entered via DragEnter
4348 return m_pCurDropTarget->DragEnter(m_pCurDataObject, grfKeyState, pt, pdwEffect);
4349}
#define SCROLLAREAWIDTH
Definition: CDefView.cpp:4234
static void ClientToListView(HWND hwndLV, POINT *ppt)
Definition: CDefView.cpp:119
CComPtr< IDataObject > m_pCurDataObject
Definition: CDefView.cpp:265
STDMETHOD() SelectItem(PCUITEMID_CHILD pidlItem, SVSIF uFlags) override
Definition: CDefView.cpp:3438
CComPtr< IDataObject > m_pSourceDataObject
Definition: CDefView.cpp:263
CComPtr< IDropTarget > m_pCurDropTarget
Definition: CDefView.cpp:264
PCUITEMID_CHILD _PidlByItem(int i)
Definition: CDefView.cpp:1313
DWORD m_grfKeyState
Definition: CDefView.cpp:270
int HitTest(LV_HITTESTINFO *phtInfo)
Definition: rosctrls.h:199
HRESULT WINAPI IUnknown_SetSite(IUnknown *obj, IUnknown *site)
Definition: ordinal.c:1411
const DWORD DROPEFFECT_NONE
Definition: oleidl.idl:929
long LONG
Definition: pedump.c:60
#define LVHT_ONITEM
Definition: commctrl.h:2502
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
#define SB_LINEUP
Definition: winuser.h:564
#define WM_HSCROLL
Definition: winuser.h:1746
#define WM_VSCROLL
Definition: winuser.h:1747
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define SB_LINEDOWN
Definition: winuser.h:565
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
#define IID_NULL_PPV_ARG(Itype, ppType)

Referenced by DragEnter(), and DragOver().

◆ DragEnter()

HRESULT WINAPI CDefView::DragEnter ( IDataObject pDataObj,
DWORD  grfKeyState,
POINTL  pt,
DWORD pdwEffect 
)
override

Implements IDropTarget.

Definition at line 4351 of file CDefView.cpp.

4352{
4353 if (*pdwEffect == DROPEFFECT_NONE)
4354 return S_OK;
4355
4356 /* Get a hold on the data object for later calls to DragEnter on the sub-folders */
4357 m_pCurDataObject = pDataObject;
4358
4359 HRESULT hr = drag_notify_subitem(grfKeyState, pt, pdwEffect);
4360 if (SUCCEEDED(hr))
4361 {
4362 POINT ptClient = {pt.x, pt.y};
4363 ScreenToClient(&ptClient);
4364 ImageList_DragEnter(m_hWnd, ptClient.x, ptClient.y);
4365 }
4366
4367 return hr;
4368}
HRESULT drag_notify_subitem(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
Definition: CDefView.cpp:4236
BOOL WINAPI ImageList_DragEnter(HWND hwndLock, INT x, INT y)
Definition: imagelist.c:976

◆ DragLeave()

HRESULT WINAPI CDefView::DragLeave ( void  )
override

Implements IDropTarget.

Definition at line 4378 of file CDefView.cpp.

4379{
4381
4382 if (m_pCurDropTarget)
4383 {
4384 m_pCurDropTarget->DragLeave();
4386 }
4387
4388 if (m_pCurDataObject != NULL)
4389 {
4391 }
4392
4393 m_iDragOverItem = 0;
4394
4395 return S_OK;
4396}
BOOL WINAPI ImageList_DragLeave(HWND hwndLock)
Definition: imagelist.c:1010

◆ DragOver()

HRESULT WINAPI CDefView::DragOver ( DWORD  grfKeyState,
POINTL  pt,
DWORD pdwEffect 
)
override

Implements IDropTarget.

Definition at line 4370 of file CDefView.cpp.

4371{
4372 POINT ptClient = {pt.x, pt.y};
4373 ScreenToClient(&ptClient);
4374 ImageList_DragMove(ptClient.x, ptClient.y);
4375 return drag_notify_subitem(grfKeyState, pt, pdwEffect);
4376}
BOOL WINAPI ImageList_DragMove(INT x, INT y)
Definition: imagelist.c:1088

◆ Draw()

HRESULT WINAPI CDefView::Draw ( DWORD  dwDrawAspect,
LONG  lindex,
void pvAspect,
DVTARGETDEVICE *  ptd,
HDC  hdcTargetDev,
HDC  hdcDraw,
LPCRECTL  lprcBounds,
LPCRECTL  lprcWBounds,
BOOL(STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue)  ,
ULONG_PTR  dwContinue 
)
override

Definition at line 4653 of file CDefView.cpp.

4654{
4655 FIXME("Stub: this=%p\n", this);
4656 return E_NOTIMPL;
4657}

◆ Drop()

HRESULT WINAPI CDefView::Drop ( IDataObject pDataObj,
DWORD  grfKeyState,
POINTL  pt,
DWORD pdwEffect 
)
override

Implements IDropTarget.

Definition at line 4582 of file CDefView.cpp.

4583{
4586
4587 if ((IsDropOnSource(NULL) == S_OK) &&
4588 (*pdwEffect & DROPEFFECT_MOVE) &&
4590 {
4591 if (m_pCurDropTarget)
4592 {
4593 m_pCurDropTarget->DragLeave();
4595 }
4596
4597 POINT ptDrop = { pt.x, pt.y };
4598 ::ScreenToClient(m_ListView, &ptDrop);
4600 m_ptLastMousePos = ptDrop;
4601
4603 if (m_ListView.GetStyle() & LVS_AUTOARRANGE)
4604 {
4606 }
4607 else
4608 {
4609 POINT ptItem;
4610 INT iItem = -1;
4611 while ((iItem = m_ListView.GetNextItem(iItem, LVNI_SELECTED)) >= 0)
4612 {
4613 if (m_ListView.GetItemPosition(iItem, &ptItem))
4614 {
4617 m_ListView.SetItemPosition(iItem, &ptItem);
4618 }
4619 }
4620 }
4622 }
4623 else if (m_pCurDropTarget)
4624 {
4625 m_pCurDropTarget->Drop(pDataObject, grfKeyState, pt, pdwEffect);
4627 }
4628
4630 m_iDragOverItem = 0;
4631 return S_OK;
4632}
POINT m_ptFirstMousePos
Definition: CDefView.cpp:269
STDMETHOD() IsDropOnSource(IDropTarget *drop_target) override
Definition: CDefView.cpp:4022
void _MoveSelectionOnAutoArrange(POINT pt)
Definition: CDefView.cpp:4522
void SetRedraw(BOOL redraw)
Definition: rosctrls.h:27
BOOL SetItemPosition(int nItem, POINT *pPoint)
Definition: rosctrls.h:236
BOOL GetItemPosition(int nItem, POINT *pPoint)
Definition: rosctrls.h:231
VOID WINAPI ImageList_EndDrag(void)
Definition: imagelist.c:1865
const DWORD DROPEFFECT_MOVE
Definition: oleidl.idl:931
#define MK_LBUTTON
Definition: winuser.h:2370

◆ EnableModeless()

HRESULT WINAPI CDefView::EnableModeless ( BOOL  fEnable)
override

Implements IShellView.

Definition at line 3133 of file CDefView.cpp.

3134{
3135 FIXME("(%p)\n", this);
3136 return E_NOTIMPL;
3137}

◆ Exec()

HRESULT WINAPI CDefView::Exec ( const GUID pguidCmdGroup,
DWORD  nCmdID,
DWORD  nCmdexecopt,
VARIANT pvaIn,
VARIANT pvaOut 
)
override

Implements IOleCommandTarget.

Definition at line 4153 of file CDefView.cpp.

4154{
4155 FIXME("(%p)->(\n\tTarget GUID:%s Command:0x%08x Opt:0x%08x %p %p)\n",
4156 this, debugstr_guid(pguidCmdGroup), nCmdID, nCmdexecopt, pvaIn, pvaOut);
4157
4158 if (!pguidCmdGroup)
4159 return OLECMDERR_E_UNKNOWNGROUP;
4160
4161 if (IsEqualCLSID(*pguidCmdGroup, m_Category))
4162 {
4163 if (nCmdID == FCIDM_SHVIEW_AUTOARRANGE)
4164 {
4165 if (V_VT(pvaIn) != VT_INT_PTR)
4166 return OLECMDERR_E_NOTSUPPORTED;
4167
4169 params.cbSize = sizeof(params);
4170 params.rcExclude = *(RECT*) V_INTREF(pvaIn);
4171
4172 if (m_hMenuViewModes)
4173 {
4174 // Duplicate all but the last two items of the view modes menu
4175 HMENU hmenuViewPopup = CreatePopupMenu();
4176 Shell_MergeMenus(hmenuViewPopup, m_hMenuViewModes, 0, 0, 0xFFFF, 0);
4177 DeleteMenu(hmenuViewPopup, GetMenuItemCount(hmenuViewPopup) - 1, MF_BYPOSITION);
4178 DeleteMenu(hmenuViewPopup, GetMenuItemCount(hmenuViewPopup) - 1, MF_BYPOSITION);
4179 CheckViewMode(hmenuViewPopup);
4180 TrackPopupMenuEx(hmenuViewPopup, TPM_LEFTALIGN | TPM_TOPALIGN, params.rcExclude.left, params.rcExclude.bottom, m_hWndParent, &params);
4181 ::DestroyMenu(hmenuViewPopup);
4182 }
4183
4184 // pvaOut is VT_I4 with value 0x403 (cmd id of the new mode maybe?)
4185 V_VT(pvaOut) = VT_I4;
4186 V_I4(pvaOut) = 0x403;
4187 }
4188 }
4189
4190 if (IsEqualIID(*pguidCmdGroup, CGID_Explorer) &&
4191 (nCmdID == 0x29) &&
4192 (nCmdexecopt == 4) && pvaOut)
4193 return S_OK;
4194
4195 if (IsEqualIID(*pguidCmdGroup, CGID_ShellDocView) &&
4196 (nCmdID == 9) &&
4197 (nCmdexecopt == 0))
4198 return 1;
4199
4200 if (IsEqualIID(*pguidCmdGroup, CGID_DefView))
4201 {
4202 CComPtr<IStream> pStream;
4203 WCHAR SubKey[MAX_PATH];
4204 switch (nCmdID)
4205 {
4207 SHDeleteKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\ShellNoRoam\\Bags");
4209 SaveViewState(pStream);
4210 break;
4212 wsprintfW(SubKey, L"%s\\%s", REGSTR_PATH_EXPLORER, L"Streams\\Default");
4214 SHDeleteKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\ShellNoRoam\\Bags");
4215 m_FolderSettings.fFlags |= FWF_NOBROWSERVIEWSTATE; // Don't let this folder save itself
4216 break;
4217 }
4218 }
4219
4220 return OLECMDERR_E_UNKNOWNGROUP;
4221}
STDMETHOD() SaveViewState() override
Definition: CDefView.cpp:3423
HRESULT CheckViewMode(HMENU hmenuView)
Definition: CDefView.cpp:1952
HRESULT GetDefaultViewStream(DWORD Stgm, IStream **ppStream)
Definition: CDefView.cpp:3263
@ VT_I4
Definition: compat.h:2298
@ VT_INT_PTR
Definition: compat.h:2327
GLenum const GLfloat * params
Definition: glext.h:5645
#define STGM_WRITE
Definition: objbase.h:918
#define V_VT(A)
Definition: oleauto.h:211
#define V_I4(A)
Definition: oleauto.h:247
#define V_INTREF(A)
Definition: oleauto.h:252
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
#define REGSTR_PATH_EXPLORER
Definition: regstr.h:33
UINT WINAPI Shell_MergeMenus(HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uIDAdjust, UINT uIDAdjustMax, ULONG uFlags)
Definition: shlmenu.c:856
#define DVCMDID_SET_DEFAULTFOLDER_SETTINGS
Definition: shlobj_undoc.h:78
#define DVCMDID_RESET_DEFAULTFOLDER_SETTINGS
Definition: shlobj_undoc.h:79
#define SHDeleteKey
Definition: shlwapi.h:44
@ FWF_NOBROWSERVIEWSTATE
Definition: shobjidl.idl:670
#define FCIDM_SHVIEW_AUTOARRANGE
Definition: shresdef.h:847
#define HKEY_CURRENT_USER
Definition: winreg.h:11
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
BOOL WINAPI DeleteMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
BOOL WINAPI TrackPopupMenuEx(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _In_ HWND, _In_opt_ LPTPMPARAMS)
#define TPM_TOPALIGN
Definition: winuser.h:2386
#define TPM_LEFTALIGN
Definition: winuser.h:2380

◆ fill_list()

INT CALLBACK CDefView::fill_list ( LPVOID  ptr,
LPVOID  arg 
)
static

Definition at line 1496 of file CDefView.cpp.

1497{
1498 PITEMID_CHILD pidl = static_cast<PITEMID_CHILD>(ptr);
1499 CDefView *pThis = static_cast<CDefView *>(arg);
1500
1501 // in a commdlg this works as a filemask
1502 if (pThis->IncludeObject(pidl) == S_OK && pThis->m_ListView)
1503 pThis->LV_AddItem(pidl);
1504
1505 SHFree(pidl);
1506 return TRUE;
1507}
HRESULT IncludeObject(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:653
static PVOID ptr
Definition: dispmode.c:27
void * arg
Definition: msvc.h:10

Referenced by FillList().

◆ FillArrangeAsMenu()

HRESULT CDefView::FillArrangeAsMenu ( HMENU  hmenuArrange)

Definition at line 1896 of file CDefView.cpp.

1897{
1898 bool forceMerge = false;
1900
1901 // Make sure the column we currently sort by is in the menu
1904 {
1908 LVCOLUMN lvc;
1909 lvc.mask = LVCF_TEXT;
1910 lvc.pszText = buf;
1911 lvc.cchTextMax = _countof(buf);
1912 currentSortId = DVIDM_ARRANGESORT_LAST;
1913 forceMerge = true;
1915 AppendMenuItem(m_hMenuArrangeModes, MF_STRING, currentSortId, lvc.pszText, m_sortInfo.ListColumn);
1916 }
1917
1918 // Prepend the sort-by items unless they are aleady there
1919 if (GetMenuItemID(hmenuArrange, 0) == FCIDM_SHVIEW_AUTOARRANGE || forceMerge)
1920 {
1921 Shell_MergeMenus(hmenuArrange, m_hMenuArrangeModes, 0, 0, 0xFFFF, MM_ADDSEPARATOR);
1922 }
1923
1924 CheckMenuRadioItem(hmenuArrange,
1926 currentSortId, MF_BYCOMMAND);
1927
1929 {
1932 }
1933 else
1934 {
1937
1938 if (GetAutoArrange() == S_OK)
1940 else
1942
1943 if (_GetSnapToGrid() == S_OK)
1945 else
1947 }
1948
1949 return S_OK;
1950}
@ DEFVIEW_ARRANGESORT_MAX
Definition: CDefView.cpp:48
STDMETHOD() GetAutoArrange() override
Definition: CDefView.cpp:3707
HRESULT _GetSnapToGrid()
Definition: CDefView.cpp:3712
#define C_ASSERT(e)
Definition: intsafe.h:73
#define MM_ADDSEPARATOR
Definition: shlobj.h:2528
#define FCIDM_SHVIEW_ALIGNTOGRID
Definition: shresdef.h:849
#define MF_UNCHECKED
Definition: winuser.h:204
DWORD WINAPI CheckMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)

Referenced by OnInitMenuPopup().

◆ FillEditMenu()

HRESULT CDefView::FillEditMenu ( )

Definition at line 1863 of file CDefView.cpp.

1864{
1866 if (!hEditMenu)
1867 return E_FAIL;
1868
1869 HMENU hmenuContents = ::LoadMenuW(shell32_hInstance, L"MENU_003");
1870 if (!hmenuContents)
1871 return E_FAIL;
1872
1873 Shell_MergeMenus(hEditMenu, hmenuContents, 0, 0, 0xFFFF, 0);
1874
1875 ::DestroyMenu(hmenuContents);
1876
1877 return S_OK;
1878}
#define FCIDM_MENU_EDIT
Definition: shlobj.h:631
HMENU WINAPI LoadMenuW(_In_opt_ HINSTANCE, _In_ LPCWSTR)

Referenced by DoActivate().

◆ FillFileMenu()

HRESULT CDefView::FillFileMenu ( )

Definition at line 1817 of file CDefView.cpp.

1818{
1820 if (!hFileMenu)
1821 return E_FAIL;
1822
1823 /* Cleanup the items added previously */
1824 for (int i = GetMenuItemCount(hFileMenu) - 1; i >= 0; i--)
1825 {
1826 UINT id = GetMenuItemID(hFileMenu, i);
1827 if (id < FCIDM_BROWSERFIRST || id > FCIDM_BROWSERLAST)
1828 DeleteMenu(hFileMenu, i, MF_BYPOSITION);
1829 }
1830
1831 // In case we still have this left over, clean it up
1832 if (m_pFileMenu)
1833 {
1836 }
1837 UINT selcount = m_ListView.GetSelectedCount();
1838 // Store context menu in m_pFileMenu and keep it to invoke the selected command later on
1841 return hr;
1842
1844
1846 hr = m_pFileMenu->QueryContextMenu(hmenu, 0, DVIDM_CONTEXTMENU_FIRST, DVIDM_CONTEXTMENU_LAST, cmf);
1848 return hr;
1849
1850 // TODO: filter or something
1851 if (!selcount)
1852 {
1856 }
1857
1858 Shell_MergeMenus(hFileMenu, hmenu, 0, 0, 0xFFFF, MM_ADDSEPARATOR | MM_SUBMENUSHAVEIDS);
1860 return S_OK;
1861}
static UINT GetContextMenuFlags(IShellBrowser *pSB, SFGAOF sfgao)
Definition: CDefView.cpp:104
@ DVIDM_CONTEXTMENU_LAST
Definition: CDefView.cpp:53
@ DVIDM_CONTEXTMENU_FIRST
Definition: CDefView.cpp:57
STDMETHOD() GetItemObject(UINT uItem, REFIID riid, void **ppv) override
Definition: CDefView.cpp:3494
CComPtr< IContextMenu > m_pFileMenu
Definition: CDefView.cpp:273
SFGAOF GetSelectionAttributes(SFGAOF Query)
Definition: CDefView.cpp:2105
UINT GetSelectedCount()
Definition: rosctrls.h:136
@ SVGIO_SELECTION
Definition: shobjidl.idl:744
@ SVGIO_BACKGROUND
Definition: shobjidl.idl:743
static HMENU hmenu
Definition: win.c:66
#define FCIDM_BROWSERLAST
Definition: shlobj.h:623
#define MM_SUBMENUSHAVEIDS
Definition: shlobj.h:2529
#define FCIDM_MENU_FILE
Definition: shlobj.h:630
#define FCIDM_SHVIEW_REFRESH
Definition: shresdef.h:857
#define FCIDM_SHVIEW_VIEW
Definition: shresdef.h:829

Referenced by OnInitMenuPopup().

◆ FillList()

HRESULT CDefView::FillList ( BOOL  IsRefreshCommand = TRUE)

Definition at line 1513 of file CDefView.cpp.

1514{
1515 CComPtr<IEnumIDList> pEnumIDList;
1516 PITEMID_CHILD pidl;
1517 DWORD dwFetched;
1518 HRESULT hRes;
1519 HDPA hdpa;
1520 DWORD dFlags = SHCONTF_NONFOLDERS | ((m_FolderSettings.fFlags & FWF_NOSUBFOLDERS) ? 0 : SHCONTF_FOLDERS);
1521
1522 TRACE("%p\n", this);
1523
1524 SHELLSTATE shellstate;
1526 if (GetCommDlgViewFlags() & CDB2GVF_SHOWALLFILES)
1527 shellstate.fShowAllObjects = shellstate.fShowSuperHidden = TRUE;
1528
1529 if (shellstate.fShowAllObjects)
1530 {
1531 dFlags |= SHCONTF_INCLUDEHIDDEN;
1532 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, LVIS_CUT, 0);
1533 }
1534 if (shellstate.fShowSuperHidden)
1535 {
1536 dFlags |= SHCONTF_INCLUDESUPERHIDDEN;
1537 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, LVIS_CUT, 0);
1538 }
1539
1540 // get the itemlist from the shfolder
1541 hRes = m_pSFParent->EnumObjects(m_hWnd, dFlags, &pEnumIDList);
1542 if (hRes != S_OK)
1543 {
1544 if (hRes == S_FALSE)
1545 return(NOERROR);
1546 return(hRes);
1547 }
1548
1549 // create a pointer array
1550 hdpa = DPA_Create(16);
1551 if (!hdpa)
1552 return(E_OUTOFMEMORY);
1553
1554 // copy the items into the array
1555 while((S_OK == pEnumIDList->Next(1, &pidl, &dwFetched)) && dwFetched)
1556 {
1557 if (DPA_InsertPtr(hdpa, 0x7fff, pidl) == -1)
1558 {
1559 SHFree(pidl);
1560 }
1561 }
1562
1563 // turn listview's redrawing off
1565
1566 DPA_DestroyCallback( hdpa, fill_list, this);
1567
1568 /* sort the array */
1569 int sortCol = -1;
1570 if (!IsRefreshCommand && !m_sortInfo.bLoadedFromViewState) // Are we loading for the first time?
1571 {
1573 sortCol = 0; // In case the folder does not know/care
1574 if (m_pSF2Parent)
1575 {
1576 ULONG folderSortCol = sortCol, dummy;
1577 HRESULT hr = m_pSF2Parent->GetDefaultColumn(NULL, &folderSortCol, &dummy);
1578 if (SUCCEEDED(hr))
1579 hr = MapFolderColumnToListColumn(folderSortCol);
1580 if (SUCCEEDED(hr))
1581 sortCol = (int) hr;
1582 }
1583 }
1584 _Sort(sortCol);
1585
1587 {
1590 }
1591
1592 // load custom background image and custom text color
1595
1596 // turn listview's redrawing back on and force it to draw
1598
1600
1602 {
1603 // redraw now
1604 m_ListView.InvalidateRect(NULL, TRUE);
1605 }
1606
1608
1609 return S_OK;
1610}
#define SFVM_GET_CUSTOMVIEWINFO
#define SFVM_LISTREFRESHED
DWORD GetCommDlgViewFlags()
Definition: CDefView.cpp:352
static INT CALLBACK fill_list(LPVOID ptr, LPVOID arg)
Definition: CDefView.cpp:1496
void UpdateListColors()
Definition: CDefView.cpp:917
BOOL _Sort(int Col=-1)
Definition: CDefView.cpp:1249
void WINAPI DPA_DestroyCallback(HDPA hdpa, PFNDPAENUMCALLBACK enumProc, LPVOID lParam)
Definition: dpa.c:1003
INT WINAPI DPA_InsertPtr(HDPA hdpa, INT i, LPVOID p)
Definition: dpa.c:591
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
#define LVM_SETCALLBACKMASK
Definition: commctrl.h:2424
#define LVIS_CUT
Definition: commctrl.h:2325
VOID WINAPI SHGetSetSettings(LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet)
Definition: shellord.c:225
#define SSF_SHOWSUPERHIDDEN
Definition: shlobj.h:1621
#define SSF_SHOWALLOBJECTS
Definition: shlobj.h:1605
@ FWF_NOSUBFOLDERS
Definition: shobjidl.idl:649
BOOL fShowSuperHidden
Definition: shlobj.h:1557
BOOL fShowAllObjects
Definition: shlobj.h:1541
uint32_t ULONG
Definition: typedefs.h:59
#define NOERROR
Definition: winerror.h:2354

Referenced by OnCreate(), and Refresh().

◆ FillViewMenu()

HRESULT CDefView::FillViewMenu ( )

Definition at line 1880 of file CDefView.cpp.

1881{
1883 if (!hViewMenu)
1884 return E_FAIL;
1885
1887 if (!m_hMenuViewModes)
1888 return E_FAIL;
1889
1892
1893 return S_OK;
1894}
DWORD WINAPI SHMenuIndexFromID(HMENU hMenu, UINT uID)
Definition: ordinal.c:4520
#define FCIDM_MENU_VIEW_SEP_OPTIONS
Definition: shlobj.h:633
#define MM_DONTREMOVESEPS
Definition: shlobj.h:2530

Referenced by DoActivate().

◆ Freeze()

HRESULT WINAPI CDefView::Freeze ( DWORD  dwDrawAspect,
LONG  lindex,
void pvAspect,
DWORD pdwFreeze 
)
override

Implements IViewObject.

Definition at line 4665 of file CDefView.cpp.

4666{
4667 FIXME("Stub: this=%p\n", this);
4668 return E_NOTIMPL;
4669}

◆ GetAdvise()

HRESULT WINAPI CDefView::GetAdvise ( DWORD pAspects,
DWORD pAdvf,
IAdviseSink **  ppAdvSink 
)
override

Implements IViewObject.

Definition at line 4689 of file CDefView.cpp.

4690{
4691 TRACE("this=%p pAspects=%p pAdvf=%p ppAdvSink=%p\n", this, pAspects, pAdvf, ppAdvSink);
4692
4693 if (ppAdvSink)
4694 {
4695 *ppAdvSink = m_pAdvSink;
4696 m_pAdvSink.p->AddRef();
4697 }
4698
4699 if (pAspects)
4700 *pAspects = m_dwAspects;
4701
4702 if (pAdvf)
4703 *pAdvf = m_dwAdvf;
4704
4705 return S_OK;
4706}
CComPtr< IAdviseSink > m_pAdvSink
Definition: CDefView.cpp:261
ULONG AddRef()

◆ GetArrangeParam()

HRESULT STDMETHODCALLTYPE CDefView::GetArrangeParam ( LPARAM sort)
override

Definition at line 3900 of file CDefView.cpp.

3901{
3902 int col = m_sortInfo.ListColumn;
3903 *sort = col != LISTVIEW_SORT_INFO::UNSPECIFIEDCOLUMN ? col : 0;
3905}
_STLP_MOVE_TO_STD_NAMESPACE void sort(_RandomAccessIter __first, _RandomAccessIter __last)
Definition: _algo.c:993

◆ GetAutoArrange()

HRESULT STDMETHODCALLTYPE CDefView::GetAutoArrange ( )
override

Implements IFolderView.

Definition at line 3707 of file CDefView.cpp.

3708{
3709 return ((m_ListView.GetStyle() & LVS_AUTOARRANGE) ? S_OK : S_FALSE);
3710}

Referenced by FillArrangeAsMenu(), OnCommand(), SaveViewState(), and UpdateFolderViewFlags().

◆ GetColorSet()

HRESULT WINAPI CDefView::GetColorSet ( DWORD  dwDrawAspect,
LONG  lindex,
void pvAspect,
DVTARGETDEVICE *  ptd,
HDC  hicTargetDev,
LOGPALETTE **  ppColorSet 
)
override

Implements IViewObject.

Definition at line 4659 of file CDefView.cpp.

4660{
4661 FIXME("Stub: this=%p\n", this);
4662 return E_NOTIMPL;
4663}

◆ GetCommDlgViewFlags()

DWORD CDefView::GetCommDlgViewFlags ( )
inline

Definition at line 352 of file CDefView.cpp.

353 {
356 {
357 DWORD flags;
358 if (SUCCEEDED(pcdb2->GetViewFlags(&flags)))
359 return flags;
360 }
361 return 0;
362 }

Referenced by FillList(), IncludeObject(), and OnContextMenu().

◆ GetCurrentInfo()

HRESULT WINAPI CDefView::GetCurrentInfo ( LPFOLDERSETTINGS  pfs)
override

Implements IShellView.

Definition at line 3228 of file CDefView.cpp.

3229{
3230 TRACE("(%p)->(%p) vmode=%x flags=%x\n", this, lpfs,
3232
3233 if (!lpfs)
3234 return E_INVALIDARG;
3235
3236 *lpfs = m_FolderSettings;
3237 return S_OK;
3238}
#define E_INVALIDARG
Definition: ddrawi.h:101

◆ GetCurrentViewMode()

HRESULT STDMETHODCALLTYPE CDefView::GetCurrentViewMode ( UINT pViewMode)
override

Implements IFolderView.

Definition at line 3553 of file CDefView.cpp.

3554{
3555 TRACE("(%p)->(%p), stub\n", this, pViewMode);
3556
3557 if (!pViewMode)
3558 return E_INVALIDARG;
3559
3560 *pViewMode = m_FolderSettings.ViewMode;
3561 return S_OK;
3562}

Referenced by SaveViewState().

◆ GetDefaultSpacing()

HRESULT STDMETHODCALLTYPE CDefView::GetDefaultSpacing ( POINT ppt)
override

Implements IFolderView.

Definition at line 3702 of file CDefView.cpp.

3703{
3704 return E_NOTIMPL;
3705}

◆ GetDefaultViewMode()

FOLDERVIEWMODE CDefView::GetDefaultViewMode ( )

Definition at line 3544 of file CDefView.cpp.

3545{
3549 mode = temp;
3550 return mode;
3551}
BOOL WINAPI IsOS(DWORD feature)
Definition: ordinal.c:4107
static calc_node_t temp
Definition: rpn_ieee.c:38
#define OS_SERVERADMINUI
Definition: shlwapi.h:2078

Referenced by CreateViewWindow3().

◆ GetDefaultViewStream()

HRESULT CDefView::GetDefaultViewStream ( DWORD  Stgm,
IStream **  ppStream 
)

Definition at line 3263 of file CDefView.cpp.

3264{
3265 CLSID clsid;
3267 if (SUCCEEDED(hr))
3268 {
3269 WCHAR path[MAX_PATH], name[39];
3270 wsprintfW(path, L"%s\\%s", REGSTR_PATH_EXPLORER, L"Streams\\Default");
3272 *ppStream = SHOpenRegStream2W(HKEY_CURRENT_USER, path, name, Stgm);
3273 hr = *ppStream ? S_OK : E_FAIL;
3274 }
3275 return hr;
3276}
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
Definition: compobj.c:2434
HRESULT WINAPI IUnknown_GetClassID(IUnknown *lpUnknown, CLSID *clsid)
Definition: ordinal.c:1457
REFCLSID clsid
Definition: msctf.c:82
IStream *WINAPI SHOpenRegStream2W(HKEY hKey, LPCWSTR pszSubkey, LPCWSTR pszValue, DWORD dwMode)
Definition: regstream.c:537
Definition: name.c:39

Referenced by Exec(), and LoadViewState().

◆ GetDetailsByFolderColumn()

HRESULT CDefView::GetDetailsByFolderColumn ( PCUITEMID_CHILD  pidl,
UINT  FoldCol,
SHELLDETAILS sd 
)

Definition at line 1037 of file CDefView.cpp.

1038{
1039 // According to learn.microsoft.com/en-us/windows/win32/shell/sfvm-getdetailsof
1040 // the query order is IShellFolder2, IShellDetails, SFVM_GETDETAILSOF.
1041 HRESULT hr;
1042 if (m_pSF2Parent)
1043 {
1044 hr = m_pSF2Parent->GetDetailsOf(pidl, FoldCol, &sd);
1045 }
1046 if (FAILED(hr) && m_pSDParent)
1047 {
1048 hr = m_pSDParent->GetDetailsOf(pidl, FoldCol, &sd);
1049 }
1050#if 0 // TODO
1051 if (FAILED(hr))
1052 {
1053 FIXME("Try SFVM_GETDETAILSOF\n");
1054 }
1055#endif
1056 return hr;
1057}
CComPtr< IShellDetails > m_pSDParent
Definition: CDefView.cpp:235

Referenced by DoColumnContextMenu(), GetDetailsByListColumn(), and LoadColumn().

◆ GetDetailsByListColumn()

HRESULT CDefView::GetDetailsByListColumn ( PCUITEMID_CHILD  pidl,
UINT  ListCol,
SHELLDETAILS sd 
)

Definition at line 1059 of file CDefView.cpp.

1060{
1062 if (SUCCEEDED(hr))
1063 return GetDetailsByFolderColumn(pidl, hr, sd);
1064 ERR("Unable to determine folder column from list column %d\n", (int) ListCol);
1065 return hr;
1066}

Referenced by OnNotify().

◆ GetDragPoint()

HRESULT STDMETHODCALLTYPE CDefView::GetDragPoint ( POINT pt)
override

Definition at line 4033 of file CDefView.cpp.

4034{
4035 if (!pt)
4036 return E_INVALIDARG;
4037
4039 return S_OK;
4040}

◆ GetDropPoint()

HRESULT STDMETHODCALLTYPE CDefView::GetDropPoint ( POINT pt)
override

Definition at line 4042 of file CDefView.cpp.

4043{
4044 FIXME("(%p)->(%p) stub\n", this, pt);
4045 return E_NOTIMPL;
4046}

◆ GetFocusedItem()

HRESULT STDMETHODCALLTYPE CDefView::GetFocusedItem ( int piItem)
override

Implements IFolderView.

Definition at line 3655 of file CDefView.cpp.

3656{
3657 TRACE("(%p)->(%p)\n", this, piItem);
3658
3659 *piItem = m_ListView.GetNextItem(-1, LVNI_FOCUSED);
3660
3661 return S_OK;
3662}
#define LVNI_FOCUSED
Definition: commctrl.h:2428

◆ GetFolder()

HRESULT STDMETHODCALLTYPE CDefView::GetFolder ( REFIID  riid,
void **  ppv 
)
override

Implements IFolderView.

Definition at line 3608 of file CDefView.cpp.

3609{
3610 if (m_pSFParent == NULL)
3611 return E_FAIL;
3612
3613 return m_pSFParent->QueryInterface(riid, ppv);
3614}
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39

◆ GetItemAttributes() [1/2]

SFGAOF CDefView::GetItemAttributes ( int  i,
UINT  Query 
)

Definition at line 1307 of file CDefView.cpp.

1308{
1309 PCUITEMID_CHILD pItem = _PidlByItem(i);
1310 return pItem ? GetItemAttributes(pItem, Query) : 0;
1311}
BOOL Query(LPCTSTR *ServiceArgs, DWORD ArgCount, BOOL bExtended)
Definition: query.c:292
SFGAOF GetItemAttributes(PCUITEMID_CHILD pidl, UINT Query)
Definition: CDefView.cpp:1301

◆ GetItemAttributes() [2/2]

SFGAOF CDefView::GetItemAttributes ( PCUITEMID_CHILD  pidl,
UINT  Query 
)

Definition at line 1301 of file CDefView.cpp.

1302{
1303 SFGAOF Attr = (SFGAOF)Query;
1304 return SUCCEEDED(m_pSFParent->GetAttributesOf(1, &pidl, &Attr)) ? (Attr & Query) : 0;
1305}

Referenced by GetItemAttributes(), LV_AddItem(), LV_UpdateItem(), OnNotify(), and RefreshGhostedState().

◆ GetItemObject()

HRESULT WINAPI CDefView::GetItemObject ( UINT  uItem,
REFIID  riid,
void **  ppv 
)
override

Implements IShellView.

Definition at line 3494 of file CDefView.cpp.

3495{
3497
3498 TRACE("(%p)->(uItem=0x%08x,\n\tIID=%s, ppv=%p)\n", this, uItem, debugstr_guid(&riid), ppvOut);
3499
3500 if (!ppvOut)
3501 return E_INVALIDARG;
3502
3503 *ppvOut = NULL;
3504
3505 switch (uItem)
3506 {
3507 case SVGIO_BACKGROUND:
3508 if (IsEqualIID(riid, IID_IContextMenu))
3509 {
3512 return hr;
3513
3514 IUnknown_SetSite(*((IUnknown**)ppvOut), (IShellView *)this);
3515 }
3516 else if (IsEqualIID(riid, IID_IDispatch))
3517 {
3519 {
3522 return hr;
3523 }
3524 hr = m_pShellFolderViewDual->QueryInterface(riid, ppvOut);
3525 }
3526 break;
3527 case SVGIO_SELECTION:
3528 GetSelections();
3529 hr = m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, m_apidl, riid, 0, ppvOut);
3531 return hr;
3532
3533 if (IsEqualIID(riid, IID_IContextMenu))
3534 IUnknown_SetSite(*((IUnknown**)ppvOut), (IShellView *)this);
3535
3536 break;
3537 }
3538
3539 TRACE("-- (%p)->(interface=%p)\n", this, *ppvOut);
3540
3541 return hr;
3542}
HRESULT CDefViewBckgrndMenu_CreateInstance(IShellFolder *psf, REFIID riid, void **ppv)
HRESULT WINAPI CDefViewDual_Constructor(REFIID riid, LPVOID *ppvOut)
CComPtr< IShellFolderViewDual > m_pShellFolderViewDual
Definition: CDefView.cpp:240
const GUID IID_IDispatch
#define E_NOINTERFACE
Definition: winerror.h:2364

Referenced by FillFileMenu(), OnContextMenu(), OnExplorerCommand(), and OpenSelectedItems().

◆ GetItemPosition()

HRESULT STDMETHODCALLTYPE CDefView::GetItemPosition ( PCUITEMID_CHILD  pidl,
POINT ppt 
)
override

Implements IFolderView.

Definition at line 3664 of file CDefView.cpp.

3665{
3666 if (!m_ListView)
3667 {
3668 ERR("!m_ListView\n");
3669 return E_FAIL;
3670 }
3671
3672 int lvIndex = LV_FindItemByPidl(pidl);
3673 if (lvIndex == -1 || ppt == NULL)
3674 return E_INVALIDARG;
3675
3676 m_ListView.GetItemPosition(lvIndex, ppt);
3677 return S_OK;
3678}
int LV_FindItemByPidl(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1327

◆ GetItemSpacing()

HRESULT STDMETHODCALLTYPE CDefView::GetItemSpacing ( ITEMSPACING spacing)
override

Definition at line 4096 of file CDefView.cpp.

4097{
4098 FIXME("(%p)->(%p) stub\n", this, spacing);
4099 return E_NOTIMPL;
4100}

◆ GetObject()

HRESULT STDMETHODCALLTYPE CDefView::GetObject ( PITEMID_CHILD pidl,
UINT  item 
)
override

Definition at line 3932 of file CDefView.cpp.

3933{
3934 TRACE("(%p)->(%p %d)\n", this, pidl, item);
3935 return Item(item, pidl);
3936}
_In_ WDFCOLLECTION _In_ WDFOBJECT Item

◆ GetObjectCount()

HRESULT STDMETHODCALLTYPE CDefView::GetObjectCount ( UINT count)
override

Definition at line 3962 of file CDefView.cpp.

3963{
3964 TRACE("(%p)->(%p)\n", this, count);
3966 return S_OK;
3967}
GLuint GLuint GLsizei count
Definition: gl.h:1545

◆ GetSelectedCount()

HRESULT STDMETHODCALLTYPE CDefView::GetSelectedCount ( UINT count)
override

Definition at line 3995 of file CDefView.cpp.

3996{
3998 return S_OK;
3999}

◆ GetSelectedObjects()

HRESULT STDMETHODCALLTYPE CDefView::GetSelectedObjects ( PCUITEMID_CHILD **  pidl,
UINT items 
)
override

Definition at line 4001 of file CDefView.cpp.

4002{
4003 TRACE("(%p)->(%p %p)\n", this, pidl, items);
4004
4005 *items = GetSelections();
4006
4007 if (*items)
4008 {
4009 *pidl = static_cast<PCUITEMID_CHILD *>(LocalAlloc(0, *items * sizeof(PCUITEMID_CHILD)));
4010 if (!*pidl)
4011 {
4012 return E_OUTOFMEMORY;
4013 }
4014
4015 /* it's documented that caller shouldn't PIDLs, only array itself */
4016 memcpy(*pidl, m_apidl, *items * sizeof(PCUITEMID_CHILD));
4017 }
4018
4019 return S_OK;
4020}
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static TCHAR * items[]
Definition: page1.c:45

◆ GetSelectionAttributes()

SFGAOF CDefView::GetSelectionAttributes ( SFGAOF  Query)

Definition at line 2105 of file CDefView.cpp.

2106{
2107 if (!GetSelections())
2108 return 0;
2109 SFGAOF Attr = Query;
2110 return SUCCEEDED(m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &Attr)) ? (Attr & Query) : 0;
2111}

Referenced by FillFileMenu(), and OnContextMenu().

◆ GetSelectionMarkedItem()

HRESULT STDMETHODCALLTYPE CDefView::GetSelectionMarkedItem ( int piItem)
override

Implements IFolderView.

Definition at line 3646 of file CDefView.cpp.

3647{
3648 TRACE("(%p)->(%p)\n", this, piItem);
3649
3650 *piItem = m_ListView.GetSelectionMark();
3651
3652 return S_OK;
3653}
int GetSelectionMark()
Definition: rosctrls.h:156

◆ GetSelections()

UINT CDefView::GetSelections ( )

Definition at line 2072 of file CDefView.cpp.

2073{
2075 if (count > m_cidl || !count || !m_apidl) // !count to free possibly large cache, !m_apidl to make sure m_apidl is a valid pointer
2076 {
2077 SHFree(m_apidl);
2078 m_apidl = static_cast<PCUITEMID_CHILD*>(SHAlloc(count * sizeof(PCUITEMID_CHILD)));
2079 if (!m_apidl)
2080 {
2081 m_cidl = 0;
2082 return 0;
2083 }
2084 }
2085 m_cidl = count;
2086
2087 TRACE("-- Items selected =%u\n", m_cidl);
2088
2090
2091 UINT i = 0;
2092 int lvIndex = -1;
2093 while ((lvIndex = m_ListView.GetNextItem(lvIndex, LVNI_SELECTED)) > -1)
2094 {
2095 m_apidl[i] = _PidlByItem(lvIndex);
2096 i++;
2097 if (i == m_cidl)
2098 break;
2099 TRACE("-- selected Item found\n");
2100 }
2101
2102 return m_cidl;
2103}
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:304

Referenced by _DoCopyToMoveToFolder(), GetItemObject(), GetSelectedObjects(), GetSelectionAttributes(), OnInitMenuPopup(), OnNotify(), and UpdateStatusbar().

◆ GetSpacing()

HRESULT STDMETHODCALLTYPE CDefView::GetSpacing ( POINT ppt)
override

Implements IFolderView.

Definition at line 3680 of file CDefView.cpp.

3681{
3682 TRACE("(%p)->(%p)\n", this, ppt);
3683
3684 if (!m_ListView)
3685 {
3686 ERR("!m_ListView\n");
3687 return S_FALSE;
3688 }
3689
3690 if (ppt)
3691 {
3692 SIZE spacing;
3693 m_ListView.GetItemSpacing(spacing);
3694
3695 ppt->x = spacing.cx;
3696 ppt->y = spacing.cy;
3697 }
3698
3699 return S_OK;
3700}
void GetItemSpacing(SIZE &spacing, BOOL bSmallIconView=FALSE)
Definition: rosctrls.h:166
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28

◆ GetView()

HRESULT STDMETHODCALLTYPE CDefView::GetView ( SHELLVIEWID view_guid,
ULONG  view_type 
)
override

Implements IShellView2.

Definition at line 3773 of file CDefView.cpp.

3774{
3775 FIXME("(%p)->(%p, %lu) stub\n", this, view_guid, view_type);
3776 return E_NOTIMPL;
3777}
view_type

◆ GetWindow()

HRESULT WINAPI CDefView::GetWindow ( HWND lphwnd)
override

Implements IOleWindow.

Definition at line 3100 of file CDefView.cpp.

3101{
3102 TRACE("(%p)\n", this);
3103
3104 *phWnd = m_hWnd;
3105
3106 return S_OK;
3107}

◆ GetWindowProc()

virtual WNDPROC CDefView::GetWindowProc ( )
inlinevirtual

Reimplemented from ATL::CWindowImplBaseT< TBase, TWinTraits >.

Definition at line 512 of file CDefView.cpp.

513 {
514 return WindowProc;
515 }
static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: CDefView.cpp:517

◆ GetWndClassInfo()

static ATL::CWndClassInfo & CDefView::GetWndClassInfo ( )
inlinestatic

Definition at line 499 of file CDefView.cpp.

500 {
501 static ATL::CWndClassInfo wc =
502 {
504 0, 0, NULL, NULL,
505 LoadCursor(NULL, IDC_ARROW), NULL, NULL, L"SHELLDLL_DefView", NULL
506 },
507 NULL, NULL, IDC_ARROW, TRUE, 0, _T("")
508 };
509 return wc;
510 }
static LRESULT CALLBACK StartWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: atlwin.h:1619
#define _T(x)
Definition: vfdio.h:22
#define IDC_ARROW
Definition: winuser.h:687
#define LoadCursor
Definition: winuser.h:5824
WNDCLASSEXA WNDCLASSEX
Definition: winuser.h:5731
#define CS_PARENTDC
Definition: winuser.h:656

◆ GiveFeedback()

HRESULT WINAPI CDefView::GiveFeedback ( DWORD  dwEffect)
override

Implements IDropSource.

Definition at line 4646 of file CDefView.cpp.

4647{
4648 TRACE("(%p)\n", this);
4649
4651}
#define DRAGDROP_S_USEDEFAULTCURSORS
Definition: winerror.h:2648

◆ HandleRename()

HRESULT STDMETHODCALLTYPE CDefView::HandleRename ( LPCITEMIDLIST  new_pidl)
override

Definition at line 3880 of file CDefView.cpp.

3881{
3882 FIXME("(%p)->(%p) stub\n", this, new_pidl);
3883 return E_NOTIMPL;
3884}

◆ IncludeObject()

HRESULT CDefView::IncludeObject ( PCUITEMID_CHILD  pidl)

Definition at line 653 of file CDefView.cpp.

654{
655 HRESULT ret = S_OK;
656 if (m_pCommDlgBrowser && !(GetCommDlgViewFlags() & CDB2GVF_NOINCLUDEITEM))
657 {
658 TRACE("ICommDlgBrowser::IncludeObject pidl=%p\n", pidl);
659 ret = m_pCommDlgBrowser->IncludeObject(this, pidl);
660 TRACE("-- returns 0x%08x\n", ret);
661 }
662 else if (m_pFolderFilter)
663 {
664 ret = m_pFolderFilter->ShouldShow(m_pSFParent, m_pidlParent, pidl);
665 }
666 return ret;
667}
CComPtr< IFolderFilter > m_pFolderFilter
Definition: CDefView.cpp:239
int ret

Referenced by fill_list().

◆ Initialize()

HRESULT WINAPI CDefView::Initialize ( IShellFolder shellFolder)

Definition at line 642 of file CDefView.cpp.

643{
644 m_pSFParent = shellFolder;
646 shellFolder->QueryInterface(IID_PPV_ARG(IShellDetails, &m_pSDParent));
647
648 return S_OK;
649}
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)

◆ InitList()

BOOL CDefView::InitList ( )

Definition at line 964 of file CDefView.cpp.

965{
966 HIMAGELIST big_icons, small_icons;
967
968 TRACE("%p\n", this);
969
971
972 Shell_GetImageLists(&big_icons, &small_icons);
974 m_ListView.SetImageList(small_icons, LVSIL_SMALL);
975
977
979 UINT ColumnCount = pColumns ? DPA_GetPtrCount(m_LoadColumnsList) : 0;
980 LoadColumns(pColumns, ColumnCount);
982 {
986 }
987 return TRUE;
988}
HRESULT LoadColumns(SIZE_T *pColList=NULL, UINT ColListCount=0)
Definition: CDefView.cpp:1105
BOOL DeleteAllItems()
Definition: rosctrls.h:126
HIMAGELIST SetImageList(HIMAGELIST himl, int iImageList)
Definition: rosctrls.h:91
BOOL WINAPI Shell_GetImageLists(HIMAGELIST *lpBigList, HIMAGELIST *lpSmallList)
Definition: iconcache.cpp:689
#define LVSIL_SMALL
Definition: commctrl.h:2304
#define DPA_GetPtrPtr(hdpa)
Definition: commctrl.h:4962
#define DPA_GetPtrCount(hdpa)
Definition: commctrl.h:4960
#define LVSIL_NORMAL
Definition: commctrl.h:2303
bool bColumnIsFolderColumn
Definition: CDefView.cpp:65
ULONG_PTR SIZE_T
Definition: typedefs.h:80

Referenced by OnCreate().

◆ InvokeContextMenuCommand()

HRESULT CDefView::InvokeContextMenuCommand ( CComPtr< IContextMenu > &  pCM,
LPCSTR  lpVerb,
POINT pt = NULL 
)

Definition at line 2113 of file CDefView.cpp.

2114{
2115 CMINVOKECOMMANDINFOEX cmi;
2116
2117 ZeroMemory(&cmi, sizeof(cmi));
2118 cmi.cbSize = sizeof(cmi);
2119 cmi.hwnd = m_hWnd;
2120 cmi.lpVerb = lpVerb;
2121 cmi.nShow = SW_SHOW;
2122
2123 if (GetKeyState(VK_SHIFT) < 0)
2124 cmi.fMask |= CMIC_MASK_SHIFT_DOWN;
2125
2127 cmi.fMask |= CMIC_MASK_CONTROL_DOWN;
2128
2129 if (pt)
2130 {
2131 cmi.fMask |= CMIC_MASK_PTINVOKE;
2132 cmi.ptInvoke = *pt;
2133 }
2134
2135 WCHAR szDirW[MAX_PATH] = L"";
2136 CHAR szDirA[MAX_PATH];
2138 *szDirW != UNICODE_NULL)
2139 {
2140 SHUnicodeToAnsi(szDirW, szDirA, _countof(szDirA));
2141 cmi.fMask |= CMIC_MASK_UNICODE;
2142 cmi.lpDirectory = szDirA;
2143 cmi.lpDirectoryW = szDirW;
2144 }
2145
2146 HRESULT hr = pCM->InvokeCommand((LPCMINVOKECOMMANDINFO)&cmi);
2147 // Most of our callers will do this, but if they would forget (File menu!)
2148 IUnknown_SetSite(pCM, NULL);
2149 pCM.Release();
2150
2152 return hr;
2153
2154 return S_OK;
2155}
#define SFVM_GETCOMMANDDIR
INT WINAPI SHUnicodeToAnsi(LPCWSTR lpSrcStr, LPSTR lpDstStr, INT iLen)
Definition: string.c:2797
#define UNICODE_NULL
#define VK_CONTROL
Definition: winuser.h:2206
#define SW_SHOW
Definition: winuser.h:778
char CHAR
Definition: xmlstorage.h:175

Referenced by _DoCopyToMoveToFolder(), OnCommand(), OnContextMenu(), OnExplorerCommand(), and OpenSelectedItems().

◆ IsBkDropTarget()

HRESULT STDMETHODCALLTYPE CDefView::IsBkDropTarget ( IDropTarget drop_target)
override

Definition at line 4060 of file CDefView.cpp.

4061{
4062 FIXME("(%p)->(%p) stub\n", this, drop_target);
4063 return E_NOTIMPL;
4064}

◆ IsDesktop()

BOOL CDefView::IsDesktop ( ) const
inlineprivate

Definition at line 295 of file CDefView.cpp.

Referenced by OnCreate().

◆ IsDropOnSource()

HRESULT STDMETHODCALLTYPE CDefView::IsDropOnSource ( IDropTarget drop_target)
override

Definition at line 4022 of file CDefView.cpp.

4023{
4024 if ((m_iDragOverItem == -1 || m_pCurDropTarget == NULL) &&
4026 {
4027 return S_OK;
4028 }
4029
4030 return S_FALSE;
4031}

Referenced by Drop().

◆ Item()

HRESULT STDMETHODCALLTYPE CDefView::Item ( int  iItemIndex,
PITEMID_CHILD ppidl 
)
override

Implements IFolderView.

Definition at line 3616 of file CDefView.cpp.

3617{
3618 PCUITEMID_CHILD pidl = _PidlByItem(iItemIndex);
3619 if (pidl)
3620 {
3621 *ppidl = ILClone(pidl);
3622 return S_OK;
3623 }
3624
3625 *ppidl = 0;
3626 return E_INVALIDARG;
3627}
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237

◆ ItemCount()

HRESULT STDMETHODCALLTYPE CDefView::ItemCount ( UINT  uFlags,
int pcItems 
)
override

Implements IFolderView.

Definition at line 3629 of file CDefView.cpp.

3630{
3631 TRACE("(%p)->(%u %p)\n", this, uFlags, pcItems);
3633 FIXME("some flags unsupported, %x\n", uFlags & ~(SVGIO_ALLVIEW | SVGIO_SELECTION));
3636 else
3638 return S_OK;
3639}
UINT uFlags
Definition: api.c:59
@ SVGIO_TYPE_MASK
Definition: shobjidl.idl:747
static int int const SCRIPT_CONTROL const SCRIPT_STATE SCRIPT_ITEM ULONG int * pcItems
Definition: usp10.c:62

◆ Items()

HRESULT STDMETHODCALLTYPE CDefView::Items ( UINT  uFlags,
REFIID  riid,
void **  ppv 
)
override

Implements IFolderView.

Definition at line 3641 of file CDefView.cpp.

3642{
3643 return E_NOTIMPL;
3644}

◆ ListViewCompareItems()

INT CALLBACK CDefView::ListViewCompareItems ( LPARAM  lParam1,
LPARAM  lParam2,
LPARAM  lpData 
)
static

Definition at line 1235 of file CDefView.cpp.

1236{
1237 PCUIDLIST_RELATIVE pidl1 = reinterpret_cast<PCUIDLIST_RELATIVE>(lParam1);
1238 PCUIDLIST_RELATIVE pidl2 = reinterpret_cast<PCUIDLIST_RELATIVE>(lParam2);
1239 CDefView *pThis = reinterpret_cast<CDefView*>(lpData);
1240
1241 HRESULT hres = pThis->m_pSFParent->CompareIDs(pThis->m_sortInfo.ListColumn, pidl1, pidl2);
1243 return 0;
1244
1245 SHORT nDiff = HRESULT_CODE(hres);
1246 return nDiff * pThis->m_sortInfo.Direction;
1247}
HRESULT hres
Definition: protocol.c:465
short SHORT
Definition: pedump.c:59
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
Definition: shtypes.idl:57
#define HRESULT_CODE(hr)
Definition: winerror.h:76

Referenced by _Sort().

◆ LoadColumn()

HRESULT CDefView::LoadColumn ( UINT  FoldCol,
UINT  ListCol,
BOOL  Insert,
UINT  ForceWidth = 0 
)

Definition at line 1068 of file CDefView.cpp.

1069{
1072 HRESULT hr;
1073
1074 sd.str.uType = !STRRET_WSTR; // Make sure "uninitialized" uType is not WSTR
1075 hr = GetDetailsByFolderColumn(NULL, FoldCol, sd);
1076 if (FAILED(hr))
1077 return hr;
1078 hr = StrRetToStrNW(buf, _countof(buf), &sd.str, NULL);
1079 if (FAILED(hr))
1080 return hr;
1081
1082 UINT chavewidth = CalculateCharWidth(m_ListView.m_hWnd);
1083 if (!chavewidth)
1084 chavewidth = 6; // 6 is a reasonable default fallback
1085
1086 LVCOLUMN lvc;
1087 lvc.mask = LVCF_TEXT | LVCF_FMT | LVCF_WIDTH | LVCF_SUBITEM;
1088 lvc.pszText = buf;
1089 lvc.fmt = sd.fmt;
1090 lvc.cx = ForceWidth ? ForceWidth : (sd.cxChar * chavewidth); // FIXME: DPI?
1091 lvc.iSubItem = FoldCol; // Used by MapFolderColumnToListColumn & MapListColumnToFolderColumn
1092 if ((int)ListCol == -1)
1093 {
1094 assert(Insert); // You can insert at the end but you can't change something that is not there
1095 if (Insert)
1096 ListCol = 0x7fffffff;
1097 }
1098 if (Insert)
1099 ListView_InsertColumn(m_ListView.m_hWnd, ListCol, &lvc);
1100 else
1101 ListView_SetColumn(m_ListView.m_hWnd, ListCol, &lvc);
1102 return S_OK;
1103}
static UINT CalculateCharWidth(HWND hwnd)
Definition: CDefView.cpp:201
#define ListView_InsertColumn(hwnd, iCol, pcol)
Definition: commctrl.h:2641
#define LVCF_WIDTH
Definition: commctrl.h:2592
#define LVCF_FMT
Definition: commctrl.h:2591
#define LVCF_SUBITEM
Definition: commctrl.h:2594
#define ListView_SetColumn(hwnd, iCol, pcol)
Definition: commctrl.h:2634

Referenced by DoColumnContextMenu(), and LoadColumns().

◆ LoadColumns()

HRESULT CDefView::LoadColumns ( SIZE_T pColList = NULL,
UINT  ColListCount = 0 
)

Definition at line 1105 of file CDefView.cpp.

1106{
1107 HWND hWndHdr = ListView_GetHeader(m_ListView.m_hWnd);
1108 UINT newColCount = 0, oldColCount = Header_GetItemCount(hWndHdr);
1109 UINT width = 0, foldCol, i;
1110 HRESULT hr = S_FALSE;
1111
1113 for (i = 0, foldCol = 0;; ++foldCol)
1114 {
1115 if (newColCount >= 0xffff)
1116 break; // CompareIDs limit reached
1117
1118 if (pColList)
1119 {
1120 if (i >= ColListCount)
1121 break;
1122 width = HIWORD(pColList[i]);
1123 foldCol = LOWORD(pColList[i++]);
1124 }
1125
1126 SHCOLSTATEF state = 0;
1127 if (!m_pSF2Parent || FAILED(m_pSF2Parent->GetDefaultColumnState(foldCol, &state)))
1129
1130 if (foldCol == 0)
1131 {
1132 // Force the first column
1133 }
1134 else if (state & SHCOLSTATE_HIDDEN)
1135 {
1136 continue;
1137 }
1138 else if (!pColList && !(state & SHCOLSTATE_ONBYDEFAULT))
1139 {
1140 continue;
1141 }
1142
1143 bool insert = newColCount >= oldColCount;
1144 UINT listCol = insert ? -1 : newColCount;
1145 hr = LoadColumn(foldCol, listCol, insert, width);
1146 if (FAILED(hr))
1147 {
1148 if (!pColList)
1149 hr = S_OK; // No more items, we are done
1150 break;
1151 }
1152 ++newColCount;
1153 }
1154 for (i = newColCount; i < oldColCount; ++i)
1155 {
1157 }
1158
1161 assert(SUCCEEDED(MapFolderColumnToListColumn(0))); // We don't allow turning off the Name column
1163 {
1166 }
1167 return hr;
1168}
GLint GLint GLsizei width
Definition: gl.h:1546
@ SHCOLSTATE_TYPE_STR
Definition: shtypes.idl:121
@ SHCOLSTATE_ONBYDEFAULT
Definition: shtypes.idl:125
static int insert
Definition: xmllint.c:138

Referenced by InitList().

◆ LoadViewState()

HRESULT CDefView::LoadViewState ( )

Definition at line 3288 of file CDefView.cpp.

3289{
3291 PERSISTCOLUMNS cols;
3294 bool fallback = false;
3295 HRESULT hrColumns = E_FAIL;
3297 if (SUCCEEDED(hr))
3298 {
3299 DWORD data;
3300 if (FAILED(hr = SHPropertyBag_ReadDWORD(pPB, L"Mode", &data)))
3301 goto loadfallback;
3303 cvs.FolderSettings.fFlags = ReadDWORD(pPB, L"FFlags", FWF_NOGROUPING);
3304 data = ReadDWORD(pPB, L"Sort", ~0ul);
3306 cvs.SortDir = (INT8)ReadDWORD(pPB, L"SortDir", 1);
3307 if (SUCCEEDED(hrColumns = SHPropertyBag_ReadStream(pPB, L"ColInfo", &pS)))
3308 hrColumns = LoadColumnsStream(cols, pS);
3309 }
3310 else
3311 {
3312 if (FAILED(hr = (m_pShellBrowser ? m_pShellBrowser->GetViewStateStream(STGM_READ, &pS) : E_UNEXPECTED)))
3313 {
3314 loadfallback:
3316 fallback = true;
3317 }
3318 if (FAILED(hr) || FAILED(hr = Read(pS, &cvs, sizeof(cvs))))
3319 return hr;
3320 if (cvs.Signature != cvs.SIG)
3322 hrColumns = LoadColumnsStream(cols, pS);
3323 }
3325 m_FolderSettings.fFlags &= ~cvs.VALIDFWF;
3327 if (SUCCEEDED(hrColumns))
3328 {
3329 BOOL failed = FALSE;
3330 if ((m_LoadColumnsList = DPA_Create(cols.Count)) != NULL)
3331 {
3332 for (UINT i = 0; i < cols.Count; ++i)
3333 {
3334 failed |= !DPA_SetPtr(m_LoadColumnsList, i, UlongToPtr(cols.Columns[i]));
3335 }
3336 }
3337 if (failed || !cols.Count)
3338 {
3341 }
3342 }
3345 m_sortInfo.Direction = cvs.SortDir > 0 ? 1 : -1;
3347 return hr;
3348}
static HRESULT LoadColumnsStream(PERSISTCOLUMNS &cols, IStream *pS)
Definition: CDefView.cpp:3278
static DWORD ReadDWORD(IPropertyBag *pPB, LPCWSTR name, DWORD def)
Definition: CDefView.cpp:3256
signed char INT8
#define UlongToPtr(u)
Definition: config.h:106
unsigned short WORD
Definition: ntddk_ex.h:93
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define HResultFromWin32
Definition: loader.cpp:14
#define STGM_READ
Definition: objbase.h:917
EXTERN_C HRESULT WINAPI IUnknown_QueryServicePropertyBag(_In_ IUnknown *punk, _In_ long flags, _In_ REFIID riid, _Outptr_ void **ppvObj)
Definition: propbag.cpp:1967
HRESULT WINAPI SHPropertyBag_ReadDWORD(IPropertyBag *ppb, LPCWSTR pszPropName, DWORD *pdwValue)
HRESULT WINAPI SHPropertyBag_ReadStream(IPropertyBag *ppb, LPCWSTR pszPropName, IStream **ppStream)
@ FWF_NOGROUPING
Definition: shobjidl.idl:662
_In_ BOOLEAN Read
Definition: strmini.h:479
FOLDERSETTINGS FolderSettings
Definition: CDefView.cpp:100
static const UINT SIG
Definition: CDefView.cpp:95
static const UINT VALIDFWF
Definition: CDefView.cpp:99
UINT Columns[MAXCOUNT]
Definition: CDefView.cpp:90
#define ERROR_INVALID_DATA
Definition: winerror.h:116

Referenced by CreateViewWindow3().

◆ LV_AddItem()

int CDefView::LV_AddItem ( PCUITEMID_CHILD  pidl)

Definition at line 1357 of file CDefView.cpp.

1358{
1359 LVITEMW lvItem;
1360
1361 TRACE("(%p)(pidl=%p)\n", this, pidl);
1362
1364
1366 return -1;
1367
1369 lvItem.iItem = m_ListView.GetItemCount(); // add item to lists end
1370 lvItem.iSubItem = 0;
1371 lvItem.lParam = reinterpret_cast<LPARAM>(ILClone(pidl)); // set item's data
1372 lvItem.pszText = LPSTR_TEXTCALLBACKW; // get text on a callback basis
1373 lvItem.iImage = I_IMAGECALLBACK; // get image on a callback basis
1374 lvItem.stateMask = LVIS_CUT;
1375 if (m_HasCutItems)
1376 lvItem.state = GetItemAttributes(pidl, SFGAO_HIDDEN | SFGAO_GHOSTED) ? LVIS_CUT : 0;
1377
1378 return m_ListView.InsertItem(&lvItem);
1379}
#define SFVM_ADDINGOBJECT
int InsertItem(const LV_ITEM *pitem)
Definition: rosctrls.h:96
#define I_IMAGECALLBACK
Definition: commctrl.h:2390
#define LPSTR_TEXTCALLBACKW
Definition: commctrl.h:2385
#define LVIF_STATE
Definition: commctrl.h:2317
#define LVIF_PARAM
Definition: commctrl.h:2316
#define LVIF_TEXT
Definition: commctrl.h:2314
#define LVIF_IMAGE
Definition: commctrl.h:2315
LPWSTR pszText
Definition: commctrl.h:2370
int iSubItem
Definition: commctrl.h:2367
UINT state
Definition: commctrl.h:2368
UINT mask
Definition: commctrl.h:2365
LPARAM lParam
Definition: commctrl.h:2373
UINT stateMask
Definition: commctrl.h:2369
int iImage
Definition: commctrl.h:2372

Referenced by AddObject(), fill_list(), and OnChangeNotify().

◆ LV_DeleteItem()

BOOLEAN CDefView::LV_DeleteItem ( PCUITEMID_CHILD  pidl)

Definition at line 1381 of file CDefView.cpp.

1382{
1383 int nIndex;
1384
1385 TRACE("(%p)(pidl=%p)\n", this, pidl);
1386
1388
1389 nIndex = LV_FindItemByPidl(pidl);
1390 if (nIndex < 0)
1391 return FALSE;
1392
1394
1395 return m_ListView.DeleteItem(nIndex);
1396}
#define SFVM_REMOVINGOBJECT
BOOL DeleteItem(int i)
Definition: rosctrls.h:101

Referenced by OnChangeNotify().

◆ LV_FindItemByPidl()

int CDefView::LV_FindItemByPidl ( PCUITEMID_CHILD  pidl)

Definition at line 1327 of file CDefView.cpp.

1328{
1330
1331 int cItems = m_ListView.GetItemCount();
1333 for (int i = 0; i < cItems; i++)
1334 {
1335 PCUITEMID_CHILD currentpidl = _PidlByItem(i);
1336 HRESULT hr = m_pSFParent->CompareIDs(lParam, pidl, currentpidl);
1337 if (SUCCEEDED(hr))
1338 {
1339 if (hr == S_EQUAL)
1340 return i;
1341 }
1342 else
1343 {
1344 for (i = 0; i < cItems; i++)
1345 {
1346 //FIXME: ILIsEqual needs absolute pidls!
1347 currentpidl = _PidlByItem(i);
1348 if (ILIsEqual(pidl, currentpidl))
1349 return i;
1350 }
1351 break;
1352 }
1353 }
1354 return -1;
1355}
#define SHCIDS_CANONICALONLY
Definition: shobjidl.idl:226
BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:582
#define S_EQUAL
Definition: shellutils.h:619

Referenced by GetItemPosition(), LV_DeleteItem(), LV_RenameItem(), LV_UpdateItem(), OnChangeNotify(), RemoveObject(), SelectAndPositionItems(), and SelectItem().

◆ LV_RefreshIcon()

void CDefView::LV_RefreshIcon ( INT  iItem)

Definition at line 1471 of file CDefView.cpp.

1472{
1474
1475 LVITEMW lvItem = { LVIF_IMAGE };
1476 lvItem.iItem = iItem;
1477 lvItem.iImage = I_IMAGECALLBACK;
1478 m_ListView.SetItem(&lvItem);
1479 m_ListView.Update(iItem);
1480}
BOOL Update(int i)
Definition: rosctrls.h:131
BOOL SetItem(const LV_ITEM *pitem)
Definition: rosctrls.h:111

Referenced by LV_RefreshIcons().

◆ LV_RefreshIcons()

void CDefView::LV_RefreshIcons ( )

Definition at line 1482 of file CDefView.cpp.

1483{
1485
1486 for (INT iItem = -1;;)
1487 {
1488 iItem = ListView_GetNextItem(m_ListView, iItem, LVNI_ALL);
1489 if (iItem == -1)
1490 break;
1491
1492 LV_RefreshIcon(iItem);
1493 }
1494}
void LV_RefreshIcon(INT iItem)
Definition: CDefView.cpp:1471
#define ListView_GetNextItem(hwnd, i, flags)
Definition: commctrl.h:2439
#define LVNI_ALL
Definition: commctrl.h:2427

Referenced by OnChangeNotify().

◆ LV_RenameItem()

BOOLEAN CDefView::LV_RenameItem ( PCUITEMID_CHILD  pidlOld,
PCUITEMID_CHILD  pidlNew 
)

Definition at line 1398 of file CDefView.cpp.

1399{
1400 int nItem;
1401 LVITEMW lvItem;
1402
1403 TRACE("(%p)(pidlold=%p pidlnew=%p)\n", this, pidlOld, pidlNew);
1404
1406
1407 nItem = LV_FindItemByPidl(pidlOld);
1408
1409 if (-1 != nItem)
1410 {
1411 lvItem.mask = LVIF_PARAM; // only the pidl
1412 lvItem.iItem = nItem;
1413 lvItem.iSubItem = 0;
1414 m_ListView.GetItem(&lvItem);
1415
1416 // Store old pidl until new item is replaced
1417 LPVOID oldPidl = reinterpret_cast<LPVOID>(lvItem.lParam);
1418
1419 lvItem.mask = LVIF_PARAM | LVIF_IMAGE | LVIF_TEXT;
1420 lvItem.iItem = nItem;
1421 lvItem.iSubItem = 0;
1422 lvItem.lParam = reinterpret_cast<LPARAM>(ILClone(pidlNew)); // set item's data
1425 m_ListView.SetItem(&lvItem);
1426 m_ListView.Update(nItem);
1427
1428 // Now that the new item is in place, we can safely release the old pidl
1429 SHFree(oldPidl);
1430
1431 return TRUE; // FIXME: better handling
1432 }
1433
1434 return FALSE;
1435}
BOOL GetItem(LV_ITEM *pitem)
Definition: rosctrls.h:106
int WINAPI SHMapPIDLToSystemImageListIndex(IShellFolder *sh, LPCITEMIDLIST pidl, int *pIndex)
Definition: iconcache.cpp:772

Referenced by OnChangeNotify().

◆ LV_UpdateItem()

BOOLEAN CDefView::LV_UpdateItem ( PCUITEMID_CHILD  pidl)

Definition at line 1437 of file CDefView.cpp.

1438{
1439 int nItem;
1440 LVITEMW lvItem;
1441
1442 TRACE("(%p)(pidl=%p)\n", this, pidl);
1443
1445
1446 nItem = LV_FindItemByPidl(pidl);
1447
1448 if (-1 != nItem)
1449 {
1451
1452 lvItem.mask = LVIF_IMAGE | LVIF_STATE;
1453 lvItem.iItem = nItem;
1454 lvItem.iSubItem = 0;
1456 lvItem.stateMask = LVIS_CUT;
1457 if (m_HasCutItems)
1458 lvItem.state = GetItemAttributes(pidl, SFGAO_HIDDEN | SFGAO_GHOSTED) ? LVIS_CUT : 0;
1459 PCUITEMID_CHILD pidlOld = _PidlByItem(nItem);
1460 if (pidlOld && (lvItem.lParam = reinterpret_cast<LPARAM>(ILClone(pidl))) != NULL)
1461 lvItem.mask |= LVIF_PARAM;
1462 if (m_ListView.SetItem(&lvItem) && lvItem.lParam && pidlOld)
1463 ILFree(const_cast<PUITEMID_CHILD>(pidlOld));
1464 for (UINT i = 0; m_ListView.SetItemText(nItem, i, LPSTR_TEXTCALLBACK); ++i) {} // Update all columns
1465 return TRUE;
1466 }
1467
1468 return FALSE;
1469}
BOOL SetItemText(int i, int subItem, LPCWSTR text)
Definition: rosctrls.h:186
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1044
#define LPSTR_TEXTCALLBACK
Definition: commctrl.h:2388
#define SFVM_UPDATINGOBJECT
Definition: shlobj.h:1333
ITEMID_CHILD UNALIGNED * PUITEMID_CHILD
Definition: shtypes.idl:68

Referenced by OnChangeNotify().

◆ MapFolderColumnToListColumn()

HRESULT CDefView::MapFolderColumnToListColumn ( UINT  FoldCol)

Definition at line 1003 of file CDefView.cpp.

1004{
1005 // This function is only called during column management, performance is not critical.
1006 for (UINT i = 0;; ++i)
1007 {
1009 if ((UINT)r == FoldCol)
1010 return i;
1011 else if (FAILED(r))
1012 return r;
1013 }
1014}
static HRESULT SHGetLVColumnSubItem(HWND List, UINT Col)
Definition: CDefView.cpp:993

Referenced by DoColumnContextMenu(), FillList(), InitList(), and LoadColumns().

◆ MapListColumnToFolderColumn()

HRESULT CDefView::MapListColumnToFolderColumn ( UINT  ListCol)

Definition at line 1016 of file CDefView.cpp.

1017{
1018 // This function is called every time a LVITEM::iSubItem is mapped to
1019 // a folder column (calls to GetDetailsOf etc.) and should be fast.
1021 {
1023 if (ListCol < count)
1024 {
1026 assert(col >= 0 && col == SHGetLVColumnSubItem(m_ListView.m_hWnd, ListCol));
1027 return col;
1028 }
1029 else if (count)
1030 {
1031 TRACE("m_ListToFolderColMap cache miss while mapping %d\n", ListCol);
1032 }
1033 }
1034 return SHGetLVColumnSubItem(m_ListView.m_hWnd, ListCol);
1035}
#define INT
Definition: polytest.cpp:20
#define DPA_FastGetPtr(hdpa, i)
Definition: commctrl.h:4965

Referenced by ColumnListChanged(), GetDetailsByListColumn(), OnNotify(), and SaveViewState().

◆ MoveIcons()

HRESULT STDMETHODCALLTYPE CDefView::MoveIcons ( IDataObject obj)
override

Definition at line 4048 of file CDefView.cpp.

4049{
4050 TRACE("(%p)->(%p)\n", this, obj);
4051 return E_NOTIMPL;
4052}

◆ OnActivate()

LRESULT CDefView::OnActivate ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 2457 of file CDefView.cpp.

2458{
2460 return 0;
2461}
void DoActivate(UINT uState)
Definition: CDefView.cpp:2400

◆ OnChangeCBChain()

LRESULT CDefView::OnChangeCBChain ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 3072 of file CDefView.cpp.

3073{
3074 bHandled = TRUE;
3076}
ClipboardViewerChain m_ClipboardChain
Definition: CDefView.cpp:241
LRESULT HandleChangeCBChain(WPARAM wParam, LPARAM lParam)
Definition: utils.h:111

◆ OnChangeNotify()

LRESULT CDefView::OnChangeNotify ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 2876 of file CDefView.cpp.

2877{
2878 // The change notify can come before WM_CREATE
2879 if (!m_ListView)
2880 return FALSE;
2881
2882 HANDLE hChange = (HANDLE)wParam;
2883 DWORD dwProcID = (DWORD)lParam;
2884 PIDLIST_ABSOLUTE *Pidls;
2885 LONG lEvent;
2886 HANDLE hLock = SHChangeNotification_Lock(hChange, dwProcID, &Pidls, &lEvent);
2887 if (hLock == NULL)
2888 {
2889 ERR("hLock == NULL\n");
2890 return FALSE;
2891 }
2892
2893 TRACE("(%p)(%p,%p,%p)\n", this, Pidls[0], Pidls[1], lParam);
2894
2896 {
2898 return FALSE;
2899 }
2900
2901 // Translate child IDLs.
2902 // SHSimpleIDListFromPathW creates fake PIDLs (lacking some attributes)
2903 lEvent &= ~SHCNE_INTERRUPT;
2904 HRESULT hr;
2905 PITEMID_CHILD child0 = NULL, child1 = NULL;
2906 CComHeapPtr<ITEMIDLIST_RELATIVE> pidl0Temp, pidl1Temp;
2908 {
2909 if (_ILIsSpecialFolder(Pidls[0]) || ILIsParentOrSpecialParent(m_pidlParent, Pidls[0]))
2910 {
2911 child0 = ILFindLastID(Pidls[0]);
2912 hr = SHGetRealIDL(m_pSFParent, child0, &pidl0Temp);
2913 if (SUCCEEDED(hr))
2914 child0 = pidl0Temp;
2915 }
2916 if (_ILIsSpecialFolder(Pidls[1]) || ILIsParentOrSpecialParent(m_pidlParent, Pidls[1]))
2917 {
2918 child1 = ILFindLastID(Pidls[1]);
2919 hr = SHGetRealIDL(m_pSFParent, child1, &pidl1Temp);
2920 if (SUCCEEDED(hr))
2921 child1 = pidl1Temp;
2922 }
2923 }
2924
2925 switch (lEvent)
2926 {
2927 case SHCNE_MKDIR:
2928 case SHCNE_CREATE:
2929 case SHCNE_DRIVEADD:
2930 if (!child0)
2931 break;
2932 if (LV_FindItemByPidl(child0) < 0)
2933 LV_AddItem(child0);
2934 else
2935 LV_UpdateItem(child0);
2936 break;
2937 case SHCNE_RMDIR:
2938 case SHCNE_DELETE:
2939 case SHCNE_DRIVEREMOVED:
2940 if (child0)
2941 LV_DeleteItem(child0);
2942 break;
2943 case SHCNE_RENAMEFOLDER:
2944 case SHCNE_RENAMEITEM:
2945 if (child0 && child1)
2946 LV_RenameItem(child0, child1);
2947 else if (child0)
2948 LV_DeleteItem(child0);
2949 else if (child1)
2950 LV_AddItem(child1);
2951 break;
2952 case SHCNE_UPDATEITEM:
2953 if (child0)
2954 LV_UpdateItem(child0);
2955 break;
2956 case SHCNE_UPDATEIMAGE:
2958 case SHCNE_MEDIAREMOVED:
2959 case SHCNE_ASSOCCHANGED:
2961 break;
2962 case SHCNE_UPDATEDIR:
2963 case SHCNE_ATTRIBUTES:
2964 if (child0)
2965 LV_UpdateItem(child0);
2966 else
2967 Refresh();
2969 break;
2970 case SHCNE_FREESPACE:
2972 break;
2973 }
2974
2976 return TRUE;
2977}
static BOOL ILIsParentOrSpecialParent(PCIDLIST_ABSOLUTE pidl1, PCIDLIST_ABSOLUTE pidl2)
Definition: CDefView.cpp:2864
EXTERN_C HANDLE WINAPI SHChangeNotification_Lock(HANDLE hTicket, DWORD dwOwnerPID, LPITEMIDLIST **lppidls, LPLONG lpwEventId)
EXTERN_C BOOL WINAPI SHChangeNotification_Unlock(HANDLE hLock)
void UpdateStatusbar()
Definition: CDefView.cpp:721
BOOLEAN LV_DeleteItem(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1381
BOOLEAN LV_UpdateItem(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1437
void LV_RefreshIcons()
Definition: CDefView.cpp:1482
BOOLEAN LV_RenameItem(PCUITEMID_CHILD pidlOld, PCUITEMID_CHILD pidlNew)
Definition: CDefView.cpp:1398
STDMETHOD() Refresh() override
Definition: CDefView.cpp:3162
EXTERN_C HRESULT WINAPI SHGetRealIDL(_In_ IShellFolder *psf, _In_ PCUITEMID_CHILD pidlSimple, _Outptr_ PITEMID_CHILD *ppidlReal)
Definition: utils.cpp:1617
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:198
BOOL _ILIsSpecialFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:2102
#define SHCNE_DRIVEREMOVED
Definition: shlobj.h:1897
#define SHCNE_RMDIR
Definition: shlobj.h:1894
#define SHCNE_DELETE
Definition: shlobj.h:1892
#define SHCNE_MKDIR
Definition: shlobj.h:1893
#define SHCNE_UPDATEITEM
Definition: shlobj.h:1903
#define SHCNE_RENAMEITEM
Definition: shlobj.h:1890
#define SHCNE_UPDATEDIR
Definition: shlobj.h:1902
#define SHCNE_MEDIAINSERTED
Definition: shlobj.h:1895
#define SHCNE_UPDATEIMAGE
Definition: shlobj.h:1905
#define SHCNE_CREATE
Definition: shlobj.h:1891
#define SHCNE_RENAMEFOLDER
Definition: shlobj.h:1907
#define SHCNE_MEDIAREMOVED
Definition: shlobj.h:1896
#define SHCNE_EXTENDED_EVENT
Definition: shlobj.h:1910
#define SHCNE_DRIVEADD
Definition: shlobj.h:1898
#define SHCNE_ASSOCCHANGED
Definition: shlobj.h:1911
#define SHCNE_ATTRIBUTES
Definition: shlobj.h:1901
#define SHCNE_FREESPACE
Definition: shlobj.h:1908
#define SFVM_FSNOTIFY
Definition: shlobj.h:1307
HANDLE lEvent
Definition: tftpd.cpp:56
PVOID HANDLE
Definition: typedefs.h:73

◆ OnCommand()

LRESULT CDefView::OnCommand ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 2495 of file CDefView.cpp.

2496{
2497 DWORD dwCmdID;
2498 DWORD dwCmd;
2499 HWND hwndCmd;
2500 int nCount;
2501
2502 dwCmdID = GET_WM_COMMAND_ID(wParam, lParam);
2504 hwndCmd = GET_WM_COMMAND_HWND(wParam, lParam);
2505
2506 TRACE("(%p)->(0x%08x 0x%08x %p) stub\n", this, dwCmdID, dwCmd, hwndCmd);
2507
2508 if (dwCmdID >= DVIDM_ARRANGESORT_FIRST && dwCmdID <= DVIDM_ARRANGESORT_LAST)
2509 {
2510 UINT listCol = (UINT)GetMenuItemDataById(m_hMenuArrangeModes, dwCmdID);
2511 _Sort(listCol);
2512 return 0;
2513 }
2514
2515 switch (dwCmdID)
2516 {
2520 CheckToolbar();
2521 break;
2524 m_ListView.ModifyStyle(LVS_TYPEMASK, LVS_ICON);
2525 CheckToolbar();
2526 break;
2529 m_ListView.ModifyStyle(LVS_TYPEMASK, LVS_LIST);
2530 CheckToolbar();
2531 break;
2534 m_ListView.ModifyStyle(LVS_TYPEMASK, LVS_REPORT);
2535 CheckToolbar();
2536 break;
2539 break;
2541 if (_GetSnapToGrid() == S_OK)
2543 else
2544 ArrangeGrid();
2545 break;
2547 if (GetAutoArrange() == S_OK)
2548 m_ListView.ModifyStyle(LVS_AUTOARRANGE, 0);
2549 else
2550 AutoArrange();
2551 break;
2555 break;
2557 nCount = m_ListView.GetItemCount();
2558 for (int i=0; i < nCount; i++)
2560 break;
2562 Refresh();
2563 break;
2565 case FCIDM_SHVIEW_CUT:
2566 case FCIDM_SHVIEW_COPY:
2570 return 0;
2571 return OnExplorerCommand(dwCmdID, TRUE);
2575 return 0;
2577 case FCIDM_SHVIEW_UNDO:
2580 return OnExplorerCommand(dwCmdID, FALSE);
2581 default:
2582 // WM_COMMAND messages from file menu are routed to CDefView to let m_pFileMenu handle them
2583 if (m_pFileMenu && dwCmd == 0)
2584 {
2585 HMENU Dummy = NULL;
2586 MenuCleanup _(m_pFileMenu, Dummy);
2588 }
2589 }
2590
2591 return 0;
2592}
#define GET_WM_COMMAND_HWND(wp, lp)
Definition: CDefView.cpp:578
#define GET_WM_COMMAND_ID(wp, lp)
Definition: CDefView.cpp:577
#define GET_WM_COMMAND_CMD(wp, lp)
Definition: CDefView.cpp:579
#define SFVM_CANSELECTALL
STDMETHOD() AutoArrange() override
Definition: CDefView.cpp:3913
void _DoCopyToMoveToFolder(BOOL bCopy)
Definition: CDefView.cpp:2434
LRESULT OnExplorerCommand(UINT uCommand, BOOL bUseSelection)
Definition: CDefView.cpp:2314
STDMETHOD() ArrangeGrid() override
Definition: CDefView.cpp:3907
UINT GetItemState(int i, UINT mask)
Definition: rosctrls.h:173
void SetItemState(int i, UINT state, UINT mask)
Definition: rosctrls.h:178
#define _(X)
Definition: i386-dis.c:35
#define LVIS_SELECTED
Definition: commctrl.h:2324
#define LVA_SNAPTOGRID
Definition: commctrl.h:2535
@ REST_NOVIEWCONTEXTMENU
Definition: shlobj.h:1669
DWORD WINAPI SHRestricted(RESTRICTIONS rest)
Definition: shpolicy.c:150
#define FCIDM_SHVIEW_SELECTALL
Definition: shresdef.h:839
#define FCIDM_SHVIEW_CUT
Definition: shresdef.h:832
#define FCIDM_SHVIEW_LISTVIEW
Definition: shresdef.h:844
#define FCIDM_SHVIEW_UNDO
Definition: shresdef.h:835
#define FCIDM_SHVIEW_COPY
Definition: shresdef.h:833
#define FCIDM_SHVIEW_INSERTLINK
Definition: shresdef.h:836
#define FCIDM_SHVIEW_NEWFOLDER
Definition: shresdef.h:855
#define FCIDM_SHVIEW_SMALLICON
Definition: shresdef.h:843
#define FCIDM_SHVIEW_PROPERTIES
Definition: shresdef.h:831
#define FCIDM_SHVIEW_SNAPTOGRID
Definition: shresdef.h:848
#define FCIDM_SHVIEW_COPYTO
Definition: shresdef.h:837
#define FCIDM_SHVIEW_MOVETO
Definition: shresdef.h:838
#define FCIDM_SHVIEW_DELETE
Definition: shresdef.h:830
#define FCIDM_SHVIEW_RENAME
Definition: shresdef.h:852
#define FCIDM_SHVIEW_REPORTVIEW
Definition: shresdef.h:845
#define FCIDM_SHVIEW_INVERTSELECTION
Definition: shresdef.h:840
#define FCIDM_SHVIEW_INSERT
Definition: shresdef.h:834
#define MAKEINTRESOURCEA(i)
Definition: winuser.h:581

◆ OnContextMenu()

LRESULT CDefView::OnContextMenu ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 2197 of file CDefView.cpp.

2198{
2200 UINT uCommand;
2201 HRESULT hResult;
2202
2203 TRACE("(%p)\n", this);
2204
2205 if (m_hContextMenu != NULL)
2206 {
2207 ERR("HACK: Aborting context menu in nested call\n");
2208 return 0;
2209 }
2210
2211 HWND hWndHdr = ListView_GetHeader(m_ListView.m_hWnd);
2212 RECT r;
2213 if (::GetWindowRect(hWndHdr, &r) && PtInRect(&r, pt) && ::IsWindowVisible(hWndHdr))
2214 {
2216 }
2217
2219 if (!m_hContextMenu)
2220 return E_FAIL;
2221
2222 if (lParam != ~0) // unless app key (menu key) was pressed
2223 {
2224 LV_HITTESTINFO hittest = { pt };
2225 ScreenToClient(&hittest.pt);
2226 m_ListView.HitTest(&hittest);
2227
2228 // Right-Clicked item is selected? If selected, no selection change.
2229 // If not selected, then reset the selection and select the item.
2230 if ((hittest.flags & LVHT_ONITEM) &&
2232 {
2233 SelectItem(hittest.iItem, SVSI_SELECT | SVSI_DESELECTOTHERS | SVSI_ENSUREVISIBLE);
2234 }
2235 }
2236
2238 // In case we still have this left over, clean it up
2241 if (FAILED_UNEXPECTEDLY(hResult))
2242 return 0;
2243
2245 // Use 1 as the first id we want. 0 means that user canceled the menu
2246 hResult = m_pCM->QueryContextMenu(m_hContextMenu, 0, CONTEXT_MENU_BASE_ID, DVIDM_CONTEXTMENU_LAST, cmf);
2247 if (FAILED_UNEXPECTEDLY(hResult))
2248 return 0;
2249
2250 if (m_pCommDlgBrowser && !(GetCommDlgViewFlags() & CDB2GVF_NOSELECTVERB))
2251 {
2252 HMENU hMenuSource = LoadMenuW(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCEW(IDM_DVSELECT));
2254 DestroyMenu(hMenuSource);
2256 // TODO: ICommDlgBrowser2::GetDefaultMenuText == S_OK
2257 }
2258
2259 // There is no position requested, so try to find one
2260 if (lParam == ~0)
2261 {
2262 HWND hFocus = ::GetFocus();
2263 int lvIndex = -1;
2264
2265 if (hFocus == m_ListView.m_hWnd || m_ListView.IsChild(hFocus))
2266 {
2267 // Is there an item focused and selected?
2269 // If not, find the first selected item
2270 if (lvIndex < 0)
2271 lvIndex = m_ListView.GetNextItem(-1, LVNI_SELECTED);
2272 }
2273
2274 // We got something
2275 if (lvIndex > -1)
2276 {
2277 // Find the center of the icon
2278 RECT rc = { LVIR_ICON };
2279 m_ListView.SendMessage(LVM_GETITEMRECT, lvIndex, (LPARAM)&rc);
2280 pt.x = (rc.right + rc.left) / 2;
2281 pt.y = (rc.bottom + rc.top) / 2;
2282 }
2283 else
2284 {
2285 // We have to drop it somewhere
2286 pt.x = pt.y = 0;
2287 }
2288
2289 m_ListView.ClientToScreen(&pt);
2290 }
2291
2294 pcdb2->Notify(static_cast<IShellView*>(this), CDB2N_CONTEXTMENU_START);
2295
2296 // This runs the message loop, calling back to us with f.e. WM_INITPOPUP (hence why m_hContextMenu and m_pCM exist)
2297 uCommand = TrackPopupMenu(m_hContextMenu,
2299 pt.x, pt.y, 0, m_hWnd, NULL);
2300 if (uCommand >= DVIDM_ARRANGESORT_FIRST && uCommand <= DVIDM_ARRANGESORT_LAST)
2301 {
2302 SendMessage(WM_COMMAND, uCommand, 0);
2303 }
2304 else if (uCommand != 0 && !(uCommand == DVIDM_COMMDLG_SELECT && OnDefaultCommand() == S_OK))
2305 {
2307 }
2308
2309 if (pcdb2)
2310 pcdb2->Notify(static_cast<IShellView*>(this), CDB2N_CONTEXTMENU_DONE);
2311 return 0;
2312}
#define CONTEXT_MENU_BASE_ID
Definition: CDefView.cpp:82
@ DVIDM_COMMDLG_SELECT
Definition: CDefView.cpp:51
BOOL IsWindowVisible() const
Definition: atlwin.h:958
CComPtr< IContextMenu > m_pCM
Definition: CDefView.cpp:272
LRESULT DoColumnContextMenu(LRESULT lParam)
Definition: CDefView.cpp:1965
HRESULT OnDefaultCommand()
Definition: CDefView.cpp:669
#define LVIR_ICON
Definition: commctrl.h:2478
#define LVM_GETITEMRECT
Definition: commctrl.h:2482
#define LV_HITTESTINFO
Definition: commctrl.h:2509
#define IDM_DVSELECT
Definition: shresdef.h:882
HWND WINAPI GetFocus(void)
Definition: window.c:1875
BOOL WINAPI SetMenuDefaultItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define WM_COMMAND
Definition: winuser.h:1743
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define SendMessage
Definition: winuser.h:5855

◆ OnCreate()

LRESULT CDefView::OnCreate ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 1736 of file CDefView.cpp.

1737{
1740
1741 TRACE("%p\n", this);
1742
1744 {
1745 if (FAILED(RegisterDragDrop(m_hWnd, pdt)))
1746 ERR("Error Registering DragDrop\n");
1747 }
1748
1749 /* register for receiving notifications */
1750 m_pSFParent->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2));
1751 if (ppf2)
1752 {
1753 ppf2->GetCurFolder(&m_pidlParent);
1754 }
1755
1756 if (CreateList())
1757 {
1758 if (InitList())
1759 {
1760 FillList(FALSE);
1761 }
1762 }
1763
1765 {
1766 HWND hwndSB;
1767 m_pShellBrowser->GetWindow(&hwndSB);
1769 }
1770
1771 // Set up change notification
1772 LPITEMIDLIST pidlTarget = NULL;
1773 LONG fEvents = 0;
1774 HRESULT hr = _DoFolderViewCB(SFVM_GETNOTIFY, (WPARAM)&pidlTarget, (LPARAM)&fEvents);
1775 if (FAILED(hr) || (!pidlTarget && !fEvents)) // FIXME: MSDN says both zero means no notifications
1776 {
1777 pidlTarget = m_pidlParent;
1778 fEvents = SHCNE_ALLEVENTS;
1779 }
1780 SHChangeNotifyEntry ntreg = {};
1782 if (FAILED(hr))
1783 {
1784 ntreg.fRecursive = FALSE;
1785 ntreg.pidl = pidlTarget;
1786 }
1790 fEvents, SHV_CHANGE_NOTIFY,
1791 1, &ntreg);
1792
1794
1795 BOOL bPreviousParentSpecial = m_isParentFolderSpecial;
1796
1797 // A folder is special if it is the Desktop folder,
1798 // a network folder, or a Control Panel folder
1801
1802 // Only force StatusBar part refresh if the state
1803 // changed from the previous folder
1804 if (bPreviousParentSpecial != m_isParentFolderSpecial)
1805 {
1806 // This handles changing StatusBar parts
1808 }
1809
1811
1812 return S_OK;
1813}
#define SHV_CHANGE_NOTIFY
Definition: CDefView.cpp:77
EXTERN_C ULONG WINAPI SHChangeNotifyRegister(HWND hwnd, INT fSources, LONG wEventMask, UINT uMsg, INT cItems, SHChangeNotifyEntry *lpItems)
BOOL IsDesktop() const
Definition: CDefView.cpp:295
BOOL CreateList()
Definition: CDefView.cpp:819
HRESULT FillList(BOOL IsRefreshCommand=TRUE)
Definition: CDefView.cpp:1513
void _ForceStatusBarResize()
Definition: CDefView.cpp:4494
BOOL InitList()
Definition: CDefView.cpp:964
HRESULT WINAPI RegisterDragDrop(HWND hwnd, LPDROPTARGET pDropTarget)
Definition: ole2.c:557
BOOL _ILIsNetHood(LPCITEMIDLIST pidl)
Definition: pidl.c:2058
BOOL _ILIsControlPanel(LPCITEMIDLIST pidl)
Definition: pidl.c:2069
#define SHCNRF_NewDelivery
Definition: shlobj.h:1938
#define SHCNRF_ShellLevel
Definition: shlobj.h:1936
#define SHCNRF_InterruptLevel
Definition: shlobj.h:1935
#define SHCNE_ALLEVENTS
Definition: shlobj.h:1914
#define SFVM_QUERYFSNOTIFY
Definition: shlobj.h:1316
#define SFVM_GETNOTIFY
Definition: shlobj.h:1337
#define IDA_SHELLVIEW
Definition: shresdef.h:26
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
PCIDLIST_ABSOLUTE pidl
Definition: shlobj.h:1886
BOOL WINAPI SetShellWindowEx(HWND, HWND)
Definition: ntwrapper.h:58
HACCEL WINAPI LoadAcceleratorsW(_In_opt_ HINSTANCE, _In_ LPCWSTR)

◆ OnCustomItem()

LRESULT CDefView::OnCustomItem ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 2982 of file CDefView.cpp.

2983{
2984 if (!m_pCM)
2985 {
2986 /* no menu */
2987 ERR("no context menu\n");
2988 return FALSE;
2989 }
2990
2991 // lParam of WM_DRAWITEM WM_MEASUREITEM contains a menu id and
2992 // this also needs to be changed to a menu identifier offset
2993 UINT CmdID;
2994 HRESULT hres = SHGetMenuIdFromMenuMsg(uMsg, lParam, &CmdID);
2995 if (SUCCEEDED(hres))
2997
2998 /* Forward the message to the IContextMenu2 */
3001
3002 return (SUCCEEDED(hres));
3003}
HRESULT SHSetMenuIdInMenuMsg(UINT uMsg, LPARAM lParam, UINT CmdId)
HRESULT SHGetMenuIdFromMenuMsg(UINT uMsg, LPARAM lParam, UINT *CmdId)
HRESULT WINAPI SHForwardContextMenuMsg(IUnknown *pUnk, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pResult, BOOL useIContextMenu2)
Definition: rosordinal.c:11

Referenced by OnInitMenuPopup().

◆ OnDeactivate()

void CDefView::OnDeactivate ( )

Definition at line 2389 of file CDefView.cpp.

2390{
2391 TRACE("%p\n", this);
2392
2394 {
2395 // TODO: cleanup menu after deactivation
2397 }
2398}

Referenced by DoActivate(), and OnNotify().

◆ OnDefaultCommand()

HRESULT CDefView::OnDefaultCommand ( )

Definition at line 669 of file CDefView.cpp.

670{
672
673 if (m_pCommDlgBrowser.p != NULL)
674 {
675 TRACE("ICommDlgBrowser::OnDefaultCommand\n");
676 ret = m_pCommDlgBrowser->OnDefaultCommand(this);
677 TRACE("-- returns 0x%08x\n", ret);
678 }
679
680 return ret;
681}

Referenced by OnContextMenu(), and OpenSelectedItems().

◆ OnDestroy()

LRESULT CDefView::OnDestroy ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 1625 of file CDefView.cpp.

1626{
1627 if (!m_Destroyed)
1628 {
1629 m_Destroyed = TRUE;
1632 m_hNotify = NULL;
1634 if (m_pFileMenu)
1635 {
1637 m_pFileMenu = NULL;
1638 }
1639 if (m_hMenu)
1640 {
1642 m_hMenu = NULL;
1643 }
1646 }
1647 bHandled = FALSE;
1648 return 0;
1649}
EXTERN_C BOOL WINAPI SHChangeNotifyDeregister(ULONG hNotify)
HRESULT WINAPI RevokeDragDrop(HWND hwnd)
Definition: ole2.c:639
void Unhook(HWND hWnd)
Definition: utils.h:98

◆ OnDrawClipboard()

LRESULT CDefView::OnDrawClipboard ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 3078 of file CDefView.cpp.

3079{
3080 bHandled = TRUE;
3082 if (m_HasCutItems)
3083 {
3085 m_HasCutItems = false;
3086 m_ListView.SetItemState(-1, 0, LVIS_CUT); // Somebody copied or pasted, nothing can be "cut" anymore
3087 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, m_ListView.SendMessageW(LVM_GETCALLBACKMASK, 0, 0) | LVIS_CUT, 0);
3088 }
3089 return res;
3090}
GLuint res
Definition: glext.h:9613
#define LVM_GETCALLBACKMASK
Definition: commctrl.h:2421
LRESULT HandleDrawClipboard(WPARAM wParam, LPARAM lParam)
Definition: utils.h:120

◆ OnEraseBackground()

LRESULT CDefView::OnEraseBackground ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 1651 of file CDefView.cpp.

1652{
1653 /* redirect to parent */
1656
1657 bHandled = FALSE;
1658 return 0;
1659}
CWindow GetParent() const
Definition: atlwin.h:700
@ FWF_TRANSPARENT
Definition: shobjidl.idl:650
#define WM_ERASEBKGND
Definition: winuser.h:1628
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

◆ OnExplorerCommand()

LRESULT CDefView::OnExplorerCommand ( UINT  uCommand,
BOOL  bUseSelection 
)

Definition at line 2314 of file CDefView.cpp.

2315{
2316 HRESULT hResult;
2317 HMENU hMenu = NULL;
2318
2320 hResult = GetItemObject(bUseSelection ? SVGIO_SELECTION : SVGIO_BACKGROUND, IID_PPV_ARG(IContextMenu, &pCM));
2321 if (FAILED_UNEXPECTEDLY(hResult))
2322 return 0;
2323
2324 MenuCleanup _(pCM, hMenu);
2325
2326 if ((uCommand != FCIDM_SHVIEW_DELETE) && (uCommand != FCIDM_SHVIEW_RENAME))
2327 {
2328 hMenu = CreatePopupMenu();
2329 if (!hMenu)
2330 return 0;
2331
2332 hResult = pCM->QueryContextMenu(hMenu, 0, DVIDM_CONTEXTMENU_FIRST, DVIDM_CONTEXTMENU_LAST, CMF_NORMAL);
2333 if (FAILED_UNEXPECTEDLY(hResult))
2334 return 0;
2335 }
2336
2337 if (bUseSelection)
2338 {
2339 // FIXME: we should cache this
2340 SFGAOF rfg = SFGAO_BROWSABLE | SFGAO_CANCOPY | SFGAO_CANLINK | SFGAO_CANMOVE | SFGAO_CANDELETE | SFGAO_CANRENAME | SFGAO_HASPROPSHEET | SFGAO_FILESYSTEM | SFGAO_FOLDER;
2341 hResult = m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &rfg);
2342 if (FAILED_UNEXPECTEDLY(hResult))
2343 return 0;
2344
2345 if (!(rfg & SFGAO_CANMOVE) && uCommand == FCIDM_SHVIEW_CUT)
2346 return 0;
2347 if (!(rfg & SFGAO_CANCOPY) && uCommand == FCIDM_SHVIEW_COPY)
2348 return 0;
2349 if (!(rfg & SFGAO_CANDELETE) && uCommand == FCIDM_SHVIEW_DELETE)
2350 return 0;
2351 if (!(rfg & SFGAO_CANRENAME) && uCommand == FCIDM_SHVIEW_RENAME)
2352 return 0;
2353 if (!(rfg & SFGAO_HASPROPSHEET) && uCommand == FCIDM_SHVIEW_PROPERTIES)
2354 return 0;
2355 }
2356
2357 // FIXME: We should probably use the objects position?
2359 return 0;
2360}

Referenced by OnCommand().

◆ OnFinalMessage()

VOID CDefView::OnFinalMessage ( HWND  )
overridevirtual

Reimplemented from ATL::CWindowImplBaseT< TBase, TWinTraits >.

Definition at line 1731 of file CDefView.cpp.

1732{
1733 this->Release();
1734}
ULONG Release()

◆ OnGetDlgCode()

LRESULT CDefView::OnGetDlgCode ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 1620 of file CDefView.cpp.

1621{
1622 return m_ListView.SendMessageW(uMsg, 0, 0);
1623}

◆ OnGetShellBrowser()

LRESULT CDefView::OnGetShellBrowser ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 1719 of file CDefView.cpp.

1720{
1721 return reinterpret_cast<LRESULT>(m_pShellBrowser.p);
1722}

◆ OnInitMenuPopup()

LRESULT CDefView::OnInitMenuPopup ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 3014 of file CDefView.cpp.

3015{
3016 HMENU hmenu = (HMENU) wParam;
3017 int nPos = LOWORD(lParam);
3018 UINT menuItemId;
3019
3020 if (m_pCM)
3021 OnCustomItem(uMsg, wParam, lParam, bHandled);
3022
3024
3025 if (GetSelections() == 0)
3026 {
3033 }
3034 else
3035 {
3036 // FIXME: Check copyable
3043 }
3044
3045 /* Lets try to find out what the hell wParam is */
3046 if (hmenu == GetSubMenu(m_hMenu, nPos))
3047 menuItemId = ReallyGetMenuItemID(m_hMenu, nPos);
3048 else if (hViewMenu && hmenu == GetSubMenu(hViewMenu, nPos))
3049 menuItemId = ReallyGetMenuItemID(hViewMenu, nPos);
3050 else if (m_hContextMenu && hmenu == GetSubMenu(m_hContextMenu, nPos))
3051 menuItemId = ReallyGetMenuItemID(m_hContextMenu, nPos);
3052 else
3053 return FALSE;
3054
3055 switch (menuItemId)
3056 {
3057 case FCIDM_MENU_FILE:
3058 FillFileMenu();
3059 break;
3060 case FCIDM_MENU_VIEW:
3061 case FCIDM_SHVIEW_VIEW:
3063 break;
3066 break;
3067 }
3068
3069 return FALSE;
3070}
static UINT ReallyGetMenuItemID(HMENU hmenu, int i)
Definition: CDefView.cpp:192
HRESULT FillFileMenu()
Definition: CDefView.cpp:1817
LRESULT OnCustomItem(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2982
HRESULT FillArrangeAsMenu(HMENU hmenuArrange)
Definition: CDefView.cpp:1896
#define MF_ENABLED
Definition: winuser.h:128

◆ OnKillFocus()

LRESULT CDefView::OnKillFocus ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 2483 of file CDefView.cpp.

2484{
2485 TRACE("(%p) stub\n", this);
2486
2488 /* Notify the ICommDlgBrowser */
2489 OnStateChange(CDBOSC_KILLFOCUS);
2490
2491 return 0;
2492}
HRESULT OnStateChange(UINT uFlags)
Definition: CDefView.cpp:683
@ SVUIA_ACTIVATE_NOFOCUS
Definition: shobjidl.idl:754

◆ OnNCCreate()

LRESULT CDefView::OnNCCreate ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 1724 of file CDefView.cpp.

1725{
1726 this->AddRef();
1727 bHandled = FALSE;
1728 return 0;
1729}

◆ OnNotify()

LRESULT CDefView::OnNotify ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 2612 of file CDefView.cpp.

2613{
2614 UINT CtlID;
2615 LPNMHDR lpnmh;
2616 LPNMLISTVIEW lpnmlv;
2617 NMLVDISPINFOW *lpdi;
2618 PCUITEMID_CHILD pidl;
2619 BOOL unused;
2620
2621 CtlID = wParam;
2622 lpnmh = (LPNMHDR)lParam;
2623 lpnmlv = (LPNMLISTVIEW)lpnmh;
2624 lpdi = (NMLVDISPINFOW *)lpnmh;
2625
2626 TRACE("%p CtlID=%u lpnmh->code=%x\n", this, CtlID, lpnmh->code);
2627
2628 switch (lpnmh->code)
2629 {
2630 case NM_SETFOCUS:
2631 TRACE("-- NM_SETFOCUS %p\n", this);
2632 OnSetFocus(0, 0, 0, unused);
2633 break;
2634 case NM_KILLFOCUS:
2635 TRACE("-- NM_KILLFOCUS %p\n", this);
2636 OnDeactivate();
2637 /* Notify the ICommDlgBrowser interface */
2638 OnStateChange(CDBOSC_KILLFOCUS);
2639 break;
2640 case NM_CUSTOMDRAW:
2641 TRACE("-- NM_CUSTOMDRAW %p\n", this);
2642 return CDRF_DODEFAULT;
2643 case NM_RELEASEDCAPTURE:
2644 TRACE("-- NM_RELEASEDCAPTURE %p\n", this);
2645 break;
2646 case NM_CLICK:
2647 TRACE("-- NM_CLICK %p\n", this);
2648 break;
2649 case NM_RCLICK:
2650 TRACE("-- NM_RCLICK %p\n", this);
2651 break;
2652 case NM_DBLCLK:
2653 TRACE("-- NM_DBLCLK %p\n", this);
2655 break;
2656 case NM_RETURN:
2657 TRACE("-- NM_RETURN %p\n", this);
2659 break;
2660 case HDN_ENDTRACKW:
2661 TRACE("-- HDN_ENDTRACKW %p\n", this);
2662 //nColumn1 = m_ListView.GetColumnWidth(0);
2663 //nColumn2 = m_ListView.GetColumnWidth(1);
2664 break;
2665 case LVN_DELETEITEM:
2666 TRACE("-- LVN_DELETEITEM %p\n", this);
2667 /*delete the pidl because we made a copy of it*/
2668 SHFree(reinterpret_cast<LPVOID>(lpnmlv->lParam));
2669 break;
2670 case LVN_DELETEALLITEMS:
2671 TRACE("-- LVN_DELETEALLITEMS %p\n", this);
2672 return FALSE;
2673 case LVN_INSERTITEM:
2674 TRACE("-- LVN_INSERTITEM (STUB)%p\n", this);
2675 break;
2676 case LVN_ITEMACTIVATE:
2677 TRACE("-- LVN_ITEMACTIVATE %p\n", this);
2678 OnStateChange(CDBOSC_SELCHANGE); // browser will get the IDataObject
2679 break;
2680 case LVN_COLUMNCLICK:
2681 {
2682 UINT foldercol = MapListColumnToFolderColumn(lpnmlv->iSubItem);
2683 HRESULT hr = S_FALSE;
2684 if (m_pSDParent)
2685 hr = m_pSDParent->ColumnClick(foldercol);
2686 if (hr != S_OK)
2687 hr = _DoFolderViewCB(SFVM_COLUMNCLICK, foldercol, 0);
2688 if (hr != S_OK)
2689 _Sort(lpnmlv->iSubItem);
2690 break;
2691 }
2692 case LVN_GETDISPINFOA:
2693 case LVN_GETDISPINFOW:
2694 TRACE("-- LVN_GETDISPINFO %p\n", this);
2695 pidl = _PidlByItem(lpdi->item);
2696
2697 if (lpdi->item.mask & LVIF_TEXT) /* text requested */
2698 {
2701 break;
2702
2703 if (lpnmh->code == LVN_GETDISPINFOA)
2704 {
2705 /* shouldn't happen */
2706 NMLVDISPINFOA *lpdiA = (NMLVDISPINFOA *)lpnmh;
2707 StrRetToStrNA( lpdiA->item.pszText, lpdiA->item.cchTextMax, &sd.str, NULL);
2708 TRACE("-- text=%s\n", lpdiA->item.pszText);
2709 }
2710 else /* LVN_GETDISPINFOW */
2711 {
2712 StrRetToStrNW( lpdi->item.pszText, lpdi->item.cchTextMax, &sd.str, NULL);
2713 TRACE("-- text=%s\n", debugstr_w(lpdi->item.pszText));
2714 }
2715 }
2716 if (lpdi->item.mask & LVIF_IMAGE)
2717 {
2719 }
2720 if (lpdi->item.mask & LVIF_STATE)
2721 {
2722 if ((lpdi->item.stateMask & LVIS_CUT) && GetItemAttributes(pidl, SFGAO_HIDDEN | SFGAO_GHOSTED))
2723 lpdi->item.state |= LVIS_CUT;
2724 }
2725 lpdi->item.mask |= LVIF_DI_SETITEM;
2726 break;
2727 case LVN_ITEMCHANGED:
2728 TRACE("-- LVN_ITEMCHANGED %p\n", this);
2729 if ((lpnmlv->uOldState ^ lpnmlv->uNewState) & (LVIS_SELECTED | LVIS_FOCUSED))
2730 {
2731 OnStateChange(CDBOSC_SELCHANGE); // browser will get the IDataObject
2732 // FIXME: Use LVIS_DROPHILITED instead in drag_notify_subitem
2734 {
2737 }
2738 _DoFolderViewCB(SFVM_SELECTIONCHANGED, NULL/* FIXME */, NULL/* FIXME */);
2739 }
2740 break;
2741 case LVN_BEGINDRAG:
2742 case LVN_BEGINRDRAG:
2743 TRACE("-- LVN_BEGINDRAG\n");
2744 if (GetSelections())
2745 {
2747 DWORD dwAttributes = SFGAO_CANCOPY | SFGAO_CANLINK;
2748 DWORD dwEffect = DROPEFFECT_MOVE;
2749
2750 if (SUCCEEDED(m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, m_apidl, IID_NULL_PPV_ARG(IDataObject, &pda))))
2751 {
2753
2754 if (SUCCEEDED(m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &dwAttributes)))
2755 dwEffect |= dwAttributes & (SFGAO_CANCOPY | SFGAO_CANLINK);
2756
2758 if (SUCCEEDED(pda->QueryInterface(IID_PPV_ARG(IAsyncOperation, &piaso))))
2759 piaso->SetAsyncMode(TRUE);
2760
2761 DWORD dwEffect2;
2762
2763 m_pSourceDataObject = pda;
2764 m_ptFirstMousePos = params->ptAction;
2767
2768 HIMAGELIST big_icons, small_icons;
2769 Shell_GetImageLists(&big_icons, &small_icons);
2770 PCUITEMID_CHILD pidl = _PidlByItem(params->iItem);
2771 int iIcon = SHMapPIDLToSystemImageListIndex(m_pSFParent, pidl, 0);
2772 POINT ptItem;
2773 m_ListView.GetItemPosition(params->iItem, &ptItem);
2774
2775 ImageList_BeginDrag(big_icons, iIcon, params->ptAction.x - ptItem.x, params->ptAction.y - ptItem.y);
2776 DoDragDrop(pda, this, dwEffect, &dwEffect2);
2778 }
2779 }
2780 break;
2782 {
2783 DWORD dwAttr = SFGAO_CANRENAME;
2784 pidl = _PidlByItem(lpdi->item);
2785
2786 TRACE("-- LVN_BEGINLABELEDITW %p\n", this);
2787
2788 m_pSFParent->GetAttributesOf(1, &pidl, &dwAttr);
2789 if (SFGAO_CANRENAME & dwAttr)
2790 {
2791 HWND hEdit = reinterpret_cast<HWND>(m_ListView.SendMessage(LVM_GETEDITCONTROL));
2793
2794 // smartass-renaming: See CORE-15242
2795 if (!(dwAttr & SFGAO_FOLDER) && (dwAttr & SFGAO_FILESYSTEM) &&
2796 (lpdi->item.mask & LVIF_TEXT) && !SelectExtOnRename())
2797 {
2798 WCHAR szFullPath[MAX_PATH];
2799 PIDLIST_ABSOLUTE pidlFull = ILCombine(m_pidlParent, pidl);
2800 SHGetPathFromIDListW(pidlFull, szFullPath);
2801
2802 INT cchLimit = 0;
2803 _DoFolderViewCB(SFVM_GETNAMELENGTH, (WPARAM)pidlFull, (LPARAM)&cchLimit);
2804 if (cchLimit)
2805 ::SendMessageW(hEdit, EM_SETLIMITTEXT, cchLimit, 0);
2806
2807 if (!SHELL_FS_HideExtension(szFullPath))
2808 {
2809 LPWSTR pszText = lpdi->item.pszText;
2810 LPWSTR pchDotExt = PathFindExtensionW(pszText);
2811 ::PostMessageW(hEdit, EM_SETSEL, 0, pchDotExt - pszText);
2813 }
2814
2815 ILFree(pidlFull);
2816 }
2817
2818 m_isEditing = TRUE;
2819 return FALSE;
2820 }
2821 return TRUE;
2822 }
2823 case LVN_ENDLABELEDITW:
2824 {
2825 TRACE("-- LVN_ENDLABELEDITW %p\n", this);
2827
2828 if (lpdi->item.pszText)
2829 {
2830 HRESULT hr;
2831 LVITEMW lvItem;
2832
2833 pidl = _PidlByItem(lpdi->item);
2834 PITEMID_CHILD pidlNew = NULL;
2835 hr = m_pSFParent->SetNameOf(0, pidl, lpdi->item.pszText, SHGDN_INFOLDER, &pidlNew);
2836
2837 if (SUCCEEDED(hr) && pidlNew)
2838 {
2839 lvItem.mask = LVIF_PARAM|LVIF_IMAGE;
2840 lvItem.iItem = lpdi->item.iItem;
2841 lvItem.iSubItem = 0;
2842 lvItem.lParam = reinterpret_cast<LPARAM>(pidlNew);
2844 m_ListView.SetItem(&lvItem);
2845 m_ListView.Update(lpdi->item.iItem);
2846 return TRUE;
2847 }
2848 }
2849
2850 return FALSE;
2851 }
2852 default:
2853 TRACE("-- %p WM_COMMAND %x unhandled\n", this, lpnmh->code);
2854 break;
2855 }
2856
2857 return 0;
2858}
#define SHV_UPDATESTATUSBAR
Definition: CDefView.cpp:78
static BOOL SelectExtOnRename(void)
Definition: CDefView.cpp:2595
#define SFVM_GETNAMELENGTH
#define SFVM_SELECTIONCHANGED
LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2463
HRESULT GetDetailsByListColumn(PCUITEMID_CHILD pidl, UINT ListCol, SHELLDETAILS &sd)
Definition: CDefView.cpp:1059
HRESULT OpenSelectedItems()
Definition: CDefView.cpp:2157
BOOL WINAPI ImageList_BeginDrag(HIMAGELIST himlTrack, INT iTrack, INT dxHotspot, INT dyHotspot)
Definition: imagelist.c:648
HRESULT WINAPI DoDragDrop(IDataObject *pDataObject, IDropSource *pDropSource, DWORD dwOKEffect, DWORD *pdwEffect)
Definition: ole2.c:753
BOOL SHELL_FS_HideExtension(LPCWSTR szPath)
Definition: CFSFolder.cpp:1438
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
Definition: path.c:447
#define debugstr_w
Definition: kernel32.h:32
WORD unused[29]
Definition: crypt.c:1155
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:816
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1454
#define NM_RELEASEDCAPTURE
Definition: commctrl.h:141
#define LVN_GETDISPINFOA
Definition: commctrl.h:3158
#define LVN_BEGINRDRAG
Definition: commctrl.h:3146
#define LVN_COLUMNCLICK
Definition: commctrl.h:3144
#define NM_DBLCLK
Definition: commctrl.h:131
#define LVN_DELETEALLITEMS
Definition: commctrl.h:3139
#define LVM_GETEDITCONTROL
Definition: commctrl.h:2547
#define CDRF_DODEFAULT
Definition: commctrl.h:268
#define LVN_INSERTITEM
Definition: commctrl.h:3137
#define HDN_ENDTRACKW
Definition: commctrl.h:850
#define NM_CLICK
Definition: commctrl.h:130
#define LVN_BEGINDRAG
Definition: commctrl.h:3145
#define NM_KILLFOCUS
Definition: commctrl.h:136
#define NM_CUSTOMDRAW
Definition: commctrl.h:137
#define LVN_ENDLABELEDITW
Definition: commctrl.h:3143
#define LVN_BEGINLABELEDITW
Definition: commctrl.h:3141
#define NM_RETURN
Definition: commctrl.h:132
struct tagNMLISTVIEW * LPNMLISTVIEW
#define NM_RCLICK
Definition: commctrl.h:133
#define NM_SETFOCUS
Definition: commctrl.h:135
#define LVN_GETDISPINFOW
Definition: commctrl.h:3159
#define LVN_ITEMCHANGED
Definition: commctrl.h:3136
#define LVIF_DI_SETITEM
Definition: commctrl.h:3171
#define LVN_DELETEITEM
Definition: commctrl.h:3138
#define LVIS_FOCUSED
Definition: commctrl.h:2323
#define LVN_ITEMACTIVATE
Definition: commctrl.h:3152
#define EM_SCROLLCARET
Definition: richedit.h:81
static HWND hEdit
Definition: autocomplete.c:34
HRESULT WINAPI SHLimitInputEdit(HWND hWnd, IShellFolder *psf)
Definition: shellord.c:3047
BOOL WINAPI StrRetToStrNA(LPSTR dest, DWORD len, LPSTRRET src, const ITEMIDLIST *pidl)
Definition: shellstring.c:54
#define SFVM_COLUMNCLICK
Definition: shlobj.h:1315
LVITEMW item
Definition: commctrl.h:3184
LVITEMA item
Definition: commctrl.h:3179
int cchTextMax
Definition: commctrl.h:2354
LPSTR pszText
Definition: commctrl.h:2353
int cchTextMax
Definition: commctrl.h:2371
UINT code
Definition: winuser.h:3162
UINT uNewState
Definition: commctrl.h:3041
LPARAM lParam
Definition: commctrl.h:3045
UINT uOldState
Definition: commctrl.h:3042
DWORD dwAttributes
Definition: vdmdbg.h:34
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
#define EM_SETLIMITTEXT
Definition: winuser.h:2014
struct tagNMHDR * LPNMHDR
#define EM_SETSEL
Definition: winuser.h:2021
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ OnPrintClient()

LRESULT CDefView::OnPrintClient ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 1683 of file CDefView.cpp.

1684{
1685 HDC hDC = (HDC)wParam;
1686
1687 RECT rc;
1689
1691 {
1692 BITMAP bm;
1693 if (::GetObject(m_viewinfo_data.hbmBack, sizeof(BITMAP), &bm))
1694 {
1695 INT dx = -(::GetScrollPos(m_ListView, SB_HORZ) % bm.bmWidth);
1696 INT dy = -(::GetScrollPos(m_ListView, SB_VERT) % bm.bmHeight);
1697 DrawTileBitmap(hDC, &rc, m_viewinfo_data.hbmBack, bm.bmWidth, bm.bmHeight, dx, dy);
1698 }
1699 }
1700 else
1701 {
1703 }
1704
1705 bHandled = TRUE;
1706
1707 return TRUE;
1708}
static HDC hDC
Definition: 3dtext.c:33
static COLORREF GetViewColor(COLORREF Clr, UINT SysFallback)
Definition: CDefView.cpp:215
static VOID DrawTileBitmap(HDC hDC, LPCRECT prc, HBITMAP hbm, INT nWidth, INT nHeight, INT dx, INT dy)
Definition: CDefView.cpp:1662
DWORD WINAPI SHFillRectClr(HDC hDC, LPCRECT pRect, COLORREF cRef)
Definition: ordinal.c:2133
static HDC
Definition: imagelist.c:88
Definition: bl.h:1331
#define GetObject
Definition: wingdi.h:4468
#define COLOR_WINDOW
Definition: winuser.h:921
int WINAPI GetScrollPos(_In_ HWND, _In_ int)

◆ OnSetFocus()

LRESULT CDefView::OnSetFocus ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 2463 of file CDefView.cpp.

2464{
2465 TRACE("%p\n", this);
2466
2467 /* Tell the browser one of our windows has received the focus. This
2468 should always be done before merging menus (OnActivate merges the
2469 menus) if one of our windows has the focus.*/
2470
2471 m_pShellBrowser->OnViewWindowActive(this);
2473
2474 /* Set the focus to the listview */
2475 m_ListView.SetFocus();
2476
2477 /* Notify the ICommDlgBrowser interface */
2478 OnStateChange(CDBOSC_SETFOCUS);
2479
2480 return 0;
2481}

Referenced by OnNotify().

◆ OnSettingChange()

LRESULT CDefView::OnSettingChange ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 3005 of file CDefView.cpp.

3006{
3007 /* Wallpaper setting affects drop shadows effect */
3008 if (wParam == SPI_SETDESKWALLPAPER || wParam == 0)
3010
3011 return S_OK;
3012}
#define SPI_SETDESKWALLPAPER
Definition: winuser.h:1372

◆ OnShowWindow()

LRESULT CDefView::OnShowWindow ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 1612 of file CDefView.cpp.

1613{
1614 if (m_ListView.IsWindow())
1615 m_ListView.UpdateWindow();
1616 bHandled = FALSE;
1617 return 0;
1618}

◆ OnSize()

LRESULT CDefView::OnSize ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 2364 of file CDefView.cpp.

2365{
2366 WORD wWidth, wHeight;
2367
2368 wWidth = LOWORD(lParam);
2369 wHeight = HIWORD(lParam);
2370
2371 TRACE("%p width=%u height=%u\n", this, wWidth, wHeight);
2372
2373 // WM_SIZE can come before WM_CREATE
2374 if (!m_ListView)
2375 return 0;
2376
2377 /* Resize the ListView to fit our window */
2378 ::MoveWindow(m_ListView, 0, 0, wWidth, wHeight, TRUE);
2379
2381
2384
2385 return 0;
2386}
#define SFVM_SIZE
Definition: shlobj.h:1339
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)

◆ OnStateChange()

HRESULT CDefView::OnStateChange ( UINT  uFlags)

Definition at line 683 of file CDefView.cpp.

684{
686
687 if (m_pCommDlgBrowser.p != NULL)
688 {
689 TRACE("ICommDlgBrowser::OnStateChange flags=%x\n", uFlags);
690 ret = m_pCommDlgBrowser->OnStateChange(this, uFlags);
691 TRACE("--\n");
692 }
693
694 return ret;
695}

Referenced by OnKillFocus(), OnNotify(), and OnSetFocus().

◆ OnSysColorChange()

LRESULT CDefView::OnSysColorChange ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 1710 of file CDefView.cpp.

1711{
1712 /* Update desktop labels color */
1714
1715 /* Forward WM_SYSCOLORCHANGE to common controls */
1716 return m_ListView.SendMessageW(uMsg, 0, 0);
1717}

◆ OnUpdateStatusbar()

LRESULT CDefView::OnUpdateStatusbar ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)

Definition at line 808 of file CDefView.cpp.

809{
812 return 0;
813}

◆ OpenSelectedItems()

HRESULT CDefView::OpenSelectedItems ( )

Definition at line 2157 of file CDefView.cpp.

2158{
2159 HMENU hMenu;
2160 UINT uCommand;
2161 HRESULT hResult;
2162
2163 if (m_ListView.GetSelectedCount() == 0)
2164 return S_OK;
2165
2166 hResult = OnDefaultCommand();
2167 if (hResult == S_OK)
2168 return hResult;
2169
2170 hMenu = CreatePopupMenu();
2171 if (!hMenu)
2172 return E_FAIL;
2173
2176 MenuCleanup _(pCM, hMenu);
2177 if (FAILED_UNEXPECTEDLY(hResult))
2178 return hResult;
2179
2180 UINT cmf = CMF_DEFAULTONLY | GetContextMenuFlags(m_pShellBrowser, 0);
2181 hResult = pCM->QueryContextMenu(hMenu, 0, DVIDM_CONTEXTMENU_FIRST, DVIDM_CONTEXTMENU_LAST, cmf);
2182 if (FAILED_UNEXPECTEDLY(hResult))
2183 return hResult;
2184
2185 uCommand = GetMenuDefaultItem(hMenu, FALSE, 0);
2186 if (uCommand == (UINT)-1)
2187 {
2188 ERR("GetMenuDefaultItem returned -1\n");
2189 return E_FAIL;
2190 }
2191
2193
2194 return hResult;
2195}
UINT WINAPI GetMenuDefaultItem(_In_ HMENU hMenu, _In_ UINT fByPos, _In_ UINT gmdiFlags)

Referenced by OnNotify().

◆ QueryContinueDrag()

HRESULT WINAPI CDefView::QueryContinueDrag ( BOOL  fEscapePressed,
DWORD  grfKeyState 
)
override

Implements IDropSource.

Definition at line 4634 of file CDefView.cpp.

4635{
4636 TRACE("(%p)\n", this);
4637
4638 if (fEscapePressed)
4639 return DRAGDROP_S_CANCEL;
4640 else if (!(grfKeyState & MK_LBUTTON) && !(grfKeyState & MK_RBUTTON))
4641 return DRAGDROP_S_DROP;
4642 else
4643 return S_OK;
4644}
#define DRAGDROP_S_DROP
Definition: winerror.h:2646
#define DRAGDROP_S_CANCEL
Definition: winerror.h:2647
#define MK_RBUTTON
Definition: winuser.h:2371

◆ QueryService()

HRESULT STDMETHODCALLTYPE CDefView::QueryService ( REFGUID  guidService,
REFIID  riid,
void **  ppvObject 
)
override

Implements IServiceProvider.

Definition at line 4708 of file CDefView.cpp.

4709{
4710 if (IsEqualIID(guidService, SID_SFolderView))
4711 return QueryInterface(riid, ppvObject);
4713}
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082

◆ QueryStatus()

HRESULT WINAPI CDefView::QueryStatus ( const GUID pguidCmdGroup,
ULONG  cCmds,
OLECMD  prgCmds[],
OLECMDTEXT pCmdText 
)
override

Implements IOleCommandTarget.

Definition at line 4132 of file CDefView.cpp.

4133{
4134 FIXME("(%p)->(%p(%s) 0x%08x %p %p\n",
4135 this, pguidCmdGroup, debugstr_guid(pguidCmdGroup), cCmds, prgCmds, pCmdText);
4136
4137 if (!prgCmds)
4138 return E_INVALIDARG;
4139
4140 for (UINT i = 0; i < cCmds; i++)
4141 {
4142 FIXME("\tprgCmds[%d].cmdID = %d\n", i, prgCmds[i].cmdID);
4143 prgCmds[i].cmdf = 0;
4144 }
4145
4146 return OLECMDERR_E_UNKNOWNGROUP;
4147}

◆ QuerySupport()

HRESULT STDMETHODCALLTYPE CDefView::QuerySupport ( UINT support)
override

Definition at line 4120 of file CDefView.cpp.

4121{
4122 TRACE("(%p)->(%p)\n", this, support);
4123 return S_OK;
4124}

◆ Rearrange()

HRESULT STDMETHODCALLTYPE CDefView::Rearrange ( LPARAM  sort)
override

Definition at line 3894 of file CDefView.cpp.

3895{
3896 _Sort(LOWORD(sort & SHCIDS_COLUMNMASK));
3897 return S_OK;
3898}

◆ Refresh()

HRESULT WINAPI CDefView::Refresh ( )
override

Implements IShellView.

Definition at line 3162 of file CDefView.cpp.

3163{
3164 TRACE("(%p)\n", this);
3165
3167
3169 FillList();
3170
3171 return S_OK;
3172}

Referenced by OnChangeNotify(), and OnCommand().

◆ RefreshGhostedState()

void CDefView::RefreshGhostedState ( )

Definition at line 3092 of file CDefView.cpp.

3093{
3094 for (UINT i = 0, c = m_ListView.GetItemCount(); i < c; ++i)
3095 m_ListView.SetItemState(i, GetItemAttributes(i, SFGAO_HIDDEN | SFGAO_GHOSTED) ? LVIS_CUT : 0, LVIS_CUT);
3096}
const GLubyte * c
Definition: glext.h:8905

Referenced by SetClipboard().

◆ RefreshObject()

HRESULT STDMETHODCALLTYPE CDefView::RefreshObject ( PITEMID_CHILD  pidl,
UINT item 
)
override

Definition at line 3981 of file CDefView.cpp.

3982{
3983 FIXME("(%p)->(%p %p) stub\n", this, pidl, item);
3984 return E_NOTIMPL;
3985}

◆ RemoveObject()

HRESULT STDMETHODCALLTYPE CDefView::RemoveObject ( PITEMID_CHILD  pidl,
UINT item 
)
override

Definition at line 3938 of file CDefView.cpp.

3939{
3940 TRACE("(%p)->(%p %p)\n", this, pidl, item);
3941
3942 if (!m_ListView)
3943 {
3944 ERR("!m_ListView\n");
3945 return E_FAIL;
3946 }
3947
3948 if (pidl)
3949 {
3952 }
3953 else
3954 {
3955 *item = 0;
3957 }
3958
3959 return S_OK;
3960}

◆ SaveViewState() [1/2]

HRESULT WINAPI CDefView::SaveViewState ( )
override

Implements IShellView.

Definition at line 3423 of file CDefView.cpp.

3424{
3426 return SaveViewState(NULL);
3427 return S_FALSE;
3428}

Referenced by Exec(), and SaveViewState().

◆ SaveViewState() [2/2]

HRESULT CDefView::SaveViewState ( IStream pStream)

Definition at line 3350 of file CDefView.cpp.

3351{
3352 if (!m_ListView.m_hWnd)
3353 return E_UNEXPECTED;
3356 cvs.SortColId = sortcol >= 0 ? (WORD)sortcol : 0;
3358 PERSISTCOLUMNS cols;
3360 cols.Count = 0;
3361 LVCOLUMN lvc;
3362 lvc.mask = LVCF_WIDTH;
3363 for (UINT i = 0, j = 0; i < PERSISTCOLUMNS::MAXCOUNT && ListView_GetColumn(m_ListView, j, &lvc); ++j)
3364 {
3366 if (SUCCEEDED(hr))
3367 {
3368 cols.Columns[i] = MAKELONG(hr, lvc.cx);
3369 cols.Count = ++i;
3370 }
3371 }
3372 UINT cbColumns = FIELD_OFFSET(PERSISTCOLUMNS, Columns) + (sizeof(*cols.Columns) * cols.Count);
3374
3375 IPropertyBag *pPB;
3376 HRESULT hr = S_OK;
3377 if (pStream)
3378 {
3379 pStream->AddRef();
3380 goto stream;
3381 }
3383 if (SUCCEEDED(hr))
3384 {
3385 UINT uViewMode;
3386 GetCurrentViewMode(&uViewMode);
3387 hr = SHPropertyBag_WriteDWORD(pPB, L"Mode", uViewMode);
3389 SHPropertyBag_WriteDWORD(pPB, L"Sort", cvs.SortColId);
3390 SHPropertyBag_WriteDWORD(pPB, L"SortDir", cvs.SortDir);
3391 pStream = cols.Count ? SHCreateMemStream((LPBYTE)&cols, cbColumns) : NULL;
3392 if (!pStream || FAILED(SHPropertyBag_WriteStream(pPB, L"ColInfo", pStream)))
3393 SHPropertyBag_Delete(pPB, L"ColInfo");
3394#if 0 // TODO
3396 memcpy(name, L"ItemPos", sizeof(L"ItemPos"));
3397 if (SHGetPerScreenResName(name + 7, _countof(name) - 7, 0))
3398 {
3399 if (GetAutoArrange() == S_FALSE)
3400 // TODO: Save listview item positions
3401 else
3403 }
3404#endif
3405 pPB->Release();
3406 }
3407 else if (SUCCEEDED(hr = (m_pShellBrowser ? m_pShellBrowser->GetViewStateStream(STGM_WRITE, &pStream) : E_UNEXPECTED)))
3408 {
3409 stream:
3410 ULONG written;
3411 cvs.Signature = cvs.SIG;
3413 hr = pStream->Write(&cvs, sizeof(cvs), &written);
3414 if (SUCCEEDED(hr))
3415 hr = pStream->Write(&cols, cbColumns, &written);
3416 }
3417 // TODO: else if (SUCCEEDED(_DoFolderViewCB(SFVM_GETCOLUMNSTREAM)))
3418 if (pStream)
3419 pStream->Release();
3420 return hr;
3421}
int sortcol
Definition: sort.c:23
static const COLUMN_LIST Columns[]
Definition: listview.c:19
STDMETHOD() GetCurrentViewMode(UINT *pViewMode) override
Definition: CDefView.cpp:3553
void UpdateFolderViewFlags()
Definition: CDefView.cpp:3431
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
HRESULT Write([in, size_is(cb)] const void *pv, [in] ULONG cb, [out] ULONG *pcbWritten)
EXTERN_C INT WINAPI SHGetPerScreenResName(_Out_writes_(cchBuffer) LPWSTR pszBuffer, _In_ INT cchBuffer, _In_ DWORD dwReserved)
Definition: propbag.cpp:1938
IStream *WINAPI SHCreateMemStream(const BYTE *lpbData, UINT dwDataLen)
Definition: regstream.c:652
HRESULT WINAPI SHPropertyBag_Delete(IPropertyBag *ppb, LPCWSTR pszPropName)
HRESULT WINAPI SHPropertyBag_WriteStream(IPropertyBag *ppb, LPCWSTR pszPropName, IStream *pStream)
HRESULT WINAPI SHPropertyBag_WriteDWORD(IPropertyBag *ppb, LPCWSTR pszPropName, DWORD dwValue)
static const UINT SIG
Definition: CDefView.cpp:87
Definition: parse.h:23
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
unsigned char * LPBYTE
Definition: typedefs.h:53
#define MAKELONG(a, b)
Definition: typedefs.h:249

◆ Select()

HRESULT STDMETHODCALLTYPE CDefView::Select ( UINT  flags)
override

Definition at line 4114 of file CDefView.cpp.

4115{
4116 FIXME("(%p)->(%d) stub\n", this, flags);
4117 return E_NOTIMPL;
4118}

◆ SelectAndPositionItem()

HRESULT STDMETHODCALLTYPE CDefView::SelectAndPositionItem ( LPCITEMIDLIST  item,
UINT  flags,
POINT point 
)
override

Definition at line 3886 of file CDefView.cpp.

3887{
3888 FIXME("(%p)->(%p, %u, %p) stub\n", this, item, flags, point);
3889 return E_NOTIMPL;
3890}
POINTL point
Definition: edittest.c:50

◆ SelectAndPositionItems()

HRESULT STDMETHODCALLTYPE CDefView::SelectAndPositionItems ( UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl,
POINT apt,
DWORD  dwFlags 
)
override

Implements IFolderView.

Definition at line 3749 of file CDefView.cpp.

3750{
3752
3753 /* Reset the selection */
3755
3756 int lvIndex;
3757 for (UINT i = 0 ; i < cidl; i++)
3758 {
3759 lvIndex = LV_FindItemByPidl(apidl[i]);
3760 if (lvIndex != -1)
3761 {
3762 SelectItem(lvIndex, dwFlags);
3763 m_ListView.SetItemPosition(lvIndex, &apt[i]);
3764 }
3765 }
3766
3767 return S_OK;
3768}
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176

◆ SelectItem() [1/2]

HRESULT STDMETHODCALLTYPE CDefView::SelectItem ( int  iItem,
DWORD  dwFlags 
)
override

Implements IFolderView.

Definition at line 3718 of file CDefView.cpp.

3719{
3720 LVITEMW lvItem;
3721
3722 TRACE("(%p)->(%d, %x)\n", this, iItem, dwFlags);
3723
3724 lvItem.state = 0;
3725 lvItem.stateMask = LVIS_SELECTED;
3726
3727 if (dwFlags & SVSI_ENSUREVISIBLE)
3728 m_ListView.EnsureVisible(iItem, 0);
3729
3730 /* all items */
3731 if (dwFlags & SVSI_DESELECTOTHERS)
3733
3734 /* this item */
3735 if (dwFlags & SVSI_SELECT)
3736 lvItem.state |= LVIS_SELECTED;
3737
3738 if (dwFlags & SVSI_FOCUSED)
3739 lvItem.stateMask |= LVIS_FOCUSED;
3740
3741 m_ListView.SetItemState(iItem, lvItem.state, lvItem.stateMask);
3742
3743 if ((dwFlags & SVSI_EDIT) == SVSI_EDIT)
3744 m_ListView.EditLabel(iItem);
3745
3746 return S_OK;
3747}
HWND EditLabel(int i)
Definition: rosctrls.h:151
BOOL EnsureVisible(int i, BOOL fPartialOK)
Definition: rosctrls.h:146

◆ SelectItem() [2/2]

HRESULT WINAPI CDefView::SelectItem ( PCUITEMID_CHILD  pidlItem,
SVSIF  uFlags 
)
override

Implements IShellView.

Definition at line 3438 of file CDefView.cpp.

3439{
3440 int i;
3441
3442 TRACE("(%p)->(pidl=%p, 0x%08x) stub\n", this, pidl, uFlags);
3443
3444 if (!m_ListView)
3445 {
3446 ERR("!m_ListView\n");
3447 return E_FAIL;
3448 }
3449
3450 i = LV_FindItemByPidl(pidl);
3451 if (i == -1)
3452 return S_OK;
3453
3454 LVITEMW lvItem = {0};
3455 lvItem.mask = LVIF_STATE;
3457
3458 while (m_ListView.GetItem(&lvItem))
3459 {
3460 if (lvItem.iItem == i)
3461 {
3462 if (uFlags & SVSI_SELECT)
3463 lvItem.state |= LVIS_SELECTED;
3464 else
3465 lvItem.state &= ~LVIS_SELECTED;
3466
3467 if (uFlags & SVSI_FOCUSED)
3468 lvItem.state |= LVIS_FOCUSED;
3469 else
3470 lvItem.state &= ~LVIS_FOCUSED;
3471 }
3472 else
3473 {
3474 if (uFlags & SVSI_DESELECTOTHERS)
3475 {
3476 lvItem.state &= ~LVIS_SELECTED;
3477 }
3478 lvItem.state &= ~LVIS_FOCUSED;
3479 }
3480
3481 m_ListView.SetItem(&lvItem);
3482 lvItem.iItem++;
3483 }
3484
3485 if (uFlags & SVSI_ENSUREVISIBLE)
3487
3488 if((uFlags & SVSI_EDIT) == SVSI_EDIT)
3490
3491 return S_OK;
3492}

Referenced by drag_notify_subitem(), OnContextMenu(), and SelectAndPositionItems().

◆ SetAdvise()

HRESULT WINAPI CDefView::SetAdvise ( DWORD  aspects,
DWORD  advf,
IAdviseSink pAdvSink 
)
override

Implements IViewObject.

Definition at line 4677 of file CDefView.cpp.

4678{
4679 FIXME("partial stub: %p 0x%08x 0x%08x %p\n", this, aspects, advf, pAdvSink);
4680
4681 // FIXME: we set the AdviseSink, but never use it to send any advice
4682 m_pAdvSink = pAdvSink;
4683 m_dwAspects = aspects;
4684 m_dwAdvf = advf;
4685
4686 return S_OK;
4687}

◆ SetAutomationObject()

HRESULT STDMETHODCALLTYPE CDefView::SetAutomationObject ( IDispatch disp)
override

Definition at line 4126 of file CDefView.cpp.

4127{
4128 FIXME("(%p)->(%p) stub\n", this, disp);
4129 return E_NOTIMPL;
4130}

◆ SetCallback()

HRESULT STDMETHODCALLTYPE CDefView::SetCallback ( IShellFolderViewCB *  new_cb,
IShellFolderViewCB **  old_cb 
)
override

Definition at line 4102 of file CDefView.cpp.

4103{
4104 if (old_cb)
4105 *old_cb = m_pShellFolderViewCB.Detach();
4106
4107 m_pShellFolderViewCB = new_cb;
4109 if (new_cb)
4110 new_cb->QueryInterface(IID_PPV_ARG(IFolderFilter, &m_pFolderFilter));
4111 return S_OK;
4112}
T * Detach()
Definition: atlcomcli.h:186

◆ SetClipboard()

HRESULT STDMETHODCALLTYPE CDefView::SetClipboard ( BOOL  move)
override

Definition at line 4066 of file CDefView.cpp.

4067{
4068 if (!move)
4069 return S_OK;
4070
4071 UINT CutCount = 0;
4072 for (int i = -1; (i = m_ListView.GetNextItem(i, LVNI_SELECTED)) != -1;)
4073 {
4074 if (!CutCount++)
4075 {
4076 // Turn off the LVIS_CUT LVM_SETCALLBACKMASK optimization
4077 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, m_ListView.SendMessageW(LVM_GETCALLBACKMASK, 0, 0) & ~LVIS_CUT, 0);
4079 }
4081 }
4082 if (CutCount)
4083 {
4085 m_HasCutItems = true;
4086 }
4087 return S_OK;
4088}
void RefreshGhostedState()
Definition: CDefView.cpp:3092
void Hook(HWND hWnd)
Definition: utils.h:105

◆ SetCurrentViewMode()

HRESULT STDMETHODCALLTYPE CDefView::SetCurrentViewMode ( UINT  ViewMode)
override

Implements IFolderView.

Definition at line 3564 of file CDefView.cpp.

3565{
3566 DWORD dwStyle;
3567 TRACE("(%p)->(%u), stub\n", this, ViewMode);
3568
3569 /* It's not redundant to check FVM_AUTO because it's a (UINT)-1 */
3570 if (((INT)ViewMode < FVM_FIRST || (INT)ViewMode > FVM_LAST) && ((INT)ViewMode != FVM_AUTO))
3571 return E_INVALIDARG;
3572
3573 /* Windows before Vista uses LVM_SETVIEW and possibly
3574 LVM_SETEXTENDEDLISTVIEWSTYLE to set the style of the listview,
3575 while later versions seem to accomplish this through other
3576 means. */
3577 switch (ViewMode)
3578 {
3579 case FVM_ICON:
3580 dwStyle = LVS_ICON;
3581 break;
3582 case FVM_DETAILS:
3583 dwStyle = LVS_REPORT;
3584 break;
3585 case FVM_SMALLICON:
3586 dwStyle = LVS_SMALLICON;
3587 break;
3588 case FVM_LIST:
3589 dwStyle = LVS_LIST;
3590 break;
3591 default:
3592 {
3593 FIXME("ViewMode %d not implemented\n", ViewMode);
3594 dwStyle = LVS_LIST;
3595 break;
3596 }
3597 }
3598
3599 m_ListView.ModifyStyle(LVS_TYPEMASK, dwStyle);
3600
3601 /* This will not necessarily be the actual mode set above.
3602 This mimics the behavior of Windows XP. */
3603 m_FolderSettings.ViewMode = ViewMode;
3604
3605 return S_OK;
3606}

◆ SetItemPos()

HRESULT STDMETHODCALLTYPE CDefView::SetItemPos ( PCUITEMID_CHILD  pidl,
POINT pt 
)
override

Definition at line 4054 of file CDefView.cpp.

4055{
4056 FIXME("(%p)->(%p %p) stub\n", this, pidl, pt);
4057 return E_NOTIMPL;
4058}

◆ SetObjectCount()

HRESULT STDMETHODCALLTYPE CDefView::SetObjectCount ( UINT  count,
UINT  flags 
)
override

Definition at line 3969 of file CDefView.cpp.

3970{
3971 FIXME("(%p)->(%d %x) stub\n", this, count, flags);
3972 return E_NOTIMPL;
3973}

◆ SetPoints()

HRESULT STDMETHODCALLTYPE CDefView::SetPoints ( IDataObject obj)
override

Definition at line 4090 of file CDefView.cpp.

4091{
4092 FIXME("(%p)->(%p) stub\n", this, obj);
4093 return E_NOTIMPL;
4094}

◆ SetRedraw()

HRESULT STDMETHODCALLTYPE CDefView::SetRedraw ( BOOL  redraw)
override

Definition at line 3987 of file CDefView.cpp.

3988{
3989 TRACE("(%p)->(%d)\n", this, redraw);
3990 if (m_ListView)
3992 return S_OK;
3993}
void redraw(int x, int y, int cx, int cy)
Definition: qtewin.cpp:1248

◆ TranslateAccelerator()

HRESULT WINAPI CDefView::TranslateAccelerator ( MSG pmsg)
override

Implements IShellView.

Definition at line 3117 of file CDefView.cpp.

3118{
3119 if (m_isEditing)
3120 return S_FALSE;
3121
3122 if (lpmsg->message >= WM_KEYFIRST && lpmsg->message <= WM_KEYLAST)
3123 {
3124 if (::TranslateAcceleratorW(m_hWnd, m_hAccel, lpmsg) != 0)
3125 return S_OK;
3126
3127 TRACE("-- key=0x%04lx\n", lpmsg->wParam);
3128 }
3129
3130 return m_pShellBrowser ? m_pShellBrowser->TranslateAcceleratorSB(lpmsg, 0) : S_FALSE;
3131}
#define WM_KEYFIRST
Definition: winuser.h:1717
int WINAPI TranslateAcceleratorW(_In_ HWND, _In_ HACCEL, _In_ LPMSG)
#define WM_KEYLAST
Definition: winuser.h:1731

◆ UIActivate()

HRESULT WINAPI CDefView::UIActivate ( UINT  uState)
override

Implements IShellView.

Definition at line 3139 of file CDefView.cpp.

3140{
3141 TRACE("(%p)->(state=%x)\n", this, uState);
3142
3143 // don't do anything if the state isn't changing
3144 if (m_uState == uState)
3145 return S_OK;
3146
3147 // OnActivate handles the menu merging and internal state
3148 DoActivate(uState);
3149
3150 // only do this if we are active
3151 if (uState != SVUIA_DEACTIVATE)
3152 {
3154
3155 // Set the text for the status bar
3157 }
3158
3159 return S_OK;
3160}

Referenced by DestroyViewWindow().

◆ Unfreeze()

HRESULT WINAPI CDefView::Unfreeze ( DWORD  dwFreeze)
override

Implements IViewObject.

Definition at line 4671 of file CDefView.cpp.

4672{
4673 FIXME("Stub: this=%p\n", this);
4674 return E_NOTIMPL;
4675}

◆ UpdateFolderViewFlags()

void CDefView::UpdateFolderViewFlags ( )

◆ UpdateListColors()

void CDefView::UpdateListColors ( )

Definition at line 917 of file CDefView.cpp.

918{
920 {
921 /* Check if drop shadows option is enabled */
922 BOOL bDropShadow = FALSE;
923 DWORD cbDropShadow = sizeof(bDropShadow);
924
925 /*
926 * The desktop ListView always take the default desktop colours, by
927 * remaining transparent and letting user32/win32k paint itself the
928 * desktop background color, if any.
929 */
931
932 SHGetValueW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
933 L"ListviewShadow", NULL, &bDropShadow, &cbDropShadow);
934 if (bDropShadow)
935 {
936 /* Set the icon background transparent */
938 m_ListView.SetTextColor(RGB(255, 255, 255));
939 m_ListView.SetExtendedListViewStyle(LVS_EX_TRANSPARENTSHADOWTEXT, LVS_EX_TRANSPARENTSHADOWTEXT);
940 }
941 else
942 {
943 /* Set the icon background as the same colour as the desktop */
945 m_ListView.SetTextBkColor(crDesktop);
946 if (GetRValue(crDesktop) + GetGValue(crDesktop) + GetBValue(crDesktop) > 128 * 3)
947 m_ListView.SetTextColor(RGB(0, 0, 0));
948 else
949 m_ListView.SetTextColor(RGB(255, 255, 255));
950 m_ListView.SetExtendedListViewStyle(0, LVS_EX_TRANSPARENTSHADOWTEXT);
951 }
952 }
953 else
954 {
957
958 // Background is painted by the parent via WM_PRINTCLIENT
959 m_ListView.SetExtendedListViewStyle(LVS_EX_TRANSPARENTBKGND, LVS_EX_TRANSPARENTBKGND);
960 }
961}
BOOL SetTextBkColor(COLORREF cr)
Definition: rosctrls.h:32
BOOL SetTextColor(COLORREF cr)
Definition: rosctrls.h:42
BOOL SetBkColor(COLORREF cr)
Definition: rosctrls.h:37
DWORD WINAPI SHGetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData)
Definition: reg.c:1236
#define RGB(r, g, b)
Definition: precomp.h:71
#define GetBValue(quad)
Definition: precomp.h:75
#define GetGValue(quad)
Definition: precomp.h:74
#define GetRValue(quad)
Definition: precomp.h:73
#define CLR_NONE
Definition: commctrl.h:319
DWORD COLORREF
Definition: windef.h:300
DWORD WINAPI GetSysColor(_In_ int)
#define COLOR_WINDOWTEXT
Definition: winuser.h:924
#define COLOR_DESKTOP
Definition: winuser.h:917

Referenced by FillList(), OnSettingChange(), and OnSysColorChange().

◆ UpdateObject()

HRESULT STDMETHODCALLTYPE CDefView::UpdateObject ( PITEMID_CHILD  pidl_old,
PITEMID_CHILD  pidl_new,
UINT item 
)
override

Definition at line 3975 of file CDefView.cpp.

3976{
3977 FIXME("(%p)->(%p %p %p) stub\n", this, pidl_old, pidl_new, item);
3978 return E_NOTIMPL;
3979}

◆ UpdateStatusbar()

void CDefView::UpdateStatusbar ( )

Definition at line 721 of file CDefView.cpp.

722{
723 WCHAR szFormat[MAX_PATH] = {0};
724 WCHAR szPartText[MAX_PATH] = {0};
725 UINT cSelectedItems;
726
727 if (!m_ListView)
728 return;
729
730 cSelectedItems = m_ListView.GetSelectedCount();
731 if (cSelectedItems)
732 {
734 StringCchPrintfW(szPartText, _countof(szPartText), szFormat, cSelectedItems);
735 }
736 else
737 {
738 LoadStringW(shell32_hInstance, IDS_OBJECTS, szFormat, _countof(szFormat));
739 StringCchPrintfW(szPartText, _countof(szPartText), szFormat, m_ListView.GetItemCount());
740 }
741
742 LRESULT lResult;
743 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETTEXT, 0, (LPARAM)szPartText, &lResult);
744
745 // Don't bother with the extra processing if we only have one StatusBar part
747 {
748 UINT64 uTotalFileSize = 0;
749 WORD uFileFlags = LVNI_ALL;
750 LPARAM pIcon = NULL;
751 INT nItem = -1;
752 bool bIsOnlyFoldersSelected = true;
753
754 // If we have something selected then only count selected file sizes
755 if (cSelectedItems)
756 {
757 uFileFlags = LVNI_SELECTED;
758 }
759
760 while ((nItem = m_ListView.GetNextItem(nItem, uFileFlags)) >= 0)
761 {
762 PCUITEMID_CHILD pidl = _PidlByItem(nItem);
763
764 uTotalFileSize += _ILGetFileSize(pidl, NULL, 0);
765
766 if (!_ILIsFolder(pidl))
767 {
768 bIsOnlyFoldersSelected = false;
769 }
770 }
771
772 // Don't show the file size text if there is 0 bytes in the folder
773 // OR we only have folders selected
774 if ((cSelectedItems && !bIsOnlyFoldersSelected) || uTotalFileSize)
775 {
776 StrFormatByteSizeW(uTotalFileSize, szPartText, _countof(szPartText));
777 }
778 else
779 {
780 *szPartText = 0;
781 }
782
783 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETTEXT, 1, (LPARAM)szPartText, &lResult);
784
785 // If we are in a Recycle Bin then show no text for the location part
787 {
788 LoadStringW(shell32_hInstance, IDS_MYCOMPUTER, szPartText, _countof(szPartText));
789 pIcon = (LPARAM)m_hMyComputerIcon;
790 }
791
792 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETICON, 2, pIcon, &lResult);
793 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETTEXT, 2, (LPARAM)szPartText, &lResult);
794 }
795
796 SFGAOF att = 0;
797 if (cSelectedItems > 0)
798 {
799 UINT maxquery = 42; // Checking the attributes can be slow, only check small selections (_DoCopyToMoveToFolder will verify the full array)
800 att = SFGAO_CANCOPY | SFGAO_CANMOVE;
801 if (cSelectedItems <= maxquery && (!GetSelections() || FAILED(m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &att))))
802 att = 0;
803 }
804 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON, FCIDM_SHVIEW_COPYTO, (att & SFGAO_CANCOPY) != 0, &lResult);
805 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON, FCIDM_SHVIEW_MOVETO, (att & SFGAO_CANMOVE) != 0, &lResult);
806}
unsigned long long UINT64
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:2394
BOOL _ILIsFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:2120
BOOL _ILIsBitBucket(LPCITEMIDLIST pidl)
Definition: pidl.c:2091
DWORD _ILGetFileSize(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
Definition: pidl.c:2497
#define SB_SETICON
Definition: commctrl.h:1966
#define SB_SETTEXT
Definition: commctrl.h:1954
#define IDS_OBJECTS_SELECTED
Definition: shresdef.h:283
#define IDS_MYCOMPUTER
Definition: shresdef.h:279
#define IDS_OBJECTS
Definition: shresdef.h:282
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)

Referenced by OnChangeNotify(), OnCreate(), OnSize(), OnUpdateStatusbar(), and UIActivate().

◆ WindowProc()

static LRESULT CALLBACK CDefView::WindowProc ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
inlinestatic

Definition at line 517 of file CDefView.cpp.

518 {
519 CDefView *pThis;
521
522 // Must hold a reference during message handling
523 pThis = reinterpret_cast<CDefView *>(hWnd);
524 pThis->AddRef();
526 pThis->Release();
527 return result;
528 }
HWND hWnd
Definition: settings.c:17

Referenced by GetWindowProc().

Member Data Documentation

◆ m_apidl

◆ m_bmenuBarInitialized

BOOL CDefView::m_bmenuBarInitialized
private

Definition at line 249 of file CDefView.cpp.

Referenced by DoActivate().

◆ m_Category

CLSID CDefView::m_Category
private

Definition at line 280 of file CDefView.cpp.

Referenced by _MergeToolbar(), CDefView(), and Exec().

◆ m_cidl

◆ m_ClipboardChain

ClipboardViewerChain CDefView::m_ClipboardChain
private

Definition at line 241 of file CDefView.cpp.

Referenced by OnChangeCBChain(), OnDestroy(), OnDrawClipboard(), and SetClipboard().

◆ m_cScrollDelay

UINT CDefView::m_cScrollDelay
private

Definition at line 267 of file CDefView.cpp.

Referenced by drag_notify_subitem().

◆ m_Destroyed

BOOL CDefView::m_Destroyed
private

Definition at line 281 of file CDefView.cpp.

Referenced by OnDestroy().

◆ m_dwAdvf

DWORD CDefView::m_dwAdvf
private

Definition at line 260 of file CDefView.cpp.

Referenced by GetAdvise(), and SetAdvise().

◆ m_dwAspects

DWORD CDefView::m_dwAspects
private

Definition at line 259 of file CDefView.cpp.

Referenced by GetAdvise(), and SetAdvise().

◆ m_FolderSettings

◆ m_grfKeyState

DWORD CDefView::m_grfKeyState
private

Definition at line 270 of file CDefView.cpp.

Referenced by drag_notify_subitem(), and Drop().

◆ m_hAccel

HACCEL CDefView::m_hAccel
private

Definition at line 258 of file CDefView.cpp.

Referenced by DestroyViewWindow(), OnCreate(), and TranslateAccelerator().

◆ m_HasCutItems

bool CDefView::m_HasCutItems
private

Definition at line 278 of file CDefView.cpp.

Referenced by LV_AddItem(), LV_UpdateItem(), OnDrawClipboard(), and SetClipboard().

◆ m_hContextMenu

HMENU CDefView::m_hContextMenu
private

Definition at line 248 of file CDefView.cpp.

Referenced by OnContextMenu(), and OnInitMenuPopup().

◆ m_hMenu

◆ m_hMenuArrangeModes

HMENU CDefView::m_hMenuArrangeModes
private

◆ m_hMenuViewModes

HMENU CDefView::m_hMenuViewModes
private

Definition at line 247 of file CDefView.cpp.

Referenced by DestroyViewWindow(), Exec(), and FillViewMenu().

◆ m_hMyComputerIcon

HICON CDefView::m_hMyComputerIcon
private

Definition at line 284 of file CDefView.cpp.

Referenced by CDefView(), and UpdateStatusbar().

◆ m_hNotify

ULONG CDefView::m_hNotify
private

Definition at line 257 of file CDefView.cpp.

Referenced by OnCreate(), and OnDestroy().

◆ m_hWndParent

HWND CDefView::m_hWndParent
private

Definition at line 243 of file CDefView.cpp.

Referenced by CreateViewWindow3(), and Exec().

◆ m_iDragOverItem

LONG CDefView::m_iDragOverItem
private

Definition at line 266 of file CDefView.cpp.

Referenced by drag_notify_subitem(), DragLeave(), Drop(), IsDropOnSource(), and OnNotify().

◆ m_isEditing

BOOL CDefView::m_isEditing
private

Definition at line 275 of file CDefView.cpp.

Referenced by OnNotify(), and TranslateAccelerator().

◆ m_isParentFolderSpecial

BOOL CDefView::m_isParentFolderSpecial
private

Definition at line 276 of file CDefView.cpp.

Referenced by _HandleStatusBarResize(), OnCreate(), and UpdateStatusbar().

◆ m_ListToFolderColMap

HDPA CDefView::m_ListToFolderColMap
private

Definition at line 255 of file CDefView.cpp.

Referenced by CDefView(), ColumnListChanged(), MapListColumnToFolderColumn(), and ~CDefView().

◆ m_ListView

◆ m_LoadColumnsList

HDPA CDefView::m_LoadColumnsList
private

Definition at line 254 of file CDefView.cpp.

Referenced by InitList(), LoadColumns(), LoadViewState(), and ~CDefView().

◆ m_pAdvSink

CComPtr<IAdviseSink> CDefView::m_pAdvSink
private

Definition at line 261 of file CDefView.cpp.

Referenced by GetAdvise(), and SetAdvise().

◆ m_pCM

CComPtr<IContextMenu> CDefView::m_pCM
private

Definition at line 272 of file CDefView.cpp.

Referenced by OnContextMenu(), OnCustomItem(), and OnInitMenuPopup().

◆ m_pCommDlgBrowser

◆ m_pCurDataObject

CComPtr<IDataObject> CDefView::m_pCurDataObject
private

Definition at line 265 of file CDefView.cpp.

Referenced by drag_notify_subitem(), DragEnter(), DragLeave(), and Drop().

◆ m_pCurDropTarget

CComPtr<IDropTarget> CDefView::m_pCurDropTarget
private

Definition at line 264 of file CDefView.cpp.

Referenced by drag_notify_subitem(), DragLeave(), Drop(), IsDropOnSource(), and OnNotify().

◆ m_pFileMenu

CComPtr<IContextMenu> CDefView::m_pFileMenu
private

Definition at line 273 of file CDefView.cpp.

Referenced by FillFileMenu(), OnCommand(), and OnDestroy().

◆ m_pFolderFilter

CComPtr<IFolderFilter> CDefView::m_pFolderFilter
private

Definition at line 239 of file CDefView.cpp.

Referenced by IncludeObject(), and SetCallback().

◆ m_pidlParent

PIDLIST_ABSOLUTE CDefView::m_pidlParent
private

◆ m_pSDParent

CComPtr<IShellDetails> CDefView::m_pSDParent
private

Definition at line 235 of file CDefView.cpp.

Referenced by GetDetailsByFolderColumn(), Initialize(), and OnNotify().

◆ m_pSF2Parent

◆ m_pSFParent

◆ m_pShellBrowser

◆ m_pShellFolderViewCB

CComPtr<IShellFolderViewCB> CDefView::m_pShellFolderViewCB
private

Definition at line 236 of file CDefView.cpp.

Referenced by _DoFolderViewCB(), and SetCallback().

◆ m_pShellFolderViewDual

CComPtr<IShellFolderViewDual> CDefView::m_pShellFolderViewDual
private

Definition at line 240 of file CDefView.cpp.

Referenced by GetItemObject().

◆ m_pSourceDataObject

CComPtr<IDataObject> CDefView::m_pSourceDataObject
private

Definition at line 263 of file CDefView.cpp.

Referenced by drag_notify_subitem(), IsDropOnSource(), and OnNotify().

◆ m_ptFirstMousePos

POINT CDefView::m_ptFirstMousePos
private

Definition at line 269 of file CDefView.cpp.

Referenced by Drop(), GetDragPoint(), and OnNotify().

◆ m_ptLastMousePos

POINT CDefView::m_ptLastMousePos
private

Definition at line 268 of file CDefView.cpp.

Referenced by CDefView(), drag_notify_subitem(), and Drop().

◆ m_ScheduledStatusbarUpdate

bool CDefView::m_ScheduledStatusbarUpdate
private

Definition at line 277 of file CDefView.cpp.

Referenced by OnNotify(), and OnUpdateStatusbar().

◆ m_sortInfo

◆ m_uState

UINT CDefView::m_uState
private

Definition at line 250 of file CDefView.cpp.

Referenced by DoActivate(), OnDeactivate(), and UIActivate().

◆ m_viewinfo_data

SFVM_CUSTOMVIEWINFO_DATA CDefView::m_viewinfo_data
private

Definition at line 282 of file CDefView.cpp.

Referenced by CDefView(), FillList(), OnPrintClient(), UpdateListColors(), and ~CDefView().


The documentation for this class was generated from the following file: