ReactOS 0.4.16-dev-1369-gd4d04c8
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 UpdateStatusbarLocation ()
 
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)
 
BOOL LV_UpdateItem (INT nItem, PCUITEMID_CHILD pidl)
 
BOOL 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)
 
HRESULT SelectAndPositionItem (int Idx, UINT fSVSI, POINT *ppt)
 
UINT GetSelections ()
 
SFGAOF GetSelectionAttributes (SFGAOF Query)
 
HRESULT OpenSelectedItems (PCSTR pszVerb=NULL)
 
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, bool TryMapVerb=false)
 
LRESULT OnExplorerCommand (UINT uCommand, BOOL bUseSelection)
 
FOLDERVIEWMODE GetDefaultViewMode ()
 
HRESULT GetDefaultViewStream (DWORD Stgm, IStream **ppStream)
 
HRESULT LoadViewState ()
 
HRESULT SaveViewState (IStream *pStream)
 
void UpdateFolderViewFlags ()
 
UINT GetItemActivateFlags ()
 
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 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 OnMenuMessage (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 () override
 
- 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
 
BOOL IsSpecialFolder (int &csidl) 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
 
signed char m_SpecialFolder
 
bool m_isFullStatusBar
 
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 594 of file CDefView.cpp.

594 :
595 m_ListView(),
597 m_hMenu(NULL),
602 m_uState(0),
603 m_cidl(0),
604 m_apidl(NULL),
607 m_hNotify(0),
608 m_hAccel(NULL),
609 m_dwAspects(0),
610 m_dwAdvf(0),
614 m_SpecialFolder(-1),
615 m_isFullStatusBar(true),
617 m_HasCutItems(false),
619{
626
630}
#define shell32_hInstance
HMENU m_hMenu
Definition: CDefView.cpp:245
HDPA m_LoadColumnsList
Definition: CDefView.cpp:254
bool m_ScheduledStatusbarUpdate
Definition: CDefView.cpp:278
HMENU m_hMenuArrangeModes
Definition: CDefView.cpp:246
bool m_isFullStatusBar
Definition: CDefView.cpp:277
HWND m_hWndParent
Definition: CDefView.cpp:243
DWORD m_dwAdvf
Definition: CDefView.cpp:260
DWORD m_dwAspects
Definition: CDefView.cpp:259
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:282
PCUITEMID_CHILD * m_apidl
Definition: CDefView.cpp:252
HDPA m_ListToFolderColMap
Definition: CDefView.cpp:255
CLSID m_Category
Definition: CDefView.cpp:281
signed char m_SpecialFolder
Definition: CDefView.cpp:276
HICON m_hMyComputerIcon
Definition: CDefView.cpp:285
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:279
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:283
#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:680
#define ZeroMemory
Definition: winbase.h:1753
#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:2412

◆ ~CDefView()

CDefView::~CDefView ( )

Definition at line 632 of file CDefView.cpp.

633{
634 TRACE(" destroying IShellView(%p)\n", this);
635
637
639 {
642 }
643
644 if (m_hWnd)
645 {
647 }
648
652}
#define SFVM_VIEWRELEASE
HWND m_hWnd
Definition: atlwin.h:273
STDMETHOD() DestroyViewWindow() override
Definition: CDefView.cpp:3224
HRESULT _DoFolderViewCB(UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: CDefView.cpp:4795
BOOL WINAPI DPA_Destroy(HDPA hdpa)
Definition: dpa.c:396
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:337
pKey DeleteObject()
#define TRACE(s)
Definition: solgame.cpp:4

Member Function Documentation

◆ _DoCopyToMoveToFolder()

void CDefView::_DoCopyToMoveToFolder ( BOOL  bCopy)
private

Definition at line 2486 of file CDefView.cpp.

2487{
2488 if (!GetSelections())
2489 return;
2490
2491 SFGAOF rfg = SFGAO_CANCOPY | SFGAO_CANMOVE | SFGAO_FILESYSTEM;
2492 HRESULT hr = m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &rfg);
2494 return;
2495
2496 if (!bCopy && !(rfg & SFGAO_CANMOVE))
2497 return;
2498 if (bCopy && !(rfg & SFGAO_CANCOPY))
2499 return;
2500
2502 hr = m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, m_apidl, IID_IContextMenu, 0, (void **)&pCM);
2504 return;
2505
2506 InvokeContextMenuCommand(pCM, (bCopy ? "copyto" : "moveto"), NULL);
2507}
CComPtr< IShellFolder > m_pSFParent
Definition: CDefView.cpp:233
HRESULT InvokeContextMenuCommand(CComPtr< IContextMenu > &pCM, LPCSTR lpVerb, POINT *pt=NULL, bool TryMapVerb=false)
Definition: CDefView.cpp:2145
UINT GetSelections()
Definition: CDefView.cpp:2104
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:30
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 4795 of file CDefView.cpp.

4796{
4798
4800 {
4801 hr = m_pShellFolderViewCB->MessageSFVCB(uMsg, wParam, lParam);
4802 }
4803
4804 return hr;
4805}
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 4451 of file CDefView.cpp.

4452{
4453 RECT rcBound;
4454 INT i, nCount = m_ListView.GetItemCount();
4455 DWORD dwSpacing;
4456 INT dx, dy;
4457 BOOL bSmall = ((m_ListView.GetStyle() & LVS_TYPEMASK) != LVS_ICON);
4458
4459 // FIXME: LVM_GETORIGIN is broken. See CORE-17266
4460 pt.x += m_ListView.GetScrollPos(SB_HORZ);
4461 pt.y += m_ListView.GetScrollPos(SB_VERT);
4462
4463 if (m_ListView.GetStyle() & LVS_ALIGNLEFT)
4464 {
4465 // vertically
4466 for (i = 0; i < nCount; ++i)
4467 {
4468 dwSpacing = ListView_GetItemSpacing(m_ListView, bSmall);
4469 dx = LOWORD(dwSpacing);
4470 dy = HIWORD(dwSpacing);
4472 rcBound.right = rcBound.left + dx;
4473 rcBound.bottom = rcBound.top + dy;
4474 if (pt.x < rcBound.right && pt.y < (rcBound.top + rcBound.bottom) / 2)
4475 {
4476 return i;
4477 }
4478 }
4479 for (i = nCount - 1; i >= 0; --i)
4480 {
4482 if (rcBound.left < pt.x && rcBound.top < pt.y)
4483 {
4484 return i + 1;
4485 }
4486 }
4487 }
4488 else
4489 {
4490 // horizontally
4491 for (i = 0; i < nCount; ++i)
4492 {
4493 dwSpacing = ListView_GetItemSpacing(m_ListView, bSmall);
4494 dx = LOWORD(dwSpacing);
4495 dy = HIWORD(dwSpacing);
4497 rcBound.right = rcBound.left + dx;
4498 rcBound.bottom = rcBound.top + dy;
4499 if (pt.y < rcBound.bottom && pt.x < rcBound.left)
4500 {
4501 return i;
4502 }
4503 if (pt.y < rcBound.bottom && pt.x < rcBound.right)
4504 {
4505 return i + 1;
4506 }
4507 }
4508 for (i = nCount - 1; i >= 0; --i)
4509 {
4511 if (rcBound.left < pt.x && rcBound.top < pt.y)
4512 {
4513 return i + 1;
4514 }
4515 }
4516 }
4517
4518 return nCount;
4519}
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 4547 of file CDefView.cpp.

4548{
4549 // Get the handle for the status bar
4550 HWND fStatusBar;
4551 m_pShellBrowser->GetControlWindow(FCW_STATUS, &fStatusBar);
4552
4553 // Get the size of our status bar
4554 RECT statusBarSize;
4555 ::GetWindowRect(fStatusBar, &statusBarSize);
4556
4557 // Resize the status bar
4558 _HandleStatusBarResize(statusBarSize.right - statusBarSize.left);
4559}
CComPtr< IShellBrowser > m_pShellBrowser
Definition: CDefView.cpp:237
void _HandleStatusBarResize(int width)
Definition: CDefView.cpp:4521
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)

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

◆ _GetSnapToGrid()

HRESULT CDefView::_GetSnapToGrid ( )
private

Definition at line 3754 of file CDefView.cpp.

3755{
3756 DWORD dwExStyle = (DWORD)m_ListView.SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
3757 return ((dwExStyle & LVS_EX_SNAPTOGRID) ? S_OK : S_FALSE);
3758}
#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 4521 of file CDefView.cpp.

4522{
4523 LRESULT lResult;
4524
4525 if (!m_isFullStatusBar)
4526 {
4527 int nPartArray[] = {-1};
4528 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETPARTS, _countof(nPartArray), (LPARAM)nPartArray, &lResult);
4529 return;
4530 }
4531
4532 int nFileSizePartLength = 125;
4533 const int nLocationPartLength = 150;
4534 const int nRightPartsLength = nFileSizePartLength + nLocationPartLength;
4535 int nObjectsPartLength = nWidth - nRightPartsLength;
4536
4537 // If the window is small enough just divide each part into thirds
4538 // to match the behavior of Windows Server 2003
4539 if (nObjectsPartLength <= nLocationPartLength)
4540 nObjectsPartLength = nFileSizePartLength = nWidth / 3;
4541
4542 int nPartArray[] = {nObjectsPartLength, nObjectsPartLength + nFileSizePartLength, -1};
4543
4544 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETPARTS, _countof(nPartArray), (LPARAM)nPartArray, &lResult);
4545}
#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 4768 of file CDefView.cpp.

4769{
4771 HRESULT hr = S_OK;
4772
4773 hr = IUnknown_QueryService(m_pShellBrowser, IID_IExplorerToolbar, IID_PPV_ARG(IExplorerToolbar, &ptb));
4774 if (FAILED(hr))
4775 return hr;
4776
4777 m_Category = CGID_DefViewFrame;
4778
4779 hr = ptb->SetCommandTarget(static_cast<IOleCommandTarget*>(this), &m_Category, 0);
4780 if (FAILED(hr))
4781 return hr;
4782
4783 if (hr == S_FALSE)
4784 return S_OK;
4785
4786#if 0
4787 hr = ptb->AddButtons(&m_Category, buttonsCount, buttons);
4788 if (FAILED(hr))
4789 return hr;
4790#endif
4791
4792 return S_OK;
4793}
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 4575 of file CDefView.cpp.

4576{
4577 // get insertable index from position
4579
4580 // create identity mapping of indexes
4582 INT nCount = m_ListView.GetItemCount();
4583 for (INT i = 0; i < nCount; ++i)
4584 {
4585 array.Add(i);
4586 }
4587
4588 // re-ordering mapping
4589 INT iItem = -1;
4590 while ((iItem = m_ListView.GetNextItem(iItem, LVNI_SELECTED)) >= 0)
4591 {
4592 INT iFrom = iItem, iTo = iPosition;
4593 if (iFrom < iTo)
4594 --iTo;
4595 if (iFrom >= nCount)
4596 iFrom = nCount - 1;
4597 if (iTo >= nCount)
4598 iTo = nCount - 1;
4599
4600 // shift indexes by swapping (like a bucket relay)
4601 if (iFrom < iTo)
4602 {
4603 for (INT i = iFrom; i < iTo; ++i)
4604 {
4605 // swap array[i] and array[i + 1]
4606 INT tmp = array[i];
4607 array[i] = array[i + 1];
4608 array[i + 1] = tmp;
4609 }
4610 }
4611 else
4612 {
4613 for (INT i = iFrom; i > iTo; --i)
4614 {
4615 // swap array[i] and array[i - 1]
4616 INT tmp = array[i];
4617 array[i] = array[i - 1];
4618 array[i - 1] = tmp;
4619 }
4620 }
4621 }
4622
4623 // create mapping (ListView's lParam to index) from array
4625 for (INT i = 0; i < nCount; ++i)
4626 {
4628 map.Add(lParam, i);
4629 }
4630
4631 // finally sort
4633}
static INT CALLBACK SelectionMoveCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
Definition: CDefView.cpp:4564
INT _FindInsertableIndexFromPoint(POINT pt)
Definition: CDefView.cpp:4451
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 1337 of file CDefView.cpp.

1338{
1339 if (!m_ListView)
1340 return nullptr;
1341 return reinterpret_cast<PCUITEMID_CHILD>(m_ListView.GetItemData(i));
1342}
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70

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

◆ _PidlByItem() [2/2]

PCUITEMID_CHILD CDefView::_PidlByItem ( LVITEM lvItem)

Definition at line 1344 of file CDefView.cpp.

1345{
1346 if (!m_ListView)
1347 return nullptr;
1348 return reinterpret_cast<PCUITEMID_CHILD>(lvItem.lParam);
1349}

◆ _Sort()

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

Definition at line 1273 of file CDefView.cpp.

1274{
1275 HWND hHeader;
1276 HDITEM hColumn;
1277 int prevCol = m_sortInfo.ListColumn;
1279
1280 // FIXME: Is this correct? Who sets this style?
1281 // And if it is set, should it also block sorting using the menu?
1282 // Any why should it block sorting when the view is loaded initially?
1283 if (m_ListView.GetWindowLongPtr(GWL_STYLE) & LVS_NOSORTHEADER)
1284 return TRUE;
1285
1286 hHeader = ListView_GetHeader(m_ListView.m_hWnd);
1287 if (Col != -1)
1288 {
1289 if (Col >= Header_GetItemCount(hHeader))
1290 {
1291 ERR("Sort column out of range\n");
1292 return FALSE;
1293 }
1294
1295 if (prevCol == Col)
1296 m_sortInfo.Direction *= -1;
1297 else
1299 m_sortInfo.ListColumn = Col;
1300 }
1301 if (!m_sortInfo.Direction)
1302 m_sortInfo.Direction += 1;
1303
1304 /* If the sorting column changed, remove the sorting style from the old column */
1305 if (prevCol != -1 && prevCol != m_sortInfo.ListColumn)
1306 {
1307 hColumn.mask = HDI_FORMAT;
1308 Header_GetItem(hHeader, prevCol, &hColumn);
1309 hColumn.fmt &= ~(HDF_SORTUP | HDF_SORTDOWN);
1310 Header_SetItem(hHeader, prevCol, &hColumn);
1311 }
1312
1313 /* Set the sorting style on the new column */
1314 hColumn.mask = HDI_FORMAT;
1315 Header_GetItem(hHeader, m_sortInfo.ListColumn, &hColumn);
1316 hColumn.fmt &= ~(HDF_SORTDOWN | HDF_SORTUP);
1317 hColumn.fmt |= (m_sortInfo.Direction > 0 ? HDF_SORTUP : HDF_SORTDOWN);
1318 Header_SetItem(hHeader, m_sortInfo.ListColumn, &hColumn);
1319
1320 /* Sort the list, using the current values of ListColumn and bIsAscending */
1323}
#define ERR(fmt,...)
Definition: precomp.h:57
static INT CALLBACK ListViewCompareItems(LPARAM lParam1, LPARAM lParam2, LPARAM lpData)
Definition: CDefView.cpp:1259
#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:863

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

◆ AddObject()

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

Definition at line 3973 of file CDefView.cpp.

3974{
3975 TRACE("(%p)->(%p %p)\n", this, pidl, item);
3976 if (!m_ListView)
3977 {
3978 ERR("!m_ListView\n");
3979 return E_FAIL;
3980 }
3981 *item = LV_AddItem(pidl);
3982 return (int)*item >= 0 ? S_OK : E_OUTOFMEMORY;
3983}
int LV_AddItem(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1381
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_FAIL
Definition: ddrawi.h:102

◆ AddPropertySheetPages()

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

Implements IShellView.

Definition at line 3284 of file CDefView.cpp.

3285{
3286 TRACE("(%p)->(0x%lX, %p, %p)\n", this, dwReserved, lpfn, lparam);
3287
3290 return S_OK;
3291}
@ 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:1340

◆ ArrangeGrid()

HRESULT STDMETHODCALLTYPE CDefView::ArrangeGrid ( )
override

Definition at line 3960 of file CDefView.cpp.

3961{
3963 return S_OK;
3964}
DWORD SetExtendedListViewStyle(DWORD dw, DWORD dwMask=0)
Definition: rosctrls.h:47

Referenced by OnCommand().

◆ AutoArrange()

HRESULT STDMETHODCALLTYPE CDefView::AutoArrange ( )
override

Definition at line 3966 of file CDefView.cpp.

3967{
3968 m_ListView.ModifyStyle(0, LVS_AUTOARRANGE);
3970 return S_OK;
3971}
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 714 of file CDefView.cpp.

715{
717
718 TRACE("\n");
719
720 if (m_pCommDlgBrowser != NULL)
721 {
722 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_CHECKBUTTON,
724 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_CHECKBUTTON,
726 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON,
728 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON,
730 }
731}
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:893
#define FCIDM_TB_REPORTVIEW
Definition: shresdef.h:894

Referenced by CreateViewWindow3(), and SetCurrentViewMode().

◆ CheckViewMode()

HRESULT CDefView::CheckViewMode ( HMENU  hmenuView)

Definition at line 1984 of file CDefView.cpp.

1985{
1987 {
1988 UINT iItemFirst = FCIDM_SHVIEW_BIGICON;
1989 UINT iItemLast = iItemFirst + FVM_LAST - FVM_FIRST;
1990 UINT iItem = iItemFirst + m_FolderSettings.ViewMode - FVM_FIRST;
1991 CheckMenuRadioItem(hmenuView, iItemFirst, iItemLast, iItem, MF_BYCOMMAND);
1992 }
1993
1994 return S_OK;
1995}
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:873
#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 1193 of file CDefView.cpp.

1194{
1196 m_ListToFolderColMap = NULL; // No cache while we are building the cache
1198 for (UINT i = 0;; ++i)
1199 {
1201 if (FAILED(hr))
1202 break; // No more columns
1203 if (!DPA_SetPtr(cache, i, (void*)(INT_PTR) hr))
1204 break; // Cannot allow holes in the cache, must stop now.
1205 }
1207
1208 for (;;)
1209 {
1211 break;
1212 }
1214 if (hMenu)
1215 {
1216 hMenu = GetSubmenuByID(hMenu, FCIDM_SHVIEW_ARRANGE);
1217 for (UINT i = DVIDM_ARRANGESORT_FIRST; i <= DVIDM_ARRANGESORT_LAST && hMenu; ++i)
1218 {
1219 RemoveMenu(hMenu, i, MF_BYCOMMAND);
1220 }
1221 if ((int) GetMenuItemID(hMenu, 0) <= 0)
1222 RemoveMenu(hMenu, 0, MF_BYPOSITION); // Separator
1223 }
1225 LVCOLUMN lvc;
1226 lvc.mask = LVCF_TEXT;
1227 lvc.pszText = buf;
1228 lvc.cchTextMax = _countof(buf);
1229 for (UINT listCol = 0; listCol < DEFVIEW_ARRANGESORT_MAXENUM; ++listCol)
1230 {
1231 if (!ListView_GetColumn(m_ListView.m_hWnd, listCol, &lvc))
1232 break;
1233 HRESULT foldCol = MapListColumnToFolderColumn(listCol);
1234 assert(SUCCEEDED(foldCol));
1237 DVIDM_ARRANGESORT_FIRST + listCol, lvc.pszText, listCol);
1238 }
1239
1240 ListView_RedrawItems(m_ListView.m_hWnd, 0, 0x7fffffff);
1241 m_ListView.InvalidateRect(NULL, TRUE);
1242}
static BOOL AppendMenuItem(HMENU hMenu, UINT MF, UINT Id, LPCWSTR String, SIZE_T Data=0)
Definition: CDefView.cpp:157
@ DVIDM_ARRANGESORT_FIRST
Definition: CDefView.cpp:50
@ DEFVIEW_ARRANGESORT_MAXENUM
Definition: CDefView.cpp:47
@ DVIDM_ARRANGESORT_LAST
Definition: CDefView.cpp:49
static HMENU GetSubmenuByID(HMENU hmenu, UINT id)
Definition: CDefView.cpp:181
HRESULT MapListColumnToFolderColumn(UINT ListCol)
Definition: CDefView.cpp:1039
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 DBG_UNREFERENCED_LOCAL_VARIABLE(L)
Definition: ntbasedef.h:331
#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:637
#define FCIDM_SHVIEW_ARRANGE
Definition: shresdef.h:857
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 3153 of file CDefView.cpp.

3154{
3155 FIXME("(%p) stub\n", this);
3156
3157 return E_NOTIMPL;
3158}
#define FIXME(fmt,...)
Definition: precomp.h:53

◆ CreateList()

BOOL CDefView::CreateList ( )

Definition at line 842 of file CDefView.cpp.

843{
844 HRESULT hr;
845 DWORD dwStyle, dwExStyle, ListExStyle;
846 UINT ViewMode;
847
848 TRACE("%p\n", this);
849
851 LVS_SHAREIMAGELISTS | LVS_EDITLABELS | LVS_AUTOARRANGE; // FIXME: Remove LVS_AUTOARRANGE when the view is able to save ItemPos
853 ListExStyle = LVS_EX_INFOTIP | LVS_EX_LABELTIP;
854
856 {
858 dwStyle |= LVS_ALIGNLEFT;
859 // LVS_EX_REGIONAL?
860 }
861 else
862 {
863 dwStyle |= LVS_SHOWSELALWAYS; // MSDN says FWF_SHOWSELALWAYS is deprecated, always turn on for folders
865#if 0 // FIXME: Temporarily disabled until ListView is fixed (CORE-19624, CORE-19818)
866 ListExStyle |= LVS_EX_DOUBLEBUFFER;
867#endif
868 }
869
870 ViewMode = m_FolderSettings.ViewMode;
871 hr = _DoFolderViewCB(SFVM_DEFVIEWMODE, 0, (LPARAM)&ViewMode);
872 if (SUCCEEDED(hr))
873 {
874 if (ViewMode >= FVM_FIRST && ViewMode <= FVM_LAST)
875 m_FolderSettings.ViewMode = ViewMode;
876 else
877 ERR("Ignoring invalid ViewMode from SFVM_DEFVIEWMODE: %u (was: %u)\n", ViewMode, m_FolderSettings.ViewMode);
878 }
879
881 {
882 case FVM_ICON:
883 dwStyle |= LVS_ICON;
884 break;
885 case FVM_DETAILS:
886 dwStyle |= LVS_REPORT;
887 break;
888 case FVM_SMALLICON:
889 dwStyle |= LVS_SMALLICON;
890 break;
891 case FVM_LIST:
892 dwStyle |= LVS_LIST;
893 break;
894 default:
895 dwStyle |= LVS_LIST;
896 break;
897 }
898
900 dwStyle |= LVS_AUTOARRANGE;
901
903 ListExStyle |= LVS_EX_SNAPTOGRID;
904
906 dwStyle |= LVS_SINGLESEL;
907
909 ListExStyle |= LVS_EX_FULLROWSELECT;
910
911 ListExStyle |= GetItemActivateFlags();
912 if (ListExStyle & LVS_EX_ONECLICKACTIVATE)
913 ListExStyle |= SHELL_GetIconUnderlineFlags();
914
916 dwStyle |= LVS_NOCOLUMNHEADER;
917
918#if 0
919 // FIXME: Because this is a negative, everyone gets the new flag by default unless they
920 // opt out. This code should be enabled when shell looks like Vista instead of 2003
922 ListExStyle |= LVS_EX_HEADERINALLVIEWS;
923#endif
924
926 dwExStyle &= ~WS_EX_CLIENTEDGE;
927
928 RECT rcListView = {0,0,0,0};
929 m_ListView.Create(m_hWnd, rcListView, L"FolderView", dwStyle, dwExStyle, ID_LISTVIEW);
930
931 if (!m_ListView)
932 return FALSE;
933
935
936 /* UpdateShellSettings(); */
937 return TRUE;
938}
#define ID_LISTVIEW
Definition: CDefView.cpp:585
UINT GetItemActivateFlags()
Definition: CDefView.cpp:3482
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: resources.c:13
UINT SHELL_GetIconUnderlineFlags()
Definition: general.cpp:134
#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_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 SFVM_DEFVIEWMODE
Definition: shlobj.h:1323
@ 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_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 3218 of file CDefView.cpp.

3219{
3220 return CreateViewWindow3(psb, lpPrevView, SV3CVW3_DEFAULT,
3221 (FOLDERFLAGS)lpfs->fFlags, (FOLDERFLAGS)lpfs->fFlags, (FOLDERVIEWMODE)lpfs->ViewMode, NULL, prcView, phWnd);
3222}
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:3820
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 3813 of file CDefView.cpp.

3814{
3815 return CreateViewWindow3(view_params->psbOwner, view_params->psvPrev,
3816 SV3CVW3_DEFAULT, (FOLDERFLAGS)view_params->pfs->fFlags, (FOLDERFLAGS)view_params->pfs->fFlags,
3817 (FOLDERVIEWMODE)view_params->pfs->ViewMode, view_params->pvid, view_params->prcView, &view_params->hwndView);
3818}

◆ 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 3820 of file CDefView.cpp.

3821{
3822 OLEMENUGROUPWIDTHS omw = { { 0, 0, 0, 0, 0, 0 } };
3823 const UINT SUPPORTED_SV3CVW3 = SV3CVW3_FORCEVIEWMODE | SV3CVW3_FORCEFOLDERFLAGS;
3824 const UINT IGNORE_FWF = FWF_OWNERDATA; // FIXME: Support this
3825
3826 *hwnd = NULL;
3827
3828 TRACE("(%p)->(shlview=%p shlbrs=%p rec=%p hwnd=%p vmode=%x flags=%x)\n", this, psvPrevious, psb, prcView, hwnd, mode, flags);
3829 if (prcView != NULL)
3830 TRACE("-- left=%i top=%i right=%i bottom=%i\n", prcView->left, prcView->top, prcView->right, prcView->bottom);
3831
3832 /* Validate the Shell Browser */
3833 if (psb == NULL || m_hWnd)
3834 return E_UNEXPECTED;
3835
3836 if (view_flags & ~SUPPORTED_SV3CVW3)
3837 FIXME("unsupported view flags 0x%08x\n", view_flags & ~SUPPORTED_SV3CVW3);
3838
3839 if (mode == FVM_AUTO)
3841
3842 /* Set up the member variables */
3843 m_pShellBrowser = psb;
3845 m_FolderSettings.fFlags = (mask & flags) & ~IGNORE_FWF;
3846
3847 if (view_id)
3848 {
3849 if (IsEqualIID(*view_id, VID_LargeIcons))
3851 else if (IsEqualIID(*view_id, VID_SmallIcons))
3853 else if (IsEqualIID(*view_id, VID_List))
3855 else if (IsEqualIID(*view_id, VID_Details))
3857 else if (IsEqualIID(*view_id, VID_Thumbnails))
3859 else if (IsEqualIID(*view_id, VID_Tile))
3861 else if (IsEqualIID(*view_id, VID_ThumbStrip))
3863 else
3864 FIXME("Ignoring unrecognized VID %s\n", debugstr_guid(view_id));
3865 }
3866 const UINT requestedViewMode = m_FolderSettings.ViewMode;
3867
3868 /* Get our parent window */
3869 m_pShellBrowser->GetWindow(&m_hWndParent);
3871
3872 /* Try to get the ICommDlgBrowserInterface, adds a reference !!! */
3875 {
3876 TRACE("-- CommDlgBrowser\n");
3877 }
3878
3879 LoadViewState();
3880 if (view_flags & SV3CVW3_FORCEVIEWMODE)
3881 m_FolderSettings.ViewMode = requestedViewMode;
3882 if (view_flags & SV3CVW3_FORCEFOLDERFLAGS)
3883 m_FolderSettings.fFlags = (mask & flags) & ~IGNORE_FWF;
3884
3885 RECT rcView = *prcView;
3887 if (m_hWnd == NULL)
3888 return E_FAIL;
3889
3890 *hwnd = m_hWnd;
3891
3892 CheckToolbar();
3893
3894 if (!*hwnd)
3895 return E_FAIL;
3896
3898
3900 UpdateWindow();
3901
3902 if (!m_hMenu)
3903 {
3904 m_hMenu = CreateMenu();
3905 m_pShellBrowser->InsertMenusSB(m_hMenu, &omw);
3906 TRACE("-- after fnInsertMenusSB\n");
3907 }
3908
3909 _MergeToolbar();
3910
3911 return S_OK;
3912}
#define U(x)
Definition: wordpad.c:45
@ Create
Definition: registry.c:563
BOOL UpdateWindow()
Definition: atlwin.h:1345
HRESULT _MergeToolbar()
Definition: CDefView.cpp:4768
void CheckToolbar()
Definition: CDefView.cpp:714
FOLDERVIEWMODE GetDefaultViewMode()
Definition: CDefView.cpp:3596
HRESULT LoadViewState()
Definition: CDefView.cpp:3332
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:1313
#define SFVM_HWNDMAIN
Definition: shlobj.h:1339
@ 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:1255
#define SWP_NOSIZE
Definition: winuser.h:1256
#define HWND_TOP
Definition: winuser.h:1218
#define SWP_SHOWWINDOW
Definition: winuser.h:1259

Referenced by CreateViewWindow(), and CreateViewWindow2().

◆ DestroyViewWindow()

HRESULT WINAPI CDefView::DestroyViewWindow ( )
override

Implements IShellView.

Definition at line 3224 of file CDefView.cpp.

3225{
3226 TRACE("(%p)\n", this);
3227
3228 /* Make absolutely sure all our UI is cleaned up */
3230
3231 if (m_hAccel)
3232 {
3233 // MSDN: Accelerator tables loaded from resources are freed automatically when application terminates
3234 m_hAccel = NULL;
3235 }
3236
3238 {
3241 }
3242
3243 if (m_hMenuViewModes)
3244 {
3247 }
3248
3249 if (m_hMenu)
3250 {
3252 m_hMenu = NULL;
3253 }
3254
3255 if (m_ListView)
3256 {
3257 m_ListView.DestroyWindow();
3258 }
3259
3260 if (m_hWnd)
3261 {
3263 DestroyWindow();
3264 }
3265
3268
3269 return S_OK;
3270}
#define SFVM_WINDOWCLOSING
void Release()
Definition: atlcomcli.h:170
BOOL DestroyWindow()
Definition: atlwin.h:462
STDMETHOD() UIActivate(UINT uState) override
Definition: CDefView.cpp:3183
@ SVUIA_DEACTIVATE
Definition: shobjidl.idl:753
BOOL WINAPI DestroyMenu(_In_ HMENU)

Referenced by ~CDefView().

◆ DoActivate()

void CDefView::DoActivate ( UINT  uState)

Definition at line 2452 of file CDefView.cpp.

2453{
2454 TRACE("%p uState=%x\n", this, uState);
2455
2456 // don't do anything if the state isn't really changing
2457 if (m_uState == uState)
2458 {
2459 return;
2460 }
2461
2462 if (uState == SVUIA_DEACTIVATE)
2463 {
2464 OnDeactivate();
2465 }
2466 else
2467 {
2469 {
2470 FillEditMenu();
2471 FillViewMenu();
2472 m_pShellBrowser->SetMenuSB(m_hMenu, 0, m_hWnd);
2474 }
2475
2476 if (SVUIA_ACTIVATE_FOCUS == uState)
2477 {
2478 m_ListView.SetFocus();
2479 }
2480 }
2481
2482 m_uState = uState;
2483 TRACE("--\n");
2484}
HRESULT FillEditMenu()
Definition: CDefView.cpp:1895
void OnDeactivate()
Definition: CDefView.cpp:2441
HRESULT FillViewMenu()
Definition: CDefView.cpp:1912
@ SVUIA_ACTIVATE_FOCUS
Definition: shobjidl.idl:755

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

◆ DoColumnContextMenu()

LRESULT CDefView::DoColumnContextMenu ( LRESULT  lParam)

Definition at line 1997 of file CDefView.cpp.

1998{
1999 const UINT maxItems = 15; // Feels about right
2000 const UINT idMore = 0x1337;
2001 UINT idFirst = idMore + 1, idLast = idFirst;
2002 UINT lastValidListCol = 0; // Keep track of where the new column should be inserted
2003 UINT showMore = GetKeyState(VK_SHIFT) < 0;
2005 HWND hWndHdr = ListView_GetHeader(m_ListView.m_hWnd);
2006
2007 if (lParam == ~0)
2008 {
2009 RECT r;
2010 ::GetWindowRect(hWndHdr, &r);
2011 pt.x = r.left + ((r.right - r.left) / 2);
2012 pt.y = r.top + ((r.bottom - r.top) / 2);
2013 }
2014
2015 HMENU hMenu = CreatePopupMenu();
2016 if (!hMenu)
2017 return 0;
2018
2019 for (UINT foldCol = 0;; ++foldCol)
2020 {
2023 sd.str.uType = !STRRET_WSTR;
2024 if (FAILED(GetDetailsByFolderColumn(NULL, foldCol, sd)))
2025 break;
2026 if (FAILED(StrRetToStrNW(buf, _countof(buf), &sd.str, NULL)))
2027 break;
2028
2029 SHCOLSTATEF state = 0;
2030 if (!m_pSF2Parent || FAILED(m_pSF2Parent->GetDefaultColumnState(foldCol, &state)))
2031 state = 0;
2032 showMore |= (state & (SHCOLSTATE_SECONDARYUI));
2033
2034 UINT mf = MF_STRING;
2035 HRESULT listCol = MapFolderColumnToListColumn(foldCol);
2036
2037 if (foldCol == 0)
2038 mf |= MF_CHECKED | MF_GRAYED | MF_DISABLED; // Force column 0
2040 continue;
2041 else if (SUCCEEDED(listCol))
2042 mf |= MF_CHECKED;
2043
2044 if (AppendMenuItem(hMenu, mf, idLast, buf, lastValidListCol + 1))
2045 {
2046 idLast++;
2047 if (SUCCEEDED(listCol))
2048 lastValidListCol = listCol;
2049 }
2050
2051 if (idLast - idFirst == maxItems)
2052 {
2053 showMore++;
2054 break;
2055 }
2056 }
2057
2058 if (showMore)
2059 {
2060#if 0 // TODO
2061 InsertMenuW(hMenu, -1, MF_SEPARATOR, 0, NULL);
2062 InsertMenuW(hMenu, -1, MF_STRING, idMore, L"More...");
2063#endif
2064 }
2065
2066 // A cludge to force the cursor to update so we are not stuck with "size left/right" if
2067 // the right-click was on a column divider.
2069
2070 // Note: Uses the header as the owner so CDefView::OnInitMenuPopup does not mess us up.
2072 pt.x, pt.y, 0, hWndHdr, NULL);
2073 if (idCmd == idMore)
2074 {
2075 FIXME("Open More dialog\n");
2076 }
2077 else if (idCmd)
2078 {
2079 UINT foldCol = idCmd - idFirst;
2080 HRESULT listCol = MapFolderColumnToListColumn(foldCol);
2081 if (SUCCEEDED(listCol))
2082 {
2083 ListView_DeleteColumn(m_ListView.m_hWnd, listCol);
2084 }
2085 else
2086 {
2087 listCol = (UINT) GetMenuItemDataById(hMenu, idCmd);
2088 LoadColumn(foldCol, listCol, TRUE);
2089 }
2091 }
2092 DestroyMenu(hMenu);
2093 return 0;
2094}
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:1091
CComPtr< IShellFolder2 > m_pSF2Parent
Definition: CDefView.cpp:234
HRESULT MapFolderColumnToListColumn(UINT FoldCol)
Definition: CDefView.cpp:1026
void ColumnListChanged()
Definition: CDefView.cpp:1193
HRESULT GetDetailsByFolderColumn(PCUITEMID_CHILD pidl, UINT FoldCol, SHELLDETAILS &sd)
Definition: CDefView.cpp:1060
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:2399
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:2494
#define TPM_LEFTBUTTON
Definition: winuser.h:2398
#define PostMessage
Definition: winuser.h:5917
#define WM_SETCURSOR
Definition: winuser.h:1655
#define VK_SHIFT
Definition: winuser.h:2221
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
#define TPM_RETURNCMD
Definition: winuser.h:2406
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 4289 of file CDefView.cpp.

4290{
4291 LONG lResult;
4292 HRESULT hr;
4293 RECT clientRect;
4294
4295 /* The key state on drop doesn't have MK_LBUTTON or MK_RBUTTON because it
4296 reflects the key state after the user released the button, so we need
4297 to remember the last key state when the button was pressed */
4298 m_grfKeyState = grfKeyState;
4299
4300 // Map from global to client coordinates and query the index of the
4301 // listview-item, which is currently under the mouse cursor.
4302 LVHITTESTINFO htinfo = {{pt.x, pt.y}, LVHT_ONITEM};
4303 ScreenToClient(&htinfo.pt);
4304 lResult = m_ListView.HitTest(&htinfo);
4305
4306 /* Send WM_*SCROLL messages every 250 ms during drag-scrolling */
4307 ::GetClientRect(m_ListView, &clientRect);
4308 if (htinfo.pt.x == m_ptLastMousePos.x && htinfo.pt.y == m_ptLastMousePos.y &&
4309 (htinfo.pt.x < SCROLLAREAWIDTH || htinfo.pt.x > clientRect.right - SCROLLAREAWIDTH ||
4310 htinfo.pt.y < SCROLLAREAWIDTH || htinfo.pt.y > clientRect.bottom - SCROLLAREAWIDTH))
4311 {
4312 m_cScrollDelay = (m_cScrollDelay + 1) % 5; // DragOver is called every 50 ms
4313 if (m_cScrollDelay == 0)
4314 {
4315 /* Mouse did hover another 250 ms over the scroll-area */
4316 if (htinfo.pt.x < SCROLLAREAWIDTH)
4317 m_ListView.SendMessageW(WM_HSCROLL, SB_LINEUP, 0);
4318
4319 if (htinfo.pt.x > clientRect.right - SCROLLAREAWIDTH)
4320 m_ListView.SendMessageW(WM_HSCROLL, SB_LINEDOWN, 0);
4321
4322 if (htinfo.pt.y < SCROLLAREAWIDTH)
4323 m_ListView.SendMessageW(WM_VSCROLL, SB_LINEUP, 0);
4324
4325 if (htinfo.pt.y > clientRect.bottom - SCROLLAREAWIDTH)
4326 m_ListView.SendMessageW(WM_VSCROLL, SB_LINEDOWN, 0);
4327 }
4328 }
4329 else
4330 {
4331 m_cScrollDelay = 0; // Reset, if cursor is not over the listview's scroll-area
4332 }
4333
4334 m_ptLastMousePos = htinfo.pt;
4336
4337 /* We need to check if we drag the selection over itself */
4338 if (lResult != -1 && m_pSourceDataObject.p != NULL)
4339 {
4340 PCUITEMID_CHILD pidl = _PidlByItem(lResult);
4341
4342 for (UINT i = 0; i < m_cidl; i++)
4343 {
4344 if (pidl == m_apidl[i])
4345 {
4346 /* The item that is being draged is hovering itself. */
4347 lResult = -1;
4348 break;
4349 }
4350 }
4351 }
4352
4353 // If we are still over the previous sub-item, notify it via DragOver and return
4354 if (m_pCurDropTarget && lResult == m_iDragOverItem)
4355 return m_pCurDropTarget->DragOver(grfKeyState, pt, pdwEffect);
4356
4357 // We've left the previous sub-item, notify it via DragLeave and release it
4358 if (m_pCurDropTarget)
4359 {
4361 if (pidl)
4362 SelectItem(pidl, 0);
4363
4364 m_pCurDropTarget->DragLeave();
4366 }
4367
4368 m_iDragOverItem = lResult;
4369
4370 if (lResult == -1)
4371 {
4372 // We are not above one of the listview's subitems. Bind to the
4373 // parent folder's DropTarget interface.
4375 }
4376 else
4377 {
4378 // Query the relative PIDL of the shellfolder object represented
4379 // by the currently dragged over listview-item ...
4380 PCUITEMID_CHILD pidl = _PidlByItem(lResult);
4381
4382 // ... and bind m_pCurDropTarget to the IDropTarget interface of an UIObject of this object
4383 hr = m_pSFParent->GetUIObjectOf(m_ListView, 1, &pidl, IID_NULL_PPV_ARG(IDropTarget, &m_pCurDropTarget));
4384 }
4385
4387
4388 // If anything failed, m_pCurDropTarget should be NULL now, which ought to be a save state
4389 if (FAILED(hr))
4390 {
4391 *pdwEffect = DROPEFFECT_NONE;
4392 return hr;
4393 }
4394
4395 if (m_iDragOverItem != -1)
4396 {
4397 SelectItem(m_iDragOverItem, SVSI_SELECT);
4398 }
4399
4400 // Notify the item just entered via DragEnter
4401 return m_pCurDropTarget->DragEnter(m_pCurDataObject, grfKeyState, pt, pdwEffect);
4402}
#define SCROLLAREAWIDTH
Definition: CDefView.cpp:4287
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:3490
CComPtr< IDataObject > m_pSourceDataObject
Definition: CDefView.cpp:263
CComPtr< IDropTarget > m_pCurDropTarget
Definition: CDefView.cpp:264
PCUITEMID_CHILD _PidlByItem(int i)
Definition: CDefView.cpp:1337
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:1762
#define WM_VSCROLL
Definition: winuser.h:1763
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 4404 of file CDefView.cpp.

4405{
4406 if (*pdwEffect == DROPEFFECT_NONE)
4407 return S_OK;
4408
4409 /* Get a hold on the data object for later calls to DragEnter on the sub-folders */
4410 m_pCurDataObject = pDataObject;
4411
4412 HRESULT hr = drag_notify_subitem(grfKeyState, pt, pdwEffect);
4413 if (SUCCEEDED(hr))
4414 {
4415 POINT ptClient = {pt.x, pt.y};
4416 ScreenToClient(&ptClient);
4417 ImageList_DragEnter(m_hWnd, ptClient.x, ptClient.y);
4418 }
4419
4420 return hr;
4421}
HRESULT drag_notify_subitem(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
Definition: CDefView.cpp:4289
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 4431 of file CDefView.cpp.

4432{
4434
4435 if (m_pCurDropTarget)
4436 {
4437 m_pCurDropTarget->DragLeave();
4439 }
4440
4441 if (m_pCurDataObject != NULL)
4442 {
4444 }
4445
4446 m_iDragOverItem = 0;
4447
4448 return S_OK;
4449}
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 4423 of file CDefView.cpp.

4424{
4425 POINT ptClient = {pt.x, pt.y};
4426 ScreenToClient(&ptClient);
4427 ImageList_DragMove(ptClient.x, ptClient.y);
4428 return drag_notify_subitem(grfKeyState, pt, pdwEffect);
4429}
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 4706 of file CDefView.cpp.

4707{
4708 FIXME("Stub: this=%p\n", this);
4709 return E_NOTIMPL;
4710}

◆ Drop()

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

Implements IDropTarget.

Definition at line 4635 of file CDefView.cpp.

4636{
4639
4640 if ((IsDropOnSource(NULL) == S_OK) &&
4641 (*pdwEffect & DROPEFFECT_MOVE) &&
4643 {
4644 if (m_pCurDropTarget)
4645 {
4646 m_pCurDropTarget->DragLeave();
4648 }
4649
4650 POINT ptDrop = { pt.x, pt.y };
4651 ::ScreenToClient(m_ListView, &ptDrop);
4653 m_ptLastMousePos = ptDrop;
4654
4656 if (m_ListView.GetStyle() & LVS_AUTOARRANGE)
4657 {
4659 }
4660 else
4661 {
4662 POINT ptItem;
4663 INT iItem = -1;
4664 while ((iItem = m_ListView.GetNextItem(iItem, LVNI_SELECTED)) >= 0)
4665 {
4666 if (m_ListView.GetItemPosition(iItem, &ptItem))
4667 {
4670 m_ListView.SetItemPosition(iItem, &ptItem);
4671 }
4672 }
4673 }
4675 }
4676 else if (m_pCurDropTarget)
4677 {
4678 m_pCurDropTarget->Drop(pDataObject, grfKeyState, pt, pdwEffect);
4680 }
4681
4683 m_iDragOverItem = 0;
4684 return S_OK;
4685}
POINT m_ptFirstMousePos
Definition: CDefView.cpp:269
STDMETHOD() IsDropOnSource(IDropTarget *drop_target) override
Definition: CDefView.cpp:4075
void _MoveSelectionOnAutoArrange(POINT pt)
Definition: CDefView.cpp:4575
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:2386

◆ EnableModeless()

HRESULT WINAPI CDefView::EnableModeless ( BOOL  fEnable)
override

Implements IShellView.

Definition at line 3177 of file CDefView.cpp.

3178{
3179 FIXME("(%p)\n", this);
3180 return E_NOTIMPL;
3181}

◆ Exec()

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

Implements IOleCommandTarget.

Definition at line 4206 of file CDefView.cpp.

4207{
4208 FIXME("(%p)->(\n\tTarget GUID:%s Command:0x%08x Opt:0x%08x %p %p)\n",
4209 this, debugstr_guid(pguidCmdGroup), nCmdID, nCmdexecopt, pvaIn, pvaOut);
4210
4211 if (!pguidCmdGroup)
4212 return OLECMDERR_E_UNKNOWNGROUP;
4213
4214 if (IsEqualCLSID(*pguidCmdGroup, m_Category))
4215 {
4216 if (nCmdID == FCIDM_SHVIEW_AUTOARRANGE)
4217 {
4218 if (V_VT(pvaIn) != VT_INT_PTR)
4219 return OLECMDERR_E_NOTSUPPORTED;
4220
4222 params.cbSize = sizeof(params);
4223 params.rcExclude = *(RECT*) V_INTREF(pvaIn);
4224
4225 if (m_hMenuViewModes)
4226 {
4227 // Duplicate all but the last two items of the view modes menu
4228 HMENU hmenuViewPopup = CreatePopupMenu();
4229 Shell_MergeMenus(hmenuViewPopup, m_hMenuViewModes, 0, 0, 0xFFFF, 0);
4230 DeleteMenu(hmenuViewPopup, GetMenuItemCount(hmenuViewPopup) - 1, MF_BYPOSITION);
4231 DeleteMenu(hmenuViewPopup, GetMenuItemCount(hmenuViewPopup) - 1, MF_BYPOSITION);
4232 CheckViewMode(hmenuViewPopup);
4233 TrackPopupMenuEx(hmenuViewPopup, TPM_LEFTALIGN | TPM_TOPALIGN, params.rcExclude.left, params.rcExclude.bottom, m_hWndParent, &params);
4234 ::DestroyMenu(hmenuViewPopup);
4235 }
4236
4237 // pvaOut is VT_I4 with value 0x403 (cmd id of the new mode maybe?)
4238 V_VT(pvaOut) = VT_I4;
4239 V_I4(pvaOut) = 0x403;
4240 }
4241 }
4242
4243 if (IsEqualIID(*pguidCmdGroup, CGID_Explorer) &&
4244 (nCmdID == 0x29) &&
4245 (nCmdexecopt == 4) && pvaOut)
4246 return S_OK;
4247
4248 if (IsEqualIID(*pguidCmdGroup, CGID_ShellDocView) &&
4249 (nCmdID == 9) &&
4250 (nCmdexecopt == 0))
4251 return 1;
4252
4253 if (IsEqualIID(*pguidCmdGroup, CGID_DefView))
4254 {
4255 CComPtr<IStream> pStream;
4256 WCHAR SubKey[MAX_PATH];
4257 switch (nCmdID)
4258 {
4260 SHDeleteKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\ShellNoRoam\\Bags");
4262 SaveViewState(pStream);
4263 return S_OK;
4265 PathCombineW(SubKey, REGSTR_PATH_EXPLORER, L"Streams\\Default");
4267 SHDeleteKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\ShellNoRoam\\Bags");
4268 m_FolderSettings.fFlags |= FWF_NOBROWSERVIEWSTATE; // Don't let this folder save itself
4269 return S_OK;
4270 }
4271 }
4272
4273 return OLECMDERR_E_UNKNOWNGROUP;
4274}
STDMETHOD() SaveViewState() override
Definition: CDefView.cpp:3467
HRESULT CheckViewMode(HMENU hmenuView)
Definition: CDefView.cpp:1984
HRESULT GetDefaultViewStream(DWORD Stgm, IStream **ppStream)
Definition: CDefView.cpp:3307
@ 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 PathCombineW
Definition: pathcch.h:317
#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:115
#define DVCMDID_RESET_DEFAULTFOLDER_SETTINGS
Definition: shlobj_undoc.h:116
#define SHDeleteKey
Definition: shlwapi.h:53
@ FWF_NOBROWSERVIEWSTATE
Definition: shobjidl.idl:670
#define FCIDM_SHVIEW_AUTOARRANGE
Definition: shresdef.h:879
#define HKEY_CURRENT_USER
Definition: winreg.h:11
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
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:2402
#define TPM_LEFTALIGN
Definition: winuser.h:2396

◆ fill_list()

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

Definition at line 1520 of file CDefView.cpp.

1521{
1522 PITEMID_CHILD pidl = static_cast<PITEMID_CHILD>(ptr);
1523 CDefView *pThis = static_cast<CDefView *>(arg);
1524
1525 // in a commdlg this works as a filemask
1526 if (pThis->IncludeObject(pidl) == S_OK && pThis->m_ListView)
1527 pThis->LV_AddItem(pidl);
1528
1529 SHFree(pidl);
1530 return TRUE;
1531}
HRESULT IncludeObject(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:665
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 1928 of file CDefView.cpp.

1929{
1930 bool forceMerge = false;
1932
1933 // Make sure the column we currently sort by is in the menu
1936 {
1940 LVCOLUMN lvc;
1941 lvc.mask = LVCF_TEXT;
1942 lvc.pszText = buf;
1943 lvc.cchTextMax = _countof(buf);
1944 currentSortId = DVIDM_ARRANGESORT_LAST;
1945 forceMerge = true;
1947 AppendMenuItem(m_hMenuArrangeModes, MF_STRING, currentSortId, lvc.pszText, m_sortInfo.ListColumn);
1948 }
1949
1950 // Prepend the sort-by items unless they are aleady there
1951 if (GetMenuItemID(hmenuArrange, 0) == FCIDM_SHVIEW_AUTOARRANGE || forceMerge)
1952 {
1953 Shell_MergeMenus(hmenuArrange, m_hMenuArrangeModes, 0, 0, 0xFFFF, MM_ADDSEPARATOR);
1954 }
1955
1956 CheckMenuRadioItem(hmenuArrange,
1958 currentSortId, MF_BYCOMMAND);
1959
1961 {
1964 }
1965 else
1966 {
1969
1970 if (GetAutoArrange() == S_OK)
1972 else
1974
1975 if (_GetSnapToGrid() == S_OK)
1977 else
1979 }
1980
1981 return S_OK;
1982}
@ DEFVIEW_ARRANGESORT_MAX
Definition: CDefView.cpp:48
STDMETHOD() GetAutoArrange() override
Definition: CDefView.cpp:3749
HRESULT _GetSnapToGrid()
Definition: CDefView.cpp:3754
#define C_ASSERT(e)
Definition: intsafe.h:73
#define MM_ADDSEPARATOR
Definition: shlobj.h:2534
#define FCIDM_SHVIEW_ALIGNTOGRID
Definition: shresdef.h:881
#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 1895 of file CDefView.cpp.

1896{
1898 if (!hEditMenu)
1899 return E_FAIL;
1900
1901 HMENU hmenuContents = ::LoadMenuW(shell32_hInstance, L"MENU_003");
1902 if (!hmenuContents)
1903 return E_FAIL;
1904
1905 Shell_MergeMenus(hEditMenu, hmenuContents, 0, 0, 0xFFFF, 0);
1906
1907 ::DestroyMenu(hmenuContents);
1908
1909 return S_OK;
1910}
#define FCIDM_MENU_EDIT
Definition: shlobj.h:636
HMENU WINAPI LoadMenuW(_In_opt_ HINSTANCE, _In_ LPCWSTR)

Referenced by DoActivate().

◆ FillFileMenu()

HRESULT CDefView::FillFileMenu ( )

Definition at line 1849 of file CDefView.cpp.

1850{
1852 if (!hFileMenu)
1853 return E_FAIL;
1854
1855 /* Cleanup the items added previously */
1856 for (int i = GetMenuItemCount(hFileMenu) - 1; i >= 0; i--)
1857 {
1858 UINT id = GetMenuItemID(hFileMenu, i);
1859 if (id < FCIDM_BROWSERFIRST || id > FCIDM_BROWSERLAST)
1860 DeleteMenu(hFileMenu, i, MF_BYPOSITION);
1861 }
1862
1863 // In case we still have this left over, clean it up
1864 if (m_pFileMenu)
1865 {
1868 }
1869 UINT selcount = m_ListView.GetSelectedCount();
1870 // Store context menu in m_pFileMenu and keep it to invoke the selected command later on
1873 return hr;
1874
1876
1878 hr = m_pFileMenu->QueryContextMenu(hmenu, 0, DVIDM_CONTEXTMENU_FIRST, DVIDM_CONTEXTMENU_LAST, cmf);
1880 return hr;
1881
1882 // TODO: filter or something
1883 if (!selcount)
1884 {
1888 }
1889
1890 Shell_MergeMenus(hFileMenu, hmenu, 0, 0, 0xFFFF, MM_ADDSEPARATOR | MM_SUBMENUSHAVEIDS);
1892 return S_OK;
1893}
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:3546
CComPtr< IContextMenu > m_pFileMenu
Definition: CDefView.cpp:273
SFGAOF GetSelectionAttributes(SFGAOF Query)
Definition: CDefView.cpp:2137
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:628
#define MM_SUBMENUSHAVEIDS
Definition: shlobj.h:2535
#define FCIDM_MENU_FILE
Definition: shlobj.h:635
#define FCIDM_SHVIEW_REFRESH
Definition: shresdef.h:889
#define FCIDM_SHVIEW_VIEW
Definition: shresdef.h:858

Referenced by OnInitMenuPopup().

◆ FillList()

HRESULT CDefView::FillList ( BOOL  IsRefreshCommand = TRUE)

Definition at line 1537 of file CDefView.cpp.

1538{
1539 CComPtr<IEnumIDList> pEnumIDList;
1540 PITEMID_CHILD pidl;
1541 DWORD dwFetched;
1542 HRESULT hRes;
1543 HDPA hdpa;
1544 DWORD dFlags = SHCONTF_NONFOLDERS | ((m_FolderSettings.fFlags & FWF_NOSUBFOLDERS) ? 0 : SHCONTF_FOLDERS);
1545
1546 TRACE("%p\n", this);
1547
1548 SHELLSTATE shellstate;
1550 if (GetCommDlgViewFlags() & CDB2GVF_SHOWALLFILES)
1551 shellstate.fShowAllObjects = shellstate.fShowSuperHidden = TRUE;
1552
1553 if (shellstate.fShowAllObjects)
1554 {
1555 dFlags |= SHCONTF_INCLUDEHIDDEN;
1556 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, LVIS_CUT, 0);
1557 }
1558 if (shellstate.fShowSuperHidden)
1559 {
1560 dFlags |= SHCONTF_INCLUDESUPERHIDDEN;
1561 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, LVIS_CUT, 0);
1562 }
1563
1564 // get the itemlist from the shfolder
1565 hRes = m_pSFParent->EnumObjects(m_hWnd, dFlags, &pEnumIDList);
1566 if (hRes != S_OK)
1567 {
1568 if (hRes == S_FALSE)
1569 return(NOERROR);
1570 return(hRes);
1571 }
1572
1573 // create a pointer array
1574 hdpa = DPA_Create(16);
1575 if (!hdpa)
1576 return(E_OUTOFMEMORY);
1577
1578 // copy the items into the array
1579 while((S_OK == pEnumIDList->Next(1, &pidl, &dwFetched)) && dwFetched)
1580 {
1581 if (DPA_AppendPtr(hdpa, pidl) == -1)
1582 {
1583 SHFree(pidl);
1584 }
1585 }
1586
1587 // turn listview's redrawing off
1589
1590 DPA_DestroyCallback( hdpa, fill_list, this);
1591
1592 /* sort the array */
1593 int sortCol = -1;
1594 if (!IsRefreshCommand && !m_sortInfo.bLoadedFromViewState) // Are we loading for the first time?
1595 {
1597 sortCol = 0; // In case the folder does not know/care
1598 if (m_pSF2Parent)
1599 {
1600 ULONG folderSortCol = sortCol, dummy;
1601 HRESULT hr = m_pSF2Parent->GetDefaultColumn(NULL, &folderSortCol, &dummy);
1602 if (SUCCEEDED(hr))
1603 hr = MapFolderColumnToListColumn(folderSortCol);
1604 if (SUCCEEDED(hr))
1605 sortCol = (int) hr;
1606 }
1607 }
1608 _Sort(sortCol);
1609
1611 {
1614 }
1615
1616 // load custom background image and custom text color
1619
1620 // turn listview's redrawing back on and force it to draw
1622
1624
1626 {
1627 // redraw now
1628 m_ListView.InvalidateRect(NULL, TRUE);
1629 }
1630
1631 if (IsRefreshCommand)
1633
1635
1636 return S_OK;
1637}
#define SFVM_GET_CUSTOMVIEWINFO
#define SFVM_LISTREFRESHED
DWORD GetCommDlgViewFlags()
Definition: CDefView.cpp:363
static INT CALLBACK fill_list(LPVOID ptr, LPVOID arg)
Definition: CDefView.cpp:1520
void UpdateListColors()
Definition: CDefView.cpp:940
void UpdateStatusbarLocation()
Definition: CDefView.cpp:805
BOOL _Sort(int Col=-1)
Definition: CDefView.cpp:1273
void WINAPI DPA_DestroyCallback(HDPA hdpa, PFNDPAENUMCALLBACK enumProc, LPVOID lParam)
Definition: dpa.c:1003
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
#define LVM_SETCALLBACKMASK
Definition: commctrl.h:2424
#define DPA_AppendPtr(hdpa, pitem)
Definition: commctrl.h:4975
#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:1626
#define SSF_SHOWALLOBJECTS
Definition: shlobj.h:1610
@ FWF_NOSUBFOLDERS
Definition: shobjidl.idl:649
BOOL fShowSuperHidden
Definition: shlobj.h:1562
BOOL fShowAllObjects
Definition: shlobj.h:1546
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 1912 of file CDefView.cpp.

1913{
1915 if (!hViewMenu)
1916 return E_FAIL;
1917
1919 if (!m_hMenuViewModes)
1920 return E_FAIL;
1921
1924
1925 return S_OK;
1926}
DWORD WINAPI SHMenuIndexFromID(HMENU hMenu, UINT uID)
Definition: ordinal.c:4708
#define FCIDM_MENU_VIEW_SEP_OPTIONS
Definition: shlobj.h:638
#define MM_DONTREMOVESEPS
Definition: shlobj.h:2536

Referenced by DoActivate().

◆ Freeze()

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

Implements IViewObject.

Definition at line 4718 of file CDefView.cpp.

4719{
4720 FIXME("Stub: this=%p\n", this);
4721 return E_NOTIMPL;
4722}

◆ GetAdvise()

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

Implements IViewObject.

Definition at line 4742 of file CDefView.cpp.

4743{
4744 TRACE("this=%p pAspects=%p pAdvf=%p ppAdvSink=%p\n", this, pAspects, pAdvf, ppAdvSink);
4745
4746 if (ppAdvSink)
4747 {
4748 *ppAdvSink = m_pAdvSink;
4749 m_pAdvSink.p->AddRef();
4750 }
4751
4752 if (pAspects)
4753 *pAspects = m_dwAspects;
4754
4755 if (pAdvf)
4756 *pAdvf = m_dwAdvf;
4757
4758 return S_OK;
4759}
CComPtr< IAdviseSink > m_pAdvSink
Definition: CDefView.cpp:261
ULONG AddRef()

◆ GetArrangeParam()

HRESULT STDMETHODCALLTYPE CDefView::GetArrangeParam ( LPARAM sort)
override

Definition at line 3953 of file CDefView.cpp.

3954{
3955 int col = m_sortInfo.ListColumn;
3956 *sort = col != LISTVIEW_SORT_INFO::UNSPECIFIEDCOLUMN ? col : 0;
3958}
static struct @513 sort

◆ GetAutoArrange()

HRESULT STDMETHODCALLTYPE CDefView::GetAutoArrange ( )
override

Implements IFolderView.

Definition at line 3749 of file CDefView.cpp.

3750{
3751 return ((m_ListView.GetStyle() & LVS_AUTOARRANGE) ? S_OK : S_FALSE);
3752}

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 4712 of file CDefView.cpp.

4713{
4714 FIXME("Stub: this=%p\n", this);
4715 return E_NOTIMPL;
4716}

◆ GetCommDlgViewFlags()

DWORD CDefView::GetCommDlgViewFlags ( )
inline

Definition at line 363 of file CDefView.cpp.

364 {
367 {
368 DWORD flags;
369 if (SUCCEEDED(pcdb2->GetViewFlags(&flags)))
370 return flags;
371 }
372 return 0;
373 }

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

◆ GetCurrentInfo()

HRESULT WINAPI CDefView::GetCurrentInfo ( LPFOLDERSETTINGS  pfs)
override

Implements IShellView.

Definition at line 3272 of file CDefView.cpp.

3273{
3274 TRACE("(%p)->(%p) vmode=%x flags=%x\n", this, lpfs,
3276
3277 if (!lpfs)
3278 return E_INVALIDARG;
3279
3280 *lpfs = m_FolderSettings;
3281 return S_OK;
3282}
#define E_INVALIDARG
Definition: ddrawi.h:101

◆ GetCurrentViewMode()

HRESULT STDMETHODCALLTYPE CDefView::GetCurrentViewMode ( UINT pViewMode)
override

Implements IFolderView.

Definition at line 3605 of file CDefView.cpp.

3606{
3607 TRACE("(%p)->(%p), stub\n", this, pViewMode);
3608
3609 if (!pViewMode)
3610 return E_INVALIDARG;
3611
3612 *pViewMode = m_FolderSettings.ViewMode;
3613 return S_OK;
3614}

Referenced by SaveViewState().

◆ GetDefaultSpacing()

HRESULT STDMETHODCALLTYPE CDefView::GetDefaultSpacing ( POINT ppt)
override

Implements IFolderView.

Definition at line 3744 of file CDefView.cpp.

3745{
3746 return E_NOTIMPL;
3747}

◆ GetDefaultViewMode()

FOLDERVIEWMODE CDefView::GetDefaultViewMode ( )

Definition at line 3596 of file CDefView.cpp.

3597{
3601 mode = temp;
3602 return mode;
3603}
BOOL WINAPI IsOS(DWORD feature)
Definition: ordinal.c:4226
static calc_node_t temp
Definition: rpn_ieee.c:38
#define OS_SERVERADMINUI
Definition: shlwapi.h:2106

Referenced by CreateViewWindow3().

◆ GetDefaultViewStream()

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

Definition at line 3307 of file CDefView.cpp.

3308{
3309 CLSID clsid;
3311 if (SUCCEEDED(hr))
3312 {
3313 WCHAR path[MAX_PATH], name[39];
3314 wsprintfW(path, L"%s\\%s", REGSTR_PATH_EXPLORER, L"Streams\\Default");
3316 *ppStream = SHOpenRegStream2W(HKEY_CURRENT_USER, path, name, Stgm);
3317 hr = *ppStream ? S_OK : E_FAIL;
3318 }
3319 return hr;
3320}
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
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)

Referenced by Exec(), and LoadViewState().

◆ GetDetailsByFolderColumn()

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

Definition at line 1060 of file CDefView.cpp.

1061{
1062 // According to learn.microsoft.com/en-us/windows/win32/shell/sfvm-getdetailsof
1063 // the query order is IShellFolder2, IShellDetails, SFVM_GETDETAILSOF.
1064 HRESULT hr = E_FAIL;
1065 if (m_pSF2Parent)
1066 {
1067 hr = m_pSF2Parent->GetDetailsOf(pidl, FoldCol, &sd);
1068 }
1069 if (FAILED(hr) && m_pSDParent)
1070 {
1071 hr = m_pSDParent->GetDetailsOf(pidl, FoldCol, &sd);
1072 }
1073#if 0 // TODO
1074 if (FAILED(hr))
1075 {
1076 FIXME("Try SFVM_GETDETAILSOF\n");
1077 }
1078#endif
1079 return hr;
1080}
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 1082 of file CDefView.cpp.

1083{
1085 if (SUCCEEDED(hr))
1086 return GetDetailsByFolderColumn(pidl, hr, sd);
1087 ERR("Unable to determine folder column from list column %d\n", (int) ListCol);
1088 return hr;
1089}

Referenced by OnNotify().

◆ GetDragPoint()

HRESULT STDMETHODCALLTYPE CDefView::GetDragPoint ( POINT pt)
override

Definition at line 4086 of file CDefView.cpp.

4087{
4088 if (!pt)
4089 return E_INVALIDARG;
4090
4092 return S_OK;
4093}

◆ GetDropPoint()

HRESULT STDMETHODCALLTYPE CDefView::GetDropPoint ( POINT pt)
override

Definition at line 4095 of file CDefView.cpp.

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

◆ GetFocusedItem()

HRESULT STDMETHODCALLTYPE CDefView::GetFocusedItem ( int piItem)
override

Implements IFolderView.

Definition at line 3697 of file CDefView.cpp.

3698{
3699 TRACE("(%p)->(%p)\n", this, piItem);
3700
3701 *piItem = m_ListView.GetNextItem(-1, LVNI_FOCUSED);
3702
3703 return S_OK;
3704}
#define LVNI_FOCUSED
Definition: commctrl.h:2428

◆ GetFolder()

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

Implements IFolderView.

Definition at line 3650 of file CDefView.cpp.

3651{
3652 if (m_pSFParent == NULL)
3653 return E_FAIL;
3654
3655 return m_pSFParent->QueryInterface(riid, ppv);
3656}
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39

◆ GetItemActivateFlags()

UINT CDefView::GetItemActivateFlags ( )

Definition at line 3482 of file CDefView.cpp.

3483{
3484 SHELLSTATE ss;
3486 return ((m_FolderSettings.fFlags & FWF_SINGLECLICKACTIVATE) || (!ss.fDoubleClickInWebView && !ss.fWin95Classic))
3488}
#define ss
Definition: i386-dis.c:441
#define LVS_EX_TRACKSELECT
Definition: commctrl.h:2737
#define SSF_DOUBLECLICKINWEBVIEW
Definition: shlobj.h:1615
#define SSF_WIN95CLASSIC
Definition: shlobj.h:1618
@ FWF_SINGLECLICKACTIVATE
Definition: shobjidl.idl:657

Referenced by CreateList(), and OnSettingChange().

◆ GetItemAttributes() [1/2]

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

Definition at line 1331 of file CDefView.cpp.

1332{
1333 PCUITEMID_CHILD pItem = _PidlByItem(i);
1334 return pItem ? GetItemAttributes(pItem, Query) : 0;
1335}
BOOL Query(LPCTSTR *ServiceArgs, DWORD ArgCount, BOOL bExtended)
Definition: query.c:292
SFGAOF GetItemAttributes(PCUITEMID_CHILD pidl, UINT Query)
Definition: CDefView.cpp:1325

◆ GetItemAttributes() [2/2]

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

Definition at line 1325 of file CDefView.cpp.

1326{
1327 SFGAOF Attr = (SFGAOF)Query;
1328 return SUCCEEDED(m_pSFParent->GetAttributesOf(1, &pidl, &Attr)) ? (Attr & Query) : 0;
1329}

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 3546 of file CDefView.cpp.

3547{
3549
3550 TRACE("(%p)->(uItem=0x%08x,\n\tIID=%s, ppv=%p)\n", this, uItem, debugstr_guid(&riid), ppvOut);
3551
3552 if (!ppvOut)
3553 return E_INVALIDARG;
3554
3555 *ppvOut = NULL;
3556
3557 switch (uItem)
3558 {
3559 case SVGIO_BACKGROUND:
3560 if (IsEqualIID(riid, IID_IContextMenu))
3561 {
3564 return hr;
3565
3566 IUnknown_SetSite(*((IUnknown**)ppvOut), (IShellView *)this);
3567 }
3568 else if (IsEqualIID(riid, IID_IDispatch))
3569 {
3571 {
3574 return hr;
3575 }
3576 hr = m_pShellFolderViewDual->QueryInterface(riid, ppvOut);
3577 }
3578 break;
3579 case SVGIO_SELECTION:
3580 GetSelections();
3581 hr = m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, m_apidl, riid, 0, ppvOut);
3583 return hr;
3584
3585 if (IsEqualIID(riid, IID_IContextMenu))
3586 IUnknown_SetSite(*((IUnknown**)ppvOut), (IShellView *)this);
3587
3588 break;
3589 }
3590
3591 TRACE("-- (%p)->(interface=%p)\n", this, *ppvOut);
3592
3593 return hr;
3594}
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 3706 of file CDefView.cpp.

3707{
3708 if (!m_ListView)
3709 {
3710 ERR("!m_ListView\n");
3711 return E_FAIL;
3712 }
3713
3714 int lvIndex = LV_FindItemByPidl(pidl);
3715 if (lvIndex == -1 || ppt == NULL)
3716 return E_INVALIDARG;
3717
3718 m_ListView.GetItemPosition(lvIndex, ppt);
3719 return S_OK;
3720}
int LV_FindItemByPidl(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1351

◆ GetItemSpacing()

HRESULT STDMETHODCALLTYPE CDefView::GetItemSpacing ( ITEMSPACING spacing)
override

Definition at line 4149 of file CDefView.cpp.

4150{
4151 FIXME("(%p)->(%p) stub\n", this, spacing);
4152 return E_NOTIMPL;
4153}

◆ GetObject()

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

Definition at line 3985 of file CDefView.cpp.

3986{
3987 TRACE("(%p)->(%p %d)\n", this, pidl, item);
3988 return Item(item, pidl);
3989}
_In_ WDFCOLLECTION _In_ WDFOBJECT Item

◆ GetObjectCount()

HRESULT STDMETHODCALLTYPE CDefView::GetObjectCount ( UINT count)
override

Definition at line 4015 of file CDefView.cpp.

4016{
4017 TRACE("(%p)->(%p)\n", this, count);
4019 return S_OK;
4020}
GLuint GLuint GLsizei count
Definition: gl.h:1545

◆ GetSelectedCount()

HRESULT STDMETHODCALLTYPE CDefView::GetSelectedCount ( UINT count)
override

Definition at line 4048 of file CDefView.cpp.

4049{
4051 return S_OK;
4052}

◆ GetSelectedObjects()

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

Definition at line 4054 of file CDefView.cpp.

4055{
4056 TRACE("(%p)->(%p %p)\n", this, pidl, items);
4057
4058 *items = GetSelections();
4059
4060 if (*items)
4061 {
4062 *pidl = static_cast<PCUITEMID_CHILD *>(LocalAlloc(0, *items * sizeof(PCUITEMID_CHILD)));
4063 if (!*pidl)
4064 {
4065 return E_OUTOFMEMORY;
4066 }
4067
4068 // It's documented that caller shouldn't free the PIDLs, only the array itself
4069 memcpy(*pidl, m_apidl, *items * sizeof(PCUITEMID_CHILD));
4070 }
4071
4072 return S_OK;
4073}
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 2137 of file CDefView.cpp.

2138{
2139 if (!GetSelections())
2140 return 0;
2141 SFGAOF Attr = Query;
2142 return SUCCEEDED(m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &Attr)) ? (Attr & Query) : 0;
2143}

Referenced by FillFileMenu(), and OnContextMenu().

◆ GetSelectionMarkedItem()

HRESULT STDMETHODCALLTYPE CDefView::GetSelectionMarkedItem ( int piItem)
override

Implements IFolderView.

Definition at line 3688 of file CDefView.cpp.

3689{
3690 TRACE("(%p)->(%p)\n", this, piItem);
3691
3692 *piItem = m_ListView.GetSelectionMark();
3693
3694 return S_OK;
3695}
int GetSelectionMark()
Definition: rosctrls.h:156

◆ GetSelections()

UINT CDefView::GetSelections ( )

Definition at line 2104 of file CDefView.cpp.

2105{
2107 if (count > m_cidl || !count || !m_apidl) // !count to free possibly large cache, !m_apidl to make sure m_apidl is a valid pointer
2108 {
2109 SHFree(m_apidl);
2110 m_apidl = static_cast<PCUITEMID_CHILD*>(SHAlloc(count * sizeof(PCUITEMID_CHILD)));
2111 if (!m_apidl)
2112 {
2113 m_cidl = 0;
2114 return 0;
2115 }
2116 }
2117 m_cidl = count;
2118
2119 TRACE("-- Items selected =%u\n", m_cidl);
2120
2122
2123 UINT i = 0;
2124 int lvIndex = -1;
2125 while ((lvIndex = m_ListView.GetNextItem(lvIndex, LVNI_SELECTED)) > -1)
2126 {
2127 m_apidl[i] = _PidlByItem(lvIndex);
2128 i++;
2129 if (i == m_cidl)
2130 break;
2131 TRACE("-- selected Item found\n");
2132 }
2133
2134 return m_cidl;
2135}
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:315

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

◆ GetSpacing()

HRESULT STDMETHODCALLTYPE CDefView::GetSpacing ( POINT ppt)
override

Implements IFolderView.

Definition at line 3722 of file CDefView.cpp.

3723{
3724 TRACE("(%p)->(%p)\n", this, ppt);
3725
3726 if (!m_ListView)
3727 {
3728 ERR("!m_ListView\n");
3729 return S_FALSE;
3730 }
3731
3732 if (ppt)
3733 {
3734 SIZE spacing;
3735 m_ListView.GetItemSpacing(spacing);
3736
3737 ppt->x = spacing.cx;
3738 ppt->y = spacing.cy;
3739 }
3740
3741 return S_OK;
3742}
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 3807 of file CDefView.cpp.

3808{
3809 FIXME("(%p)->(%p, %lu) stub\n", this, view_guid, view_type);
3810 return E_NOTIMPL;
3811}
view_type

◆ GetWindow()

HRESULT WINAPI CDefView::GetWindow ( HWND lphwnd)
override

Implements IOleWindow.

Definition at line 3144 of file CDefView.cpp.

3145{
3146 TRACE("(%p)\n", this);
3147
3148 *phWnd = m_hWnd;
3149
3150 return S_OK;
3151}

◆ GetWindowProc()

virtual WNDPROC CDefView::GetWindowProc ( )
inlineoverridevirtual

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

Definition at line 523 of file CDefView.cpp.

524 {
525 return WindowProc;
526 }
static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: CDefView.cpp:528

◆ GetWndClassInfo()

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

Definition at line 510 of file CDefView.cpp.

511 {
512 static ATL::CWndClassInfo wc =
513 {
515 0, 0, NULL, NULL,
516 LoadCursor(NULL, IDC_ARROW), NULL, NULL, L"SHELLDLL_DefView", NULL
517 },
518 NULL, NULL, IDC_ARROW, TRUE, 0, _T("")
519 };
520 return wc;
521 }
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:695
#define LoadCursor
Definition: winuser.h:5897
WNDCLASSEXA WNDCLASSEX
Definition: winuser.h:5804
#define CS_PARENTDC
Definition: winuser.h:664

◆ GiveFeedback()

HRESULT WINAPI CDefView::GiveFeedback ( DWORD  dwEffect)
override

Implements IDropSource.

Definition at line 4699 of file CDefView.cpp.

4700{
4701 TRACE("(%p)\n", this);
4702
4704}
#define DRAGDROP_S_USEDEFAULTCURSORS
Definition: winerror.h:2648

◆ HandleRename()

HRESULT STDMETHODCALLTYPE CDefView::HandleRename ( LPCITEMIDLIST  pidl)
override

Definition at line 3914 of file CDefView.cpp.

3915{
3916 if (!pidl)
3917 {
3919 if (idx < 0)
3921 pidl = _PidlByItem(idx);
3922 }
3923 if (ILFindLastID(pidl) != pidl)
3924 return E_INVALIDARG;
3925 return SelectItem(pidl, SVSI_EDIT | SVSI_ENSUREVISIBLE | SVSI_FOCUSED | SVSI_SELECT);
3926}
unsigned int idx
Definition: utils.c:41
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:199

◆ IncludeObject()

HRESULT CDefView::IncludeObject ( PCUITEMID_CHILD  pidl)

Definition at line 665 of file CDefView.cpp.

666{
667 HRESULT ret = S_OK;
668 if (m_pCommDlgBrowser && !(GetCommDlgViewFlags() & CDB2GVF_NOINCLUDEITEM))
669 {
670 TRACE("ICommDlgBrowser::IncludeObject pidl=%p\n", pidl);
671 ret = m_pCommDlgBrowser->IncludeObject(this, pidl);
672 TRACE("-- returns 0x%08x\n", ret);
673 }
674 else if (m_pFolderFilter)
675 {
676 ret = m_pFolderFilter->ShouldShow(m_pSFParent, m_pidlParent, pidl);
677 }
678 return ret;
679}
CComPtr< IFolderFilter > m_pFolderFilter
Definition: CDefView.cpp:239
return ret
Definition: mutex.c:146

Referenced by fill_list().

◆ Initialize()

HRESULT WINAPI CDefView::Initialize ( IShellFolder shellFolder)

Definition at line 654 of file CDefView.cpp.

655{
656 m_pSFParent = shellFolder;
658 shellFolder->QueryInterface(IID_PPV_ARG(IShellDetails, &m_pSDParent));
659
660 return S_OK;
661}
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)

◆ InitList()

BOOL CDefView::InitList ( )

Definition at line 987 of file CDefView.cpp.

988{
989 HIMAGELIST big_icons, small_icons;
990
991 TRACE("%p\n", this);
992
994
995 Shell_GetImageLists(&big_icons, &small_icons);
997 m_ListView.SetImageList(small_icons, LVSIL_SMALL);
998
1000
1002 UINT ColumnCount = pColumns ? DPA_GetPtrCount(m_LoadColumnsList) : 0;
1003 LoadColumns(pColumns, ColumnCount);
1005 {
1009 }
1010 return TRUE;
1011}
HRESULT LoadColumns(SIZE_T *pColList=NULL, UINT ColListCount=0)
Definition: CDefView.cpp:1128
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:4974
#define DPA_GetPtrCount(hdpa)
Definition: commctrl.h:4972
#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,
bool  TryMapVerb = false 
)

Definition at line 2145 of file CDefView.cpp.

2146{
2147 CMINVOKECOMMANDINFOEX cmi;
2148
2149 ZeroMemory(&cmi, sizeof(cmi));
2150 cmi.cbSize = sizeof(cmi);
2151 cmi.hwnd = m_hWnd;
2152 cmi.lpVerb = lpVerb;
2153 cmi.nShow = SW_SHOW;
2154
2155 WCHAR szverbW[sizeof("properties")];
2156 static const WORD verbmap[] = { FCIDM_SHVIEW_DELETE, FCIDM_SHVIEW_RENAME,
2159 for (SIZE_T i = 0; TryMapVerb && i < _countof(verbmap); ++i)
2160 {
2161 if (cmi.lpVerb != MAKEINTRESOURCEA(verbmap[i]))
2162 continue;
2163 if (PCSTR pszverbA = MapFcidmCmdToVerb((UINT_PTR)cmi.lpVerb))
2164 {
2165 // Map our internal commands to canonical verbs so non-shell32 menus can understand us
2166 SHAnsiToUnicode(pszverbA, szverbW, _countof(szverbW));
2167 cmi.lpVerb = pszverbA;
2168 cmi.lpVerbW = szverbW;
2169 break;
2170 }
2171 }
2172
2173 if (GetKeyState(VK_SHIFT) < 0)
2174 cmi.fMask |= CMIC_MASK_SHIFT_DOWN;
2175
2176 if (GetKeyState(VK_CONTROL) < 0)
2177 cmi.fMask |= CMIC_MASK_CONTROL_DOWN;
2178
2179 if (pt)
2180 {
2181 cmi.fMask |= CMIC_MASK_PTINVOKE;
2182 cmi.ptInvoke = *pt;
2183 }
2184
2185 WCHAR szDirW[MAX_PATH] = L"";
2186 CHAR szDirA[MAX_PATH];
2188 *szDirW != UNICODE_NULL)
2189 {
2190 SHUnicodeToAnsi(szDirW, szDirA, _countof(szDirA));
2191 cmi.fMask |= CMIC_MASK_UNICODE;
2192 cmi.lpDirectory = szDirA;
2193 cmi.lpDirectoryW = szDirW;
2194 }
2195
2196 HRESULT hr = pCM->InvokeCommand((LPCMINVOKECOMMANDINFO)&cmi);
2197 // Most of our callers will do this, but if they would forget (File menu!)
2198 IUnknown_SetSite(pCM, NULL);
2199 pCM.Release();
2200
2202 return hr;
2203
2204 return S_OK;
2205}
PCSTR MapFcidmCmdToVerb(_In_ UINT_PTR CmdId)
#define SFVM_GETCOMMANDDIR
DWORD WINAPI SHAnsiToUnicode(LPCSTR lpSrcStr, LPWSTR lpDstStr, int iLen)
Definition: string.c:2673
INT WINAPI SHUnicodeToAnsi(LPCWSTR lpSrcStr, LPSTR lpDstStr, INT iLen)
Definition: string.c:2797
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
#define UNICODE_NULL
#define FCIDM_SHVIEW_CUT
Definition: shresdef.h:863
#define FCIDM_SHVIEW_COPY
Definition: shresdef.h:864
#define FCIDM_SHVIEW_PROPERTIES
Definition: shresdef.h:862
#define FCIDM_SHVIEW_DELETE
Definition: shresdef.h:860
#define FCIDM_SHVIEW_RENAME
Definition: shresdef.h:861
#define FCIDM_SHVIEW_CREATELINK
Definition: shresdef.h:859
#define FCIDM_SHVIEW_INSERT
Definition: shresdef.h:865
const char * PCSTR
Definition: typedefs.h:52
#define VK_CONTROL
Definition: winuser.h:2222
#define MAKEINTRESOURCEA(i)
Definition: winuser.h:581
#define SW_SHOW
Definition: winuser.h:786
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 4113 of file CDefView.cpp.

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

◆ IsDesktop()

BOOL CDefView::IsDesktop ( ) const
inlineprivate

Definition at line 296 of file CDefView.cpp.

◆ IsDropOnSource()

HRESULT STDMETHODCALLTYPE CDefView::IsDropOnSource ( IDropTarget drop_target)
override

Definition at line 4075 of file CDefView.cpp.

4076{
4077 if ((m_iDragOverItem == -1 || m_pCurDropTarget == NULL) &&
4079 {
4080 return S_OK;
4081 }
4082
4083 return S_FALSE;
4084}

Referenced by Drop().

◆ IsSpecialFolder()

BOOL CDefView::IsSpecialFolder ( int csidl) const
inlineprivate

Definition at line 298 of file CDefView.cpp.

299 {
300 csidl = m_SpecialFolder;
301 return m_SpecialFolder >= 0;
302 }

Referenced by UpdateStatusbarLocation().

◆ Item()

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

Implements IFolderView.

Definition at line 3658 of file CDefView.cpp.

3659{
3660 PCUITEMID_CHILD pidl = _PidlByItem(iItemIndex);
3661 if (pidl)
3662 {
3663 *ppidl = ILClone(pidl);
3664 return S_OK;
3665 }
3666
3667 *ppidl = 0;
3668 return E_INVALIDARG;
3669}
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:238

◆ ItemCount()

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

Implements IFolderView.

Definition at line 3671 of file CDefView.cpp.

3672{
3673 TRACE("(%p)->(%u %p)\n", this, uFlags, pcItems);
3675 FIXME("some flags unsupported, %x\n", uFlags & ~(SVGIO_ALLVIEW | SVGIO_SELECTION));
3678 else
3680 return S_OK;
3681}
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 3683 of file CDefView.cpp.

3684{
3685 return E_NOTIMPL;
3686}

◆ ListViewCompareItems()

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

Definition at line 1259 of file CDefView.cpp.

1260{
1261 PCUIDLIST_RELATIVE pidl1 = reinterpret_cast<PCUIDLIST_RELATIVE>(lParam1);
1262 PCUIDLIST_RELATIVE pidl2 = reinterpret_cast<PCUIDLIST_RELATIVE>(lParam2);
1263 CDefView *pThis = reinterpret_cast<CDefView*>(lpData);
1264
1265 HRESULT hres = pThis->m_pSFParent->CompareIDs(pThis->m_sortInfo.ListColumn, pidl1, pidl2);
1267 return 0;
1268
1269 SHORT nDiff = HRESULT_CODE(hres);
1270 return nDiff * pThis->m_sortInfo.Direction;
1271}
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 1091 of file CDefView.cpp.

1092{
1095 HRESULT hr;
1096
1097 sd.str.uType = !STRRET_WSTR; // Make sure "uninitialized" uType is not WSTR
1098 hr = GetDetailsByFolderColumn(NULL, FoldCol, sd);
1099 if (FAILED(hr))
1100 return hr;
1101 hr = StrRetToStrNW(buf, _countof(buf), &sd.str, NULL);
1102 if (FAILED(hr))
1103 return hr;
1104
1105 UINT chavewidth = CalculateCharWidth(m_ListView.m_hWnd);
1106 if (!chavewidth)
1107 chavewidth = 6; // 6 is a reasonable default fallback
1108
1109 LVCOLUMN lvc;
1110 lvc.mask = LVCF_TEXT | LVCF_FMT | LVCF_WIDTH | LVCF_SUBITEM;
1111 lvc.pszText = buf;
1112 lvc.fmt = sd.fmt;
1113 lvc.cx = ForceWidth ? ForceWidth : (sd.cxChar * chavewidth); // FIXME: DPI?
1114 lvc.iSubItem = FoldCol; // Used by MapFolderColumnToListColumn & MapListColumnToFolderColumn
1115 if ((int)ListCol == -1)
1116 {
1117 assert(Insert); // You can insert at the end but you can't change something that is not there
1118 if (Insert)
1119 ListCol = 0x7fffffff;
1120 }
1121 if (Insert)
1122 ListView_InsertColumn(m_ListView.m_hWnd, ListCol, &lvc);
1123 else
1124 ListView_SetColumn(m_ListView.m_hWnd, ListCol, &lvc);
1125 return S_OK;
1126}
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 1128 of file CDefView.cpp.

1129{
1130 HWND hWndHdr = ListView_GetHeader(m_ListView.m_hWnd);
1131 UINT newColCount = 0, oldColCount = Header_GetItemCount(hWndHdr);
1132 UINT width = 0, foldCol, i;
1133 HRESULT hr = S_FALSE;
1134
1136 for (i = 0, foldCol = 0;; ++foldCol)
1137 {
1138 if (newColCount >= 0xffff)
1139 break; // CompareIDs limit reached
1140
1141 if (pColList)
1142 {
1143 if (i >= ColListCount)
1144 break;
1145 width = HIWORD(pColList[i]);
1146 foldCol = LOWORD(pColList[i++]);
1147 }
1148
1149 SHCOLSTATEF state = 0;
1150 if (!m_pSF2Parent || FAILED(m_pSF2Parent->GetDefaultColumnState(foldCol, &state)))
1152
1153 if (foldCol == 0)
1154 {
1155 // Force the first column
1156 }
1157 else if (state & SHCOLSTATE_HIDDEN)
1158 {
1159 continue;
1160 }
1161 else if (!pColList && !(state & SHCOLSTATE_ONBYDEFAULT))
1162 {
1163 continue;
1164 }
1165
1166 bool insert = newColCount >= oldColCount;
1167 UINT listCol = insert ? -1 : newColCount;
1168 hr = LoadColumn(foldCol, listCol, insert, width);
1169 if (FAILED(hr))
1170 {
1171 if (!pColList)
1172 hr = S_OK; // No more items, we are done
1173 break;
1174 }
1175 ++newColCount;
1176 }
1177 for (i = newColCount; i < oldColCount; ++i)
1178 {
1180 }
1181
1184 assert(SUCCEEDED(MapFolderColumnToListColumn(0))); // We don't allow turning off the Name column
1186 {
1189 }
1190 return hr;
1191}
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 3332 of file CDefView.cpp.

3333{
3335 PERSISTCOLUMNS cols;
3338 bool fallback = false;
3339 HRESULT hrColumns = E_FAIL;
3341 if (SUCCEEDED(hr))
3342 {
3343 DWORD data;
3344 if (FAILED(hr = SHPropertyBag_ReadDWORD(pPB, L"Mode", &data)))
3345 goto loadfallback;
3347 cvs.FolderSettings.fFlags = ReadDWORD(pPB, L"FFlags", FWF_NOGROUPING);
3348 data = ReadDWORD(pPB, L"Sort", ~0ul);
3350 cvs.SortDir = (INT8)ReadDWORD(pPB, L"SortDir", 1);
3351 if (SUCCEEDED(hrColumns = SHPropertyBag_ReadStream(pPB, L"ColInfo", &pS)))
3352 hrColumns = LoadColumnsStream(cols, pS);
3353 }
3354 else
3355 {
3356 if (FAILED(hr = (m_pShellBrowser ? m_pShellBrowser->GetViewStateStream(STGM_READ, &pS) : E_UNEXPECTED)))
3357 {
3358 loadfallback:
3360 fallback = true;
3361 }
3362 if (FAILED(hr) || FAILED(hr = Read(pS, &cvs, sizeof(cvs))))
3363 return hr;
3364 if (cvs.Signature != cvs.SIG)
3366 hrColumns = LoadColumnsStream(cols, pS);
3367 }
3369 m_FolderSettings.fFlags &= ~cvs.VALIDFWF;
3371 if (SUCCEEDED(hrColumns))
3372 {
3373 BOOL failed = FALSE;
3374 if ((m_LoadColumnsList = DPA_Create(cols.Count)) != NULL)
3375 {
3376 for (UINT i = 0; i < cols.Count; ++i)
3377 {
3378 failed |= !DPA_SetPtr(m_LoadColumnsList, i, UlongToPtr(cols.Columns[i]));
3379 }
3380 }
3381 if (failed || !cols.Count)
3382 {
3385 }
3386 }
3389 m_sortInfo.Direction = cvs.SortDir > 0 ? 1 : -1;
3391 return hr;
3392}
static HRESULT LoadColumnsStream(PERSISTCOLUMNS &cols, IStream *pS)
Definition: CDefView.cpp:3322
static DWORD ReadDWORD(IPropertyBag *pPB, LPCWSTR name, DWORD def)
Definition: CDefView.cpp:3300
signed char INT8
#define UlongToPtr(u)
Definition: config.h:106
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 1381 of file CDefView.cpp.

1382{
1383 LVITEMW lvItem;
1384
1385 TRACE("(%p)(pidl=%p)\n", this, pidl);
1386
1388
1390 return -1;
1391
1393 lvItem.iItem = m_ListView.GetItemCount(); // add item to lists end
1394 lvItem.iSubItem = 0;
1395 lvItem.lParam = reinterpret_cast<LPARAM>(ILClone(pidl)); // set item's data
1396 lvItem.pszText = LPSTR_TEXTCALLBACKW; // get text on a callback basis
1397 lvItem.iImage = I_IMAGECALLBACK; // get image on a callback basis
1398 lvItem.stateMask = LVIS_CUT;
1399 if (m_HasCutItems)
1400 lvItem.state = GetItemAttributes(pidl, SFGAO_HIDDEN | SFGAO_GHOSTED) ? LVIS_CUT : 0;
1401
1402 return m_ListView.InsertItem(&lvItem);
1403}
#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 1405 of file CDefView.cpp.

1406{
1407 int nIndex;
1408
1409 TRACE("(%p)(pidl=%p)\n", this, pidl);
1410
1412
1413 nIndex = LV_FindItemByPidl(pidl);
1414 if (nIndex < 0)
1415 return FALSE;
1416
1418
1419 return m_ListView.DeleteItem(nIndex);
1420}
#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 1351 of file CDefView.cpp.

1352{
1354
1355 int cItems = m_ListView.GetItemCount();
1357 for (int i = 0; i < cItems; i++)
1358 {
1359 PCUITEMID_CHILD currentpidl = _PidlByItem(i);
1360 HRESULT hr = m_pSFParent->CompareIDs(lParam, pidl, currentpidl);
1361 if (SUCCEEDED(hr))
1362 {
1363 if (hr == S_EQUAL)
1364 return i;
1365 }
1366 else
1367 {
1368 for (i = 0; i < cItems; i++)
1369 {
1370 //FIXME: ILIsEqual needs absolute pidls!
1371 currentpidl = _PidlByItem(i);
1372 if (ILIsEqual(pidl, currentpidl))
1373 return i;
1374 }
1375 break;
1376 }
1377 }
1378 return -1;
1379}
#define SHCIDS_CANONICALONLY
Definition: shobjidl.idl:226
BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:583
#define S_EQUAL
Definition: shellutils.h:658

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

◆ LV_RefreshIcon()

void CDefView::LV_RefreshIcon ( INT  iItem)

Definition at line 1495 of file CDefView.cpp.

1496{
1498
1499 LVITEMW lvItem = { LVIF_IMAGE };
1500 lvItem.iItem = iItem;
1501 lvItem.iImage = I_IMAGECALLBACK;
1502 m_ListView.SetItem(&lvItem);
1503 m_ListView.Update(iItem);
1504}
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 1506 of file CDefView.cpp.

1507{
1509
1510 for (INT iItem = -1;;)
1511 {
1512 iItem = ListView_GetNextItem(m_ListView, iItem, LVNI_ALL);
1513 if (iItem == -1)
1514 break;
1515
1516 LV_RefreshIcon(iItem);
1517 }
1518}
void LV_RefreshIcon(INT iItem)
Definition: CDefView.cpp:1495
#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 1422 of file CDefView.cpp.

1423{
1424 int nItem;
1425 LVITEMW lvItem;
1426
1427 TRACE("(%p)(pidlold=%p pidlnew=%p)\n", this, pidlOld, pidlNew);
1428
1430
1431 nItem = LV_FindItemByPidl(pidlOld);
1432
1433 if (-1 != nItem)
1434 {
1435 lvItem.mask = LVIF_PARAM; // only the pidl
1436 lvItem.iItem = nItem;
1437 lvItem.iSubItem = 0;
1438 m_ListView.GetItem(&lvItem);
1439
1440 // Store old pidl until new item is replaced
1441 LPVOID oldPidl = reinterpret_cast<LPVOID>(lvItem.lParam);
1442
1443 lvItem.mask = LVIF_PARAM | LVIF_IMAGE | LVIF_TEXT;
1444 lvItem.iItem = nItem;
1445 lvItem.iSubItem = 0;
1446 lvItem.lParam = reinterpret_cast<LPARAM>(ILClone(pidlNew)); // set item's data
1449 m_ListView.SetItem(&lvItem);
1450 m_ListView.Update(nItem);
1451
1452 // Now that the new item is in place, we can safely release the old pidl
1453 SHFree(oldPidl);
1454
1455 return TRUE; // FIXME: better handling
1456 }
1457
1458 return FALSE;
1459}
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() [1/2]

BOOL CDefView::LV_UpdateItem ( INT  nItem,
PCUITEMID_CHILD  pidl 
)

Definition at line 1461 of file CDefView.cpp.

1462{
1463 BOOL bResult = FALSE;
1464 LVITEMW lvItem;
1465 if (nItem >= 0)
1466 {
1468
1469 lvItem.mask = LVIF_IMAGE | LVIF_STATE;
1470 lvItem.iItem = nItem;
1471 lvItem.iSubItem = 0;
1473 lvItem.stateMask = LVIS_CUT;
1474 if (m_HasCutItems)
1475 lvItem.state = GetItemAttributes(pidl, SFGAO_HIDDEN | SFGAO_GHOSTED) ? LVIS_CUT : 0;
1476 PCUITEMID_CHILD pidlOld = _PidlByItem(nItem);
1477 if (pidlOld && (lvItem.lParam = reinterpret_cast<LPARAM>(ILClone(pidl))) != NULL)
1478 lvItem.mask |= LVIF_PARAM;
1479 bResult = m_ListView.SetItem(&lvItem);
1480 if (bResult && lvItem.lParam && pidlOld)
1481 ILFree(const_cast<PUITEMID_CHILD>(pidlOld));
1482 for (UINT i = 0; m_ListView.SetItemText(nItem, i, LPSTR_TEXTCALLBACK); ++i) {} // Update all columns
1483 }
1484 return bResult;
1485}
BOOL SetItemText(int i, int subItem, LPCWSTR text)
Definition: rosctrls.h:186
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1045
#define LPSTR_TEXTCALLBACK
Definition: commctrl.h:2388
#define SFVM_UPDATINGOBJECT
Definition: shlobj.h:1338
ITEMID_CHILD UNALIGNED * PUITEMID_CHILD
Definition: shtypes.idl:68

Referenced by LV_UpdateItem(), OnChangeNotify(), and OnNotify().

◆ LV_UpdateItem() [2/2]

BOOL CDefView::LV_UpdateItem ( PCUITEMID_CHILD  pidl)

Definition at line 1487 of file CDefView.cpp.

1488{
1489 TRACE("(%p)(pidl=%p)\n", this, pidl);
1491 INT nItem = LV_FindItemByPidl(pidl);
1492 return nItem >= 0 ? LV_UpdateItem(nItem, pidl) : FALSE;
1493}
BOOL LV_UpdateItem(INT nItem, PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1461

◆ MapFolderColumnToListColumn()

HRESULT CDefView::MapFolderColumnToListColumn ( UINT  FoldCol)

Definition at line 1026 of file CDefView.cpp.

1027{
1028 // This function is only called during column management, performance is not critical.
1029 for (UINT i = 0;; ++i)
1030 {
1032 if ((UINT)r == FoldCol)
1033 return i;
1034 else if (FAILED(r))
1035 return r;
1036 }
1037}
static HRESULT SHGetLVColumnSubItem(HWND List, UINT Col)
Definition: CDefView.cpp:1016

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

◆ MapListColumnToFolderColumn()

HRESULT CDefView::MapListColumnToFolderColumn ( UINT  ListCol)

Definition at line 1039 of file CDefView.cpp.

1040{
1041 // This function is called every time a LVITEM::iSubItem is mapped to
1042 // a folder column (calls to GetDetailsOf etc.) and should be fast.
1044 {
1046 if (ListCol < count)
1047 {
1049 assert(col >= 0 && col == SHGetLVColumnSubItem(m_ListView.m_hWnd, ListCol));
1050 return col;
1051 }
1052 else if (count)
1053 {
1054 TRACE("m_ListToFolderColMap cache miss while mapping %d\n", ListCol);
1055 }
1056 }
1057 return SHGetLVColumnSubItem(m_ListView.m_hWnd, ListCol);
1058}
#define INT
Definition: polytest.cpp:20
#define DPA_FastGetPtr(hdpa, i)
Definition: commctrl.h:4977

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

◆ MoveIcons()

HRESULT STDMETHODCALLTYPE CDefView::MoveIcons ( IDataObject obj)
override

Definition at line 4101 of file CDefView.cpp.

4102{
4103 TRACE("(%p)->(%p)\n", this, obj);
4104 return E_NOTIMPL;
4105}

◆ OnActivate()

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

Definition at line 2509 of file CDefView.cpp.

2510{
2512 return 0;
2513}
void DoActivate(UINT uState)
Definition: CDefView.cpp:2452

◆ OnChangeCBChain()

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

Definition at line 3116 of file CDefView.cpp.

3117{
3118 bHandled = TRUE;
3119 return m_ClipboardChain.HandleChangeCBChain(wParam, lParam);
3120}
ClipboardViewerChain m_ClipboardChain
Definition: CDefView.cpp:241

◆ OnChangeNotify()

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

Definition at line 2922 of file CDefView.cpp.

2923{
2924 // The change notify can come before WM_CREATE
2925 if (!m_ListView)
2926 return FALSE;
2927
2928 HANDLE hChange = (HANDLE)wParam;
2929 DWORD dwProcID = (DWORD)lParam;
2930 PIDLIST_ABSOLUTE *Pidls;
2931 LONG lEvent;
2932 HANDLE hLock = SHChangeNotification_Lock(hChange, dwProcID, &Pidls, &lEvent);
2933 if (hLock == NULL)
2934 {
2935 ERR("hLock == NULL\n");
2936 return FALSE;
2937 }
2938 lEvent &= ~SHCNE_INTERRUPT;
2939 TRACE("(%p)(%p,%p,%p) %#x\n", this, Pidls[0], Pidls[1], lParam, lEvent);
2940
2942 {
2944 return FALSE;
2945 }
2946
2947 // Translate child IDLs.
2948 // SHSimpleIDListFromPathW creates fake PIDLs (lacking some attributes)
2949 HRESULT hr;
2950 PITEMID_CHILD child0 = NULL, child1 = NULL;
2951 CComHeapPtr<ITEMIDLIST_RELATIVE> pidl0Temp, pidl1Temp;
2953 {
2954 if (_ILIsSpecialFolder(Pidls[0]) || ILIsParentOrSpecialParent(m_pidlParent, Pidls[0]))
2955 {
2956 child0 = ILFindLastID(Pidls[0]);
2957 hr = SHGetRealIDL(m_pSFParent, child0, &pidl0Temp);
2958 if (SUCCEEDED(hr))
2959 child0 = pidl0Temp;
2960 }
2961 if (_ILIsSpecialFolder(Pidls[1]) || ILIsParentOrSpecialParent(m_pidlParent, Pidls[1]))
2962 {
2963 child1 = ILFindLastID(Pidls[1]);
2964 hr = SHGetRealIDL(m_pSFParent, child1, &pidl1Temp);
2965 if (SUCCEEDED(hr))
2966 child1 = pidl1Temp;
2967 }
2968 }
2969
2970 switch (lEvent)
2971 {
2972 case SHCNE_MKDIR:
2973 case SHCNE_CREATE:
2974 case SHCNE_DRIVEADD:
2975 if (!child0)
2976 break;
2977 if (LV_FindItemByPidl(child0) < 0)
2978 LV_AddItem(child0);
2979 else
2980 LV_UpdateItem(child0);
2981 break;
2982 case SHCNE_RMDIR:
2983 case SHCNE_DELETE:
2984 case SHCNE_DRIVEREMOVED:
2985 if (child0)
2986 LV_DeleteItem(child0);
2987 break;
2988 case SHCNE_RENAMEFOLDER:
2989 case SHCNE_RENAMEITEM:
2990 if (child0 && child1)
2991 LV_RenameItem(child0, child1);
2992 else if (child0)
2993 LV_DeleteItem(child0);
2994 else if (child1)
2995 LV_AddItem(child1);
2996 break;
2997 case SHCNE_UPDATEITEM:
2998 if (child0)
2999 LV_UpdateItem(child0);
3000 break;
3001 case SHCNE_UPDATEIMAGE:
3003 case SHCNE_MEDIAREMOVED:
3004 case SHCNE_ASSOCCHANGED:
3006 break;
3007 case SHCNE_UPDATEDIR:
3008 case SHCNE_ATTRIBUTES:
3009 if (child0)
3010 LV_UpdateItem(child0);
3011 else
3012 Refresh();
3014 break;
3015 case SHCNE_FREESPACE:
3017 break;
3018 }
3019
3021 return TRUE;
3022}
static BOOL ILIsParentOrSpecialParent(PCIDLIST_ABSOLUTE pidl1, PCIDLIST_ABSOLUTE pidl2)
Definition: CDefView.cpp:2910
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:733
BOOLEAN LV_DeleteItem(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1405
void LV_RefreshIcons()
Definition: CDefView.cpp:1506
BOOLEAN LV_RenameItem(PCUITEMID_CHILD pidlOld, PCUITEMID_CHILD pidlNew)
Definition: CDefView.cpp:1422
STDMETHOD() Refresh() override
Definition: CDefView.cpp:3206
EXTERN_C HRESULT WINAPI SHGetRealIDL(_In_ IShellFolder *psf, _In_ PCUITEMID_CHILD pidlSimple, _Outptr_ PITEMID_CHILD *ppidlReal)
Definition: utils.cpp:1643
BOOL _ILIsSpecialFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:2120
#define SHCNE_DRIVEREMOVED
Definition: shlobj.h:1902
#define SHCNE_RMDIR
Definition: shlobj.h:1899
#define SHCNE_DELETE
Definition: shlobj.h:1897
#define SHCNE_MKDIR
Definition: shlobj.h:1898
#define SHCNE_UPDATEITEM
Definition: shlobj.h:1908
#define SHCNE_RENAMEITEM
Definition: shlobj.h:1895
#define SHCNE_UPDATEDIR
Definition: shlobj.h:1907
#define SHCNE_MEDIAINSERTED
Definition: shlobj.h:1900
#define SHCNE_UPDATEIMAGE
Definition: shlobj.h:1910
#define SHCNE_CREATE
Definition: shlobj.h:1896
#define SHCNE_RENAMEFOLDER
Definition: shlobj.h:1912
#define SHCNE_MEDIAREMOVED
Definition: shlobj.h:1901
#define SHCNE_EXTENDED_EVENT
Definition: shlobj.h:1915
#define SHCNE_DRIVEADD
Definition: shlobj.h:1903
#define SHCNE_ASSOCCHANGED
Definition: shlobj.h:1916
#define SHCNE_ATTRIBUTES
Definition: shlobj.h:1906
#define SHCNE_FREESPACE
Definition: shlobj.h:1913
#define SFVM_FSNOTIFY
Definition: shlobj.h:1312
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 2547 of file CDefView.cpp.

2548{
2549 DWORD dwCmdID;
2550 DWORD dwCmd;
2551 HWND hwndCmd;
2552 int nCount;
2553
2554 dwCmdID = GET_WM_COMMAND_ID(wParam, lParam);
2556 hwndCmd = GET_WM_COMMAND_HWND(wParam, lParam);
2557
2558 TRACE("(%p)->(0x%08x 0x%08x %p) stub\n", this, dwCmdID, dwCmd, hwndCmd);
2559
2560 if (dwCmdID >= DVIDM_ARRANGESORT_FIRST && dwCmdID <= DVIDM_ARRANGESORT_LAST)
2561 {
2562 UINT listCol = (UINT)GetMenuItemDataById(m_hMenuArrangeModes, dwCmdID);
2563 _Sort(listCol);
2564 return 0;
2565 }
2566
2567 switch (dwCmdID)
2568 {
2573 case 0x702D:
2575 case 0x702F:
2577 break;
2580 break;
2582 if (_GetSnapToGrid() == S_OK)
2584 else
2585 ArrangeGrid();
2586 break;
2588 if (GetAutoArrange() == S_OK)
2589 m_ListView.ModifyStyle(LVS_AUTOARRANGE, 0);
2590 else
2591 AutoArrange();
2592 break;
2596 break;
2598 nCount = m_ListView.GetItemCount();
2599 for (int i=0; i < nCount; i++)
2601 break;
2604 break;
2606 Refresh();
2607 break;
2609 case FCIDM_SHVIEW_CUT:
2610 case FCIDM_SHVIEW_COPY:
2614 return 0;
2615 return OnExplorerCommand(dwCmdID, TRUE);
2619 return 0;
2621 case FCIDM_SHVIEW_UNDO:
2624 return OnExplorerCommand(dwCmdID, FALSE);
2625 default:
2626 // WM_COMMAND messages from file menu are routed to CDefView to let m_pFileMenu handle them
2627 if (m_pFileMenu && dwCmd == 0)
2628 {
2629 HMENU Dummy = NULL;
2630 MenuCleanup _(m_pFileMenu, Dummy);
2632 }
2633 }
2634
2635 return 0;
2636}
#define GET_WM_COMMAND_HWND(wp, lp)
Definition: CDefView.cpp:589
#define GET_WM_COMMAND_ID(wp, lp)
Definition: CDefView.cpp:588
#define GET_WM_COMMAND_CMD(wp, lp)
Definition: CDefView.cpp:590
#define SFVM_CANSELECTALL
STDMETHOD() AutoArrange() override
Definition: CDefView.cpp:3966
void _DoCopyToMoveToFolder(BOOL bCopy)
Definition: CDefView.cpp:2486
STDMETHOD() SetCurrentViewMode(UINT ViewMode) override
Definition: CDefView.cpp:3616
LRESULT OnExplorerCommand(UINT uCommand, BOOL bUseSelection)
Definition: CDefView.cpp:2366
STDMETHOD() ArrangeGrid() override
Definition: CDefView.cpp:3960
UINT GetItemState(int i, UINT mask)
Definition: rosctrls.h:173
void SetItemState(int i, UINT state, UINT mask)
Definition: rosctrls.h:178
#define _(op)
Definition: opcodes.c:24
#define LVIS_SELECTED
Definition: commctrl.h:2324
#define LVA_SNAPTOGRID
Definition: commctrl.h:2535
@ REST_NOVIEWCONTEXTMENU
Definition: shlobj.h:1674
#define FCIDM_SHVIEW_DESELECTALL
Definition: shlobj_undoc.h:66
DWORD WINAPI SHRestricted(RESTRICTIONS rest)
Definition: shpolicy.c:166
#define FCIDM_SHVIEW_SELECTALL
Definition: shresdef.h:870
#define FCIDM_SHVIEW_LISTVIEW
Definition: shresdef.h:875
#define FCIDM_SHVIEW_UNDO
Definition: shresdef.h:866
#define FCIDM_SHVIEW_TILEVIEW
Definition: shresdef.h:877
#define FCIDM_SHVIEW_INSERTLINK
Definition: shresdef.h:867
#define FCIDM_SHVIEW_NEWFOLDER
Definition: shresdef.h:885
#define FCIDM_SHVIEW_SMALLICON
Definition: shresdef.h:874
#define FCIDM_SHVIEW_SNAPTOGRID
Definition: shresdef.h:880
#define FCIDM_SHVIEW_COPYTO
Definition: shresdef.h:868
#define FCIDM_SHVIEW_MOVETO
Definition: shresdef.h:869
#define FCIDM_SHVIEW_REPORTVIEW
Definition: shresdef.h:876
#define FCIDM_SHVIEW_INVERTSELECTION
Definition: shresdef.h:871

◆ OnContextMenu()

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

Definition at line 2249 of file CDefView.cpp.

2250{
2252 UINT uCommand;
2253 HRESULT hResult;
2254
2255 TRACE("(%p)\n", this);
2256
2257 if (m_hContextMenu != NULL)
2258 {
2259 ERR("HACK: Aborting context menu in nested call\n");
2260 return 0;
2261 }
2262
2263 HWND hWndHdr = ListView_GetHeader(m_ListView.m_hWnd);
2264 RECT r;
2265 if (::GetWindowRect(hWndHdr, &r) && PtInRect(&r, pt) && ::IsWindowVisible(hWndHdr))
2266 {
2268 }
2269
2271 if (!m_hContextMenu)
2272 return E_FAIL;
2273
2274 if (lParam != ~0) // unless app key (menu key) was pressed
2275 {
2276 LV_HITTESTINFO hittest = { pt };
2277 ScreenToClient(&hittest.pt);
2278 m_ListView.HitTest(&hittest);
2279
2280 // Right-Clicked item is selected? If selected, no selection change.
2281 // If not selected, then reset the selection and select the item.
2282 if ((hittest.flags & LVHT_ONITEM) &&
2284 {
2285 SelectItem(hittest.iItem, SVSI_SELECT | SVSI_DESELECTOTHERS | SVSI_ENSUREVISIBLE);
2286 }
2287 }
2288
2290 // In case we still have this left over, clean it up
2293 if (FAILED_UNEXPECTEDLY(hResult))
2294 return 0;
2295
2297 // Use 1 as the first id we want. 0 means that user canceled the menu
2298 hResult = m_pCM->QueryContextMenu(m_hContextMenu, 0, CONTEXT_MENU_BASE_ID, DVIDM_CONTEXTMENU_LAST, cmf);
2299 if (FAILED_UNEXPECTEDLY(hResult))
2300 return 0;
2301
2302 if (m_pCommDlgBrowser && !(GetCommDlgViewFlags() & CDB2GVF_NOSELECTVERB))
2303 {
2304 HMENU hMenuSource = LoadMenuW(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCEW(IDM_DVSELECT));
2306 DestroyMenu(hMenuSource);
2308 // TODO: ICommDlgBrowser2::GetDefaultMenuText == S_OK
2309 }
2310
2311 // There is no position requested, so try to find one
2312 if (lParam == ~0)
2313 {
2314 HWND hFocus = ::GetFocus();
2315 int lvIndex = -1;
2316
2317 if (hFocus == m_ListView.m_hWnd || m_ListView.IsChild(hFocus))
2318 {
2319 // Is there an item focused and selected?
2321 // If not, find the first selected item
2322 if (lvIndex < 0)
2323 lvIndex = m_ListView.GetNextItem(-1, LVNI_SELECTED);
2324 }
2325
2326 // We got something
2327 if (lvIndex > -1)
2328 {
2329 // Find the center of the icon
2330 RECT rc = { LVIR_ICON };
2331 m_ListView.SendMessage(LVM_GETITEMRECT, lvIndex, (LPARAM)&rc);
2332 pt.x = (rc.right + rc.left) / 2;
2333 pt.y = (rc.bottom + rc.top) / 2;
2334 }
2335 else
2336 {
2337 // We have to drop it somewhere
2338 pt.x = pt.y = 0;
2339 }
2340
2341 m_ListView.ClientToScreen(&pt);
2342 }
2343
2346 pcdb2->Notify(static_cast<IShellView*>(this), CDB2N_CONTEXTMENU_START);
2347
2348 // This runs the message loop, calling back to us with f.e. WM_INITPOPUP (hence why m_hContextMenu and m_pCM exist)
2349 uCommand = TrackPopupMenu(m_hContextMenu,
2351 pt.x, pt.y, 0, m_hWnd, NULL);
2352 if (uCommand >= DVIDM_ARRANGESORT_FIRST && uCommand <= DVIDM_ARRANGESORT_LAST)
2353 {
2354 SendMessage(WM_COMMAND, uCommand, 0);
2355 }
2356 else if (uCommand != 0 && !(uCommand == DVIDM_COMMDLG_SELECT && OnDefaultCommand() == S_OK))
2357 {
2359 }
2360
2361 if (pcdb2)
2362 pcdb2->Notify(static_cast<IShellView*>(this), CDB2N_CONTEXTMENU_DONE);
2363 return 0;
2364}
@ DVIDM_COMMDLG_SELECT
Definition: CDefView.cpp:51
#define CONTEXT_MENU_BASE_ID
Definition: CDefView.cpp:82
BOOL IsWindowVisible() const
Definition: atlwin.h:958
CComPtr< IContextMenu > m_pCM
Definition: CDefView.cpp:272
LRESULT DoColumnContextMenu(LRESULT lParam)
Definition: CDefView.cpp:1997
HRESULT OnDefaultCommand()
Definition: CDefView.cpp:681
#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:914
HWND WINAPI GetFocus(void)
Definition: window.c:1863
BOOL WINAPI SetMenuDefaultItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define WM_COMMAND
Definition: winuser.h:1759
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define SendMessage
Definition: winuser.h:5928

◆ OnCreate()

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

Definition at line 1763 of file CDefView.cpp.

1764{
1767
1768 TRACE("%p\n", this);
1769
1771 {
1772 if (FAILED(RegisterDragDrop(m_hWnd, pdt)))
1773 ERR("Error Registering DragDrop\n");
1774 }
1775
1776 /* register for receiving notifications */
1777 m_pSFParent->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2));
1778 if (ppf2)
1779 {
1780 ppf2->GetCurFolder(&m_pidlParent);
1781 }
1782
1783 if (CreateList())
1784 {
1785 if (InitList())
1786 {
1787 FillList(FALSE);
1788 }
1789 }
1790
1792 {
1793 HWND hwndSB;
1794 m_pShellBrowser->GetWindow(&hwndSB);
1796 }
1797
1798 // Set up change notification
1799 LPITEMIDLIST pidlTarget = NULL;
1800 LONG fEvents = 0;
1801 HRESULT hr = _DoFolderViewCB(SFVM_GETNOTIFY, (WPARAM)&pidlTarget, (LPARAM)&fEvents);
1802 if (FAILED(hr) || (!pidlTarget && !fEvents)) // FIXME: MSDN says both zero means no notifications
1803 {
1804 pidlTarget = m_pidlParent;
1805 fEvents = SHCNE_ALLEVENTS;
1806 }
1807 SHChangeNotifyEntry ntreg = {};
1809 if (FAILED(hr))
1810 {
1811 ntreg.fRecursive = FALSE;
1812 ntreg.pidl = pidlTarget;
1813 }
1817 fEvents, SHV_CHANGE_NOTIFY,
1818 1, &ntreg);
1819
1821
1822 int bForceFullStatusBar = false;
1823 BOOL bIsFileSystem = SHGetAttributes(NULL, m_pidlParent, SFGAO_FILESYSTEM) & SFGAO_FILESYSTEM;
1824 m_SpecialFolder = bIsFileSystem ? -1 : 0x7f; // FS folder or "generic" CSIDL
1826 {
1828 }
1829 else if (IsEqualPersistClassID(ppf2, CLSID_RecycleBin))
1830 {
1831 m_SpecialFolder = bForceFullStatusBar = CSIDL_BITBUCKET;
1832 }
1833 else if (bIsFileSystem)
1834 {
1836 if (ILIsParent(pidlNet, m_pidlParent, FALSE) && ILGetSize(pidlNet) < ILGetSize(m_pidlParent))
1838 }
1839 m_isFullStatusBar = bIsFileSystem || bForceFullStatusBar;
1840 _ForceStatusBarResize(); // This handles changing StatusBar parts
1843
1844 return S_OK;
1845}
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
#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 CreateList()
Definition: CDefView.cpp:842
HRESULT FillList(BOOL IsRefreshCommand=TRUE)
Definition: CDefView.cpp:1537
void _ForceStatusBarResize()
Definition: CDefView.cpp:4547
BOOL InitList()
Definition: CDefView.cpp:987
HRESULT WINAPI RegisterDragDrop(HWND hwnd, LPDROPTARGET pDropTarget)
Definition: ole2.c:557
DWORD SHGetAttributes(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes)
Definition: utils.cpp:448
static BOOL IsEqualPersistClassID(IPersist *pPersist, REFCLSID clsid)
Definition: utils.h:36
LPITEMIDLIST WINAPI SHCloneSpecialIDList(HWND hwndOwner, int nFolder, BOOL fCreate)
Definition: pidl.c:446
BOOL WINAPI ILIsParent(LPCITEMIDLIST pidlParent, LPCITEMIDLIST pidlChild, BOOL bImmediate)
Definition: pidl.c:698
#define ILGetSize
Definition: shellclasses.h:638
#define SHCNRF_NewDelivery
Definition: shlobj.h:1944
#define SHCNRF_ShellLevel
Definition: shlobj.h:1942
#define CSIDL_DESKTOP
Definition: shlobj.h:2179
#define CSIDL_NETWORK
Definition: shlobj.h:2196
#define SHCNRF_InterruptLevel
Definition: shlobj.h:1941
#define SHCNE_ALLEVENTS
Definition: shlobj.h:1919
#define SFVM_QUERYFSNOTIFY
Definition: shlobj.h:1321
#define SFVM_GETNOTIFY
Definition: shlobj.h:1342
#define CSIDL_BITBUCKET
Definition: shlobj.h:2189
#define IDA_SHELLVIEW
Definition: shresdef.h:26
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
PCIDLIST_ABSOLUTE pidl
Definition: shlobj.h:1891
BOOL WINAPI SetShellWindowEx(HWND, HWND)
Definition: ntwrapper.h:58
HACCEL WINAPI LoadAcceleratorsW(_In_opt_ HINSTANCE, _In_ LPCWSTR)

◆ OnDeactivate()

void CDefView::OnDeactivate ( )

Definition at line 2441 of file CDefView.cpp.

2442{
2443 TRACE("%p\n", this);
2444
2446 {
2447 // TODO: cleanup menu after deactivation
2449 }
2450}

Referenced by DoActivate(), and OnNotify().

◆ OnDefaultCommand()

HRESULT CDefView::OnDefaultCommand ( )

Definition at line 681 of file CDefView.cpp.

682{
684
685 if (m_pCommDlgBrowser.p != NULL)
686 {
687 TRACE("ICommDlgBrowser::OnDefaultCommand\n");
688 ret = m_pCommDlgBrowser->OnDefaultCommand(this);
689 TRACE("-- returns 0x%08x\n", ret);
690 }
691
692 return ret;
693}

Referenced by OnContextMenu(), and OpenSelectedItems().

◆ OnDestroy()

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

Definition at line 1652 of file CDefView.cpp.

1653{
1654 if (!m_Destroyed)
1655 {
1656 m_Destroyed = TRUE;
1659 m_hNotify = NULL;
1660 m_ClipboardChain.Unhook(m_hWnd);
1661 if (m_pFileMenu)
1662 {
1664 m_pFileMenu = NULL;
1665 }
1666 if (m_hMenu)
1667 {
1669 m_hMenu = NULL;
1670 }
1673 }
1674 bHandled = FALSE;
1675 return 0;
1676}
EXTERN_C BOOL WINAPI SHChangeNotifyDeregister(ULONG hNotify)
HRESULT WINAPI RevokeDragDrop(HWND hwnd)
Definition: ole2.c:639

◆ OnDrawClipboard()

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

Definition at line 3122 of file CDefView.cpp.

3123{
3124 bHandled = TRUE;
3125 const LRESULT res = m_ClipboardChain.HandleDrawClipboard(wParam, lParam);
3126 if (m_HasCutItems)
3127 {
3128 m_ClipboardChain.Unhook(m_hWnd);
3129 m_HasCutItems = false;
3130 m_ListView.SetItemState(-1, 0, LVIS_CUT); // Somebody copied or pasted, nothing can be "cut" anymore
3131 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, m_ListView.SendMessageW(LVM_GETCALLBACKMASK, 0, 0) | LVIS_CUT, 0);
3132 }
3133 return res;
3134}
GLuint res
Definition: glext.h:9613
#define LVM_GETCALLBACKMASK
Definition: commctrl.h:2421

◆ OnEraseBackground()

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

Definition at line 1678 of file CDefView.cpp.

1679{
1680 /* redirect to parent */
1683
1684 bHandled = FALSE;
1685 return 0;
1686}
CWindow GetParent() const
Definition: atlwin.h:700
@ FWF_TRANSPARENT
Definition: shobjidl.idl:650
#define WM_ERASEBKGND
Definition: winuser.h:1644
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

◆ OnExplorerCommand()

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

Definition at line 2366 of file CDefView.cpp.

2367{
2368 HRESULT hResult;
2369 HMENU hMenu = NULL;
2370
2372 hResult = GetItemObject(bUseSelection ? SVGIO_SELECTION : SVGIO_BACKGROUND, IID_PPV_ARG(IContextMenu, &pCM));
2373 if (FAILED_UNEXPECTEDLY(hResult))
2374 return 0;
2375
2376 MenuCleanup _(pCM, hMenu);
2377
2378 if ((uCommand != FCIDM_SHVIEW_DELETE) && (uCommand != FCIDM_SHVIEW_RENAME))
2379 {
2380 hMenu = CreatePopupMenu();
2381 if (!hMenu)
2382 return 0;
2383
2384 hResult = pCM->QueryContextMenu(hMenu, 0, DVIDM_CONTEXTMENU_FIRST, DVIDM_CONTEXTMENU_LAST, CMF_NORMAL);
2385 if (FAILED_UNEXPECTEDLY(hResult))
2386 return 0;
2387 }
2388
2389 if (bUseSelection)
2390 {
2391 // FIXME: we should cache this
2392 SFGAOF rfg = SFGAO_BROWSABLE | SFGAO_CANCOPY | SFGAO_CANLINK | SFGAO_CANMOVE | SFGAO_CANDELETE | SFGAO_CANRENAME | SFGAO_HASPROPSHEET | SFGAO_FILESYSTEM | SFGAO_FOLDER;
2393 hResult = m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &rfg);
2394 if (FAILED_UNEXPECTEDLY(hResult))
2395 return 0;
2396
2397 if (!(rfg & SFGAO_CANMOVE) && uCommand == FCIDM_SHVIEW_CUT)
2398 return 0;
2399 if (!(rfg & SFGAO_CANCOPY) && uCommand == FCIDM_SHVIEW_COPY)
2400 return 0;
2401 if (!(rfg & SFGAO_CANDELETE) && uCommand == FCIDM_SHVIEW_DELETE)
2402 return 0;
2403 if (!(rfg & SFGAO_CANRENAME) && uCommand == FCIDM_SHVIEW_RENAME)
2404 return 0;
2405 if (!(rfg & SFGAO_HASPROPSHEET) && uCommand == FCIDM_SHVIEW_PROPERTIES)
2406 return 0;
2407 }
2408
2409 // FIXME: We should probably use the objects position?
2410 InvokeContextMenuCommand(pCM, MAKEINTRESOURCEA(uCommand), NULL, true);
2411 return 0;
2412}

Referenced by OnCommand().

◆ OnFinalMessage()

VOID CDefView::OnFinalMessage ( HWND  )
overridevirtual

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

Definition at line 1758 of file CDefView.cpp.

1759{
1760 this->Release();
1761}
ULONG Release()

◆ OnGetDlgCode()

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

Definition at line 1647 of file CDefView.cpp.

1648{
1649 return m_ListView.SendMessageW(uMsg, 0, 0);
1650}

◆ OnGetShellBrowser()

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

Definition at line 1746 of file CDefView.cpp.

1747{
1748 return reinterpret_cast<LRESULT>(m_pShellBrowser.p);
1749}

◆ OnInitMenuPopup()

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

Definition at line 3056 of file CDefView.cpp.

3057{
3058 HMENU hmenu = (HMENU) wParam;
3059 int nPos = LOWORD(lParam);
3060 UINT menuItemId;
3061
3062 if (m_isEditing)
3064 if (m_pCM)
3065 OnMenuMessage(uMsg, wParam, lParam, bHandled);
3066
3068
3069 if (GetSelections() == 0)
3070 {
3077 }
3078 else
3079 {
3080 // FIXME: Check copyable
3087 }
3088
3089 /* Lets try to find out what the hell wParam is */
3090 if (hmenu == GetSubMenu(m_hMenu, nPos))
3091 menuItemId = ReallyGetMenuItemID(m_hMenu, nPos);
3092 else if (hViewMenu && hmenu == GetSubMenu(hViewMenu, nPos))
3093 menuItemId = ReallyGetMenuItemID(hViewMenu, nPos);
3094 else if (m_hContextMenu && hmenu == GetSubMenu(m_hContextMenu, nPos))
3095 menuItemId = ReallyGetMenuItemID(m_hContextMenu, nPos);
3096 else
3097 return FALSE;
3098
3099 switch (menuItemId)
3100 {
3101 case FCIDM_MENU_FILE:
3102 FillFileMenu();
3103 break;
3104 case FCIDM_MENU_VIEW:
3105 case FCIDM_SHVIEW_VIEW:
3107 break;
3110 break;
3111 }
3112
3113 return FALSE;
3114}
static UINT ReallyGetMenuItemID(HMENU hmenu, int i)
Definition: CDefView.cpp:192
HRESULT FillFileMenu()
Definition: CDefView.cpp:1849
LRESULT OnMenuMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:3024
HRESULT FillArrangeAsMenu(HMENU hmenuArrange)
Definition: CDefView.cpp:1928
#define ListView_CancelEditLabel(hwnd)
Definition: commctrl.h:3018
#define MF_ENABLED
Definition: winuser.h:128

◆ OnKillFocus()

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

Definition at line 2535 of file CDefView.cpp.

2536{
2537 TRACE("(%p) stub\n", this);
2538
2540 /* Notify the ICommDlgBrowser */
2541 OnStateChange(CDBOSC_KILLFOCUS);
2542
2543 return 0;
2544}
HRESULT OnStateChange(UINT uFlags)
Definition: CDefView.cpp:695
@ SVUIA_ACTIVATE_NOFOCUS
Definition: shobjidl.idl:754

◆ OnMenuMessage()

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

Definition at line 3024 of file CDefView.cpp.

3025{
3026 if (!m_pCM)
3027 {
3028 /* no menu */
3029 ERR("no context menu\n");
3030 return FALSE;
3031 }
3032 LRESULT result = 0;
3034 return SUCCEEDED(hres);
3035}
HRESULT WINAPI SHForwardContextMenuMsg(IUnknown *pUnk, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pResult, BOOL useIContextMenu2)
Definition: rosordinal.c:11

Referenced by OnInitMenuPopup().

◆ OnNCCreate()

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

Definition at line 1751 of file CDefView.cpp.

1752{
1753 this->AddRef();
1754 bHandled = FALSE;
1755 return 0;
1756}

◆ OnNotify()

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

Definition at line 2656 of file CDefView.cpp.

2657{
2658 UINT CtlID;
2659 LPNMHDR lpnmh;
2660 LPNMLISTVIEW lpnmlv;
2661 NMLVDISPINFOW *lpdi;
2662 PCUITEMID_CHILD pidl;
2663 BOOL unused;
2664
2665 CtlID = wParam;
2666 lpnmh = (LPNMHDR)lParam;
2667 lpnmlv = (LPNMLISTVIEW)lpnmh;
2668 lpdi = (NMLVDISPINFOW *)lpnmh;
2669
2670 TRACE("%p CtlID=%u lpnmh->code=%x\n", this, CtlID, lpnmh->code);
2671
2672 switch (lpnmh->code)
2673 {
2674 case NM_SETFOCUS:
2675 TRACE("-- NM_SETFOCUS %p\n", this);
2676 OnSetFocus(0, 0, 0, unused);
2677 break;
2678 case NM_KILLFOCUS:
2679 TRACE("-- NM_KILLFOCUS %p\n", this);
2680 OnDeactivate();
2681 /* Notify the ICommDlgBrowser interface */
2682 OnStateChange(CDBOSC_KILLFOCUS);
2683 break;
2684 case NM_CUSTOMDRAW:
2685 TRACE("-- NM_CUSTOMDRAW %p\n", this);
2686 return CDRF_DODEFAULT;
2687 case NM_RELEASEDCAPTURE:
2688 TRACE("-- NM_RELEASEDCAPTURE %p\n", this);
2689 break;
2690 case NM_CLICK:
2691 TRACE("-- NM_CLICK %p\n", this);
2692 break;
2693 case NM_RCLICK:
2694 TRACE("-- NM_RCLICK %p\n", this);
2695 break;
2696 case NM_DBLCLK:
2697 TRACE("-- NM_DBLCLK %p\n", this);
2698 break;
2699 case NM_RETURN:
2700 TRACE("-- NM_RETURN %p\n", this);
2701 break;
2702 case HDN_ENDTRACKW:
2703 TRACE("-- HDN_ENDTRACKW %p\n", this);
2704 //nColumn1 = m_ListView.GetColumnWidth(0);
2705 //nColumn2 = m_ListView.GetColumnWidth(1);
2706 break;
2707 case LVN_DELETEITEM:
2708 TRACE("-- LVN_DELETEITEM %p\n", this);
2709 /*delete the pidl because we made a copy of it*/
2710 SHFree(reinterpret_cast<LPVOID>(lpnmlv->lParam));
2711 break;
2712 case LVN_DELETEALLITEMS:
2713 TRACE("-- LVN_DELETEALLITEMS %p\n", this);
2714 return FALSE;
2715 case LVN_INSERTITEM:
2716 TRACE("-- LVN_INSERTITEM (STUB)%p\n", this);
2717 break;
2718 case LVN_ITEMACTIVATE:
2719 TRACE("-- LVN_ITEMACTIVATE %p\n", this);
2720 OpenSelectedItems(((NMITEMACTIVATE *)lpnmh)->uKeyFlags & LVKF_ALT ? "properties" : NULL);
2721 break;
2722 case LVN_COLUMNCLICK:
2723 {
2724 UINT foldercol = MapListColumnToFolderColumn(lpnmlv->iSubItem);
2725 HRESULT hr = S_FALSE;
2726 if (m_pSDParent)
2727 hr = m_pSDParent->ColumnClick(foldercol);
2728 if (hr != S_OK)
2729 hr = _DoFolderViewCB(SFVM_COLUMNCLICK, foldercol, 0);
2730 if (hr != S_OK)
2731 _Sort(lpnmlv->iSubItem);
2732 break;
2733 }
2734 case LVN_GETDISPINFOA:
2735 case LVN_GETDISPINFOW:
2736 TRACE("-- LVN_GETDISPINFO %p\n", this);
2737 pidl = _PidlByItem(lpdi->item);
2738
2739 if (lpdi->item.mask & LVIF_TEXT) /* text requested */
2740 {
2743 break;
2744
2745 if (lpnmh->code == LVN_GETDISPINFOA)
2746 {
2747 /* shouldn't happen */
2748 NMLVDISPINFOA *lpdiA = (NMLVDISPINFOA *)lpnmh;
2749 StrRetToStrNA( lpdiA->item.pszText, lpdiA->item.cchTextMax, &sd.str, NULL);
2750 TRACE("-- text=%s\n", lpdiA->item.pszText);
2751 }
2752 else /* LVN_GETDISPINFOW */
2753 {
2754 StrRetToStrNW( lpdi->item.pszText, lpdi->item.cchTextMax, &sd.str, NULL);
2755 TRACE("-- text=%s\n", debugstr_w(lpdi->item.pszText));
2756 }
2757 }
2758 if (lpdi->item.mask & LVIF_IMAGE)
2759 {
2761 }
2762 if (lpdi->item.mask & LVIF_STATE)
2763 {
2764 if ((lpdi->item.stateMask & LVIS_CUT) && GetItemAttributes(pidl, SFGAO_HIDDEN | SFGAO_GHOSTED))
2765 lpdi->item.state |= LVIS_CUT;
2766 }
2767 lpdi->item.mask |= LVIF_DI_SETITEM;
2768 break;
2769 case LVN_ITEMCHANGED:
2770 TRACE("-- LVN_ITEMCHANGED %p\n", this);
2771 if ((lpnmlv->uOldState ^ lpnmlv->uNewState) & (LVIS_SELECTED | LVIS_FOCUSED))
2772 {
2773 OnStateChange(CDBOSC_SELCHANGE); // browser will get the IDataObject
2774 // FIXME: Use LVIS_DROPHILITED instead in drag_notify_subitem
2776 {
2779 }
2780 _DoFolderViewCB(SFVM_SELECTIONCHANGED, NULL/* FIXME */, NULL/* FIXME */);
2781 }
2782 break;
2783 case LVN_BEGINDRAG:
2784 case LVN_BEGINRDRAG:
2785 TRACE("-- LVN_BEGINDRAG\n");
2786 if (GetSelections())
2787 {
2789 DWORD dwAttributes = SFGAO_CANCOPY | SFGAO_CANLINK;
2790 DWORD dwEffect = DROPEFFECT_MOVE;
2791
2792 if (SUCCEEDED(m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, m_apidl, IID_NULL_PPV_ARG(IDataObject, &pda))))
2793 {
2795
2796 if (SUCCEEDED(m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &dwAttributes)))
2797 dwEffect |= dwAttributes & (SFGAO_CANCOPY | SFGAO_CANLINK);
2798
2800 if (SUCCEEDED(pda->QueryInterface(IID_PPV_ARG(IAsyncOperation, &piaso))))
2801 piaso->SetAsyncMode(TRUE);
2802
2803 DWORD dwEffect2;
2804
2805 m_pSourceDataObject = pda;
2806 m_ptFirstMousePos = params->ptAction;
2809
2810 HIMAGELIST big_icons, small_icons;
2811 Shell_GetImageLists(&big_icons, &small_icons);
2812 PCUITEMID_CHILD pidl = _PidlByItem(params->iItem);
2813 int iIcon = SHMapPIDLToSystemImageListIndex(m_pSFParent, pidl, 0);
2814 POINT ptItem;
2815 m_ListView.GetItemPosition(params->iItem, &ptItem);
2816
2817 ImageList_BeginDrag(big_icons, iIcon, params->ptAction.x - ptItem.x, params->ptAction.y - ptItem.y);
2818 DoDragDrop(pda, this, dwEffect, &dwEffect2);
2820 }
2821 }
2822 break;
2824 {
2825 TRACE("-- LVN_BEGINLABELEDITW %p\n", this);
2827 pidl = _PidlByItem(lpdi->item);
2828 DWORD fAttr = pidl ? GetItemAttributes(pidl, SFGAO_CANRENAME | SFGAO_FOLDER | SFGAO_FILESYSTEM) : 0;
2829 if (!hEdit || !(fAttr & SFGAO_CANRENAME))
2830 {
2831 MessageBeep(0xffffffff);
2832 return TRUE;
2833 }
2834
2835 WCHAR szName[MAX_PATH], *pszText = lpdi->item.pszText;
2836 if (SUCCEEDED(DisplayNameOfW(m_pSFParent, pidl, SHGDN_FOREDITING | SHGDN_INFOLDER,
2838 {
2839 pszText = szName;
2840 ::SetWindowText(hEdit, pszText);
2841 }
2842
2843 // smartass-renaming: See CORE-15242
2844 if (!(fAttr & SFGAO_FOLDER) && (fAttr & SFGAO_FILESYSTEM) &&
2845 (lpdi->item.mask & LVIF_TEXT) && !SelectExtOnRename())
2846 {
2848 WCHAR szFullPath[MAX_PATH];
2849 if (SHGetPathFromIDListW(pidlFull, szFullPath) && !SHELL_FS_HideExtension(szFullPath))
2850 {
2851 LPWSTR pchDotExt = PathFindExtensionW(pszText);
2852 ::PostMessageW(hEdit, EM_SETSEL, 0, pchDotExt - pszText);
2854 }
2855 }
2856
2857 INT cchLimit = 0;
2858 _DoFolderViewCB(SFVM_GETNAMELENGTH, (WPARAM)pidl, (LPARAM)&cchLimit);
2859 if (cchLimit)
2860 ::SendMessageW(hEdit, EM_SETLIMITTEXT, cchLimit, 0);
2862 m_isEditing = TRUE;
2863 return FALSE;
2864 }
2865 case LVN_ENDLABELEDITW:
2866 {
2867 TRACE("-- LVN_ENDLABELEDITW %p\n", this);
2869 if (!lpdi->item.pszText)
2870 return TRUE;
2871
2872 pidl = _PidlByItem(lpdi->item);
2873 // We have to copy the old PIDL because SetNameOf might generate a SHCNE_UPDATEITEM
2874 // and that notification can cause us to call LV_UpdateItem and free the old PIDL too soon.
2876 if (!pidlOld)
2877 {
2879 return FALSE;
2880 }
2881 PITEMID_CHILD pidlNew = NULL;
2882 HRESULT hr = m_pSFParent->SetNameOf(0, pidlOld, lpdi->item.pszText, SHGDN_INFOLDER, &pidlNew);
2883 if (SUCCEEDED(hr) && pidlNew)
2884 {
2885 int iNew = LV_FindItemByPidl(pidlNew);
2886 if (iNew != lpdi->item.iItem && iNew >= 0)
2887 ILFree(pidlNew);// A SHCNE has updated the item already
2888 else if (!LV_UpdateItem(lpdi->item.iItem, pidlNew))
2889 ILFree(pidlNew);
2890 OnStateChange(CDBOSC_RENAME);
2891 }
2892 else
2893 {
2894 ::PostMessageW(m_ListView, LVM_EDITLABEL, lpdi->item.iItem, 0); // Renaming failed, let the user try again
2895 }
2896 return FALSE;
2897 }
2898 default:
2899 TRACE("-- %p WM_COMMAND %x unhandled\n", this, lpnmh->code);
2900 break;
2901 }
2902
2903 return 0;
2904}
#define SHV_UPDATESTATUSBAR
Definition: CDefView.cpp:78
static BOOL SelectExtOnRename(void)
Definition: CDefView.cpp:2639
static HRESULT WINAPI DisplayNameOfW(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwFlags, _Out_ LPWSTR pszBuf, _In_ UINT cchBuf)
Definition: CFindFolder.cpp:15
#define SFVM_GETNAMELENGTH
#define SFVM_SELECTIONCHANGED
LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2515
HRESULT GetDetailsByListColumn(PCUITEMID_CHILD pidl, UINT ListCol, SHELLDETAILS &sd)
Definition: CDefView.cpp:1082
HRESULT OpenSelectedItems(PCSTR pszVerb=NULL)
Definition: CDefView.cpp:2207
BOOL WINAPI ImageList_BeginDrag(HIMAGELIST himlTrack, INT iTrack, INT dxHotspot, INT dyHotspot)
Definition: imagelist.c:648
LPWSTR WINAPI PathFindExtensionW(const WCHAR *path)
Definition: path.c:1217
HRESULT WINAPI DoDragDrop(IDataObject *pDataObject, IDropSource *pDropSource, DWORD dwOKEffect, DWORD *pdwEffect)
Definition: ole2.c:753
BOOL SHELL_FS_HideExtension(LPCWSTR szPath)
Definition: CFSFolder.cpp:1453
#define debugstr_w
Definition: kernel32.h:32
WORD unused[29]
Definition: crypt.c:1155
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:817
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1490
static const WCHAR szName[]
Definition: powrprof.c:45
#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 ListView_GetEditControl(hwndLV)
Definition: commctrl.h:2548
#define LVN_DELETEALLITEMS
Definition: commctrl.h:3139
#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
#define LVM_EDITLABEL
Definition: commctrl.h:2543
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 LVKF_ALT
Definition: commctrl.h:3060
#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:3048
BOOL WINAPI StrRetToStrNA(LPSTR dest, DWORD len, LPSTRRET src, const ITEMIDLIST *pidl)
Definition: shellstring.c:54
#define SHELL_ErrorBox
Definition: shellutils.h:126
#define SFVM_COLUMNCLICK
Definition: shlobj.h:1320
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:3235
HWND hwndFrom
Definition: winuser.h:3233
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 MessageBeep(_In_ UINT uType)
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
#define EM_SETLIMITTEXT
Definition: winuser.h:2030
struct tagNMHDR * LPNMHDR
#define EM_SETSEL
Definition: winuser.h:2037
#define SetWindowText
Definition: winuser.h:5942
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ OnPrintClient()

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

Definition at line 1710 of file CDefView.cpp.

1711{
1712 HDC hDC = (HDC)wParam;
1713
1714 RECT rc;
1716
1718 {
1719 BITMAP bm;
1720 if (::GetObject(m_viewinfo_data.hbmBack, sizeof(BITMAP), &bm))
1721 {
1722 INT dx = -(::GetScrollPos(m_ListView, SB_HORZ) % bm.bmWidth);
1723 INT dy = -(::GetScrollPos(m_ListView, SB_VERT) % bm.bmHeight);
1724 DrawTileBitmap(hDC, &rc, m_viewinfo_data.hbmBack, bm.bmWidth, bm.bmHeight, dx, dy);
1725 }
1726 }
1727 else
1728 {
1730 }
1731
1732 bHandled = TRUE;
1733
1734 return TRUE;
1735}
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:1689
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:929
int WINAPI GetScrollPos(_In_ HWND, _In_ int)

◆ OnSetFocus()

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

Definition at line 2515 of file CDefView.cpp.

2516{
2517 TRACE("%p\n", this);
2518
2519 /* Tell the browser one of our windows has received the focus. This
2520 should always be done before merging menus (OnActivate merges the
2521 menus) if one of our windows has the focus.*/
2522
2523 m_pShellBrowser->OnViewWindowActive(this);
2525
2526 /* Set the focus to the listview */
2527 m_ListView.SetFocus();
2528
2529 /* Notify the ICommDlgBrowser interface */
2530 OnStateChange(CDBOSC_SETFOCUS);
2531
2532 return 0;
2533}

Referenced by OnNotify().

◆ OnSettingChange()

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

Definition at line 3037 of file CDefView.cpp.

3038{
3039 /* Wallpaper setting affects drop shadows effect */
3040 if (wParam == SPI_SETDESKWALLPAPER || wParam == 0)
3042
3044 UINT ListExBits = GetItemActivateFlags();
3046 (lParam && !lstrcmpiW((PWSTR)lParam, REGSTR_PATH_EXPLORER L"\\IconUnderline")))
3047 {
3049 ListExBits |= SHELL_GetIconUnderlineFlags();
3050 }
3051 m_ListView.SetExtendedListViewStyle(ListExBits, ListExMask);
3052 m_ListView.SendMessage(uMsg, wParam, lParam);
3053 return S_OK;
3054}
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4265
#define LVS_EX_UNDERLINECOLD
Definition: commctrl.h:2746
#define LVS_EX_UNDERLINEHOT
Definition: commctrl.h:2745
uint16_t * PWSTR
Definition: typedefs.h:56
#define SPI_SETDESKWALLPAPER
Definition: winuser.h:1380
#define SPI_GETICONTITLELOGFONT
Definition: winuser.h:1391

◆ OnShowWindow()

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

Definition at line 1639 of file CDefView.cpp.

1640{
1641 if (m_ListView.IsWindow())
1642 m_ListView.UpdateWindow();
1643 bHandled = FALSE;
1644 return 0;
1645}

◆ OnSize()

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

Definition at line 2416 of file CDefView.cpp.

2417{
2418 WORD wWidth, wHeight;
2419
2420 wWidth = LOWORD(lParam);
2421 wHeight = HIWORD(lParam);
2422
2423 TRACE("%p width=%u height=%u\n", this, wWidth, wHeight);
2424
2425 // WM_SIZE can come before WM_CREATE
2426 if (!m_ListView)
2427 return 0;
2428
2429 /* Resize the ListView to fit our window */
2430 ::MoveWindow(m_ListView, 0, 0, wWidth, wHeight, TRUE);
2431
2433
2436
2437 return 0;
2438}
#define SFVM_SIZE
Definition: shlobj.h:1344
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)

◆ OnStateChange()

HRESULT CDefView::OnStateChange ( UINT  uFlags)

Definition at line 695 of file CDefView.cpp.

696{
698
699 if (m_pCommDlgBrowser.p != NULL)
700 {
701 TRACE("ICommDlgBrowser::OnStateChange flags=%x\n", uFlags);
702 ret = m_pCommDlgBrowser->OnStateChange(this, uFlags);
703 TRACE("--\n");
704 }
705
706 return ret;
707}

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

◆ OnSysColorChange()

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

Definition at line 1737 of file CDefView.cpp.

1738{
1739 /* Update desktop labels color */
1741
1742 /* Forward WM_SYSCOLORCHANGE to common controls */
1743 return m_ListView.SendMessageW(uMsg, 0, 0);
1744}

◆ OnUpdateStatusbar()

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

Definition at line 831 of file CDefView.cpp.

832{
835 return 0;
836}

◆ OpenSelectedItems()

HRESULT CDefView::OpenSelectedItems ( PCSTR  pszVerb = NULL)

Definition at line 2207 of file CDefView.cpp.

2208{
2209 HMENU hMenu;
2210 UINT uCommand;
2211 HRESULT hResult;
2212
2213 if (m_ListView.GetSelectedCount() == 0)
2214 return S_OK;
2215
2216 hResult = OnDefaultCommand();
2217 if (hResult == S_OK)
2218 return hResult;
2219
2220 hMenu = CreatePopupMenu();
2221 if (!hMenu)
2222 return E_FAIL;
2223
2226 MenuCleanup _(pCM, hMenu);
2227 if (FAILED_UNEXPECTEDLY(hResult))
2228 return hResult;
2229
2230 UINT cmf = CMF_DEFAULTONLY | GetContextMenuFlags(m_pShellBrowser, 0);
2231 hResult = pCM->QueryContextMenu(hMenu, 0, DVIDM_CONTEXTMENU_FIRST, DVIDM_CONTEXTMENU_LAST, cmf);
2232 if (FAILED_UNEXPECTEDLY(hResult))
2233 return hResult;
2234
2235 uCommand = GetMenuDefaultItem(hMenu, FALSE, 0);
2236 if (uCommand == (UINT)-1 && !pszVerb)
2237 {
2238 ERR("GetMenuDefaultItem returned -1\n");
2239 return E_FAIL;
2240 }
2241 if (!pszVerb)
2242 pszVerb = MAKEINTRESOURCEA(uCommand);
2243
2244 InvokeContextMenuCommand(pCM, pszVerb, NULL);
2245
2246 return hResult;
2247}
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 4687 of file CDefView.cpp.

4688{
4689 TRACE("(%p)\n", this);
4690
4691 if (fEscapePressed)
4692 return DRAGDROP_S_CANCEL;
4693 else if (!(grfKeyState & MK_LBUTTON) && !(grfKeyState & MK_RBUTTON))
4694 return DRAGDROP_S_DROP;
4695 else
4696 return S_OK;
4697}
#define DRAGDROP_S_DROP
Definition: winerror.h:2646
#define DRAGDROP_S_CANCEL
Definition: winerror.h:2647
#define MK_RBUTTON
Definition: winuser.h:2387

◆ QueryService()

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

Implements IServiceProvider.

Definition at line 4761 of file CDefView.cpp.

4762{
4763 if (IsEqualIID(guidService, SID_SFolderView))
4764 return QueryInterface(riid, ppvObject);
4766}
_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 4185 of file CDefView.cpp.

4186{
4187 FIXME("(%p)->(%p(%s) 0x%08x %p %p\n",
4188 this, pguidCmdGroup, debugstr_guid(pguidCmdGroup), cCmds, prgCmds, pCmdText);
4189
4190 if (!prgCmds)
4191 return E_INVALIDARG;
4192
4193 for (UINT i = 0; i < cCmds; i++)
4194 {
4195 FIXME("\tprgCmds[%d].cmdID = %d\n", i, prgCmds[i].cmdID);
4196 prgCmds[i].cmdf = 0;
4197 }
4198
4199 return OLECMDERR_E_UNKNOWNGROUP;
4200}

◆ QuerySupport()

HRESULT STDMETHODCALLTYPE CDefView::QuerySupport ( UINT support)
override

Definition at line 4173 of file CDefView.cpp.

4174{
4175 TRACE("(%p)->(%p)\n", this, support);
4176 return S_OK;
4177}

◆ Rearrange()

HRESULT STDMETHODCALLTYPE CDefView::Rearrange ( LPARAM  sort)
override

Definition at line 3947 of file CDefView.cpp.

3948{
3949 _Sort(LOWORD(sort & SHCIDS_COLUMNMASK));
3950 return S_OK;
3951}

◆ Refresh()

HRESULT WINAPI CDefView::Refresh ( )
override

Implements IShellView.

Definition at line 3206 of file CDefView.cpp.

3207{
3208 TRACE("(%p)\n", this);
3209
3211
3213 FillList();
3214
3215 return S_OK;
3216}

Referenced by OnChangeNotify(), and OnCommand().

◆ RefreshGhostedState()

void CDefView::RefreshGhostedState ( )

Definition at line 3136 of file CDefView.cpp.

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

Referenced by SetClipboard().

◆ RefreshObject()

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

Definition at line 4034 of file CDefView.cpp.

4035{
4036 FIXME("(%p)->(%p %p) stub\n", this, pidl, item);
4037 return E_NOTIMPL;
4038}

◆ RemoveObject()

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

Definition at line 3991 of file CDefView.cpp.

3992{
3993 TRACE("(%p)->(%p %p)\n", this, pidl, item);
3994
3995 if (!m_ListView)
3996 {
3997 ERR("!m_ListView\n");
3998 return E_FAIL;
3999 }
4000
4001 if (pidl)
4002 {
4005 }
4006 else
4007 {
4008 *item = 0;
4010 }
4011
4012 return S_OK;
4013}

◆ SaveViewState() [1/2]

HRESULT WINAPI CDefView::SaveViewState ( )
override

Implements IShellView.

Definition at line 3467 of file CDefView.cpp.

3468{
3470 return SaveViewState(NULL);
3471 return S_FALSE;
3472}

Referenced by Exec(), and SaveViewState().

◆ SaveViewState() [2/2]

HRESULT CDefView::SaveViewState ( IStream pStream)

Definition at line 3394 of file CDefView.cpp.

3395{
3396 if (!m_ListView.m_hWnd)
3397 return E_UNEXPECTED;
3400 cvs.SortColId = sortcol >= 0 ? (WORD)sortcol : 0;
3402 PERSISTCOLUMNS cols;
3404 cols.Count = 0;
3405 LVCOLUMN lvc;
3406 lvc.mask = LVCF_WIDTH;
3407 for (UINT i = 0, j = 0; i < PERSISTCOLUMNS::MAXCOUNT && ListView_GetColumn(m_ListView, j, &lvc); ++j)
3408 {
3410 if (SUCCEEDED(hr))
3411 {
3412 cols.Columns[i] = MAKELONG(hr, lvc.cx);
3413 cols.Count = ++i;
3414 }
3415 }
3416 UINT cbColumns = FIELD_OFFSET(PERSISTCOLUMNS, Columns) + (sizeof(*cols.Columns) * cols.Count);
3418
3419 IPropertyBag *pPB;
3420 HRESULT hr = S_OK;
3421 if (pStream)
3422 {
3423 pStream->AddRef();
3424 goto stream;
3425 }
3427 if (SUCCEEDED(hr))
3428 {
3429 UINT uViewMode;
3430 GetCurrentViewMode(&uViewMode);
3431 hr = SHPropertyBag_WriteDWORD(pPB, L"Mode", uViewMode);
3433 SHPropertyBag_WriteDWORD(pPB, L"Sort", cvs.SortColId);
3434 SHPropertyBag_WriteDWORD(pPB, L"SortDir", cvs.SortDir);
3435 pStream = cols.Count ? SHCreateMemStream((LPBYTE)&cols, cbColumns) : NULL;
3436 if (!pStream || FAILED(SHPropertyBag_WriteStream(pPB, L"ColInfo", pStream)))
3437 SHPropertyBag_Delete(pPB, L"ColInfo");
3438#if 0 // TODO
3440 memcpy(name, L"ItemPos", sizeof(L"ItemPos"));
3441 if (SHGetPerScreenResName(name + 7, _countof(name) - 7, 0))
3442 {
3443 if (GetAutoArrange() == S_FALSE)
3444 // TODO: Save listview item positions
3445 else
3447 }
3448#endif
3449 pPB->Release();
3450 }
3451 else if (SUCCEEDED(hr = (m_pShellBrowser ? m_pShellBrowser->GetViewStateStream(STGM_WRITE, &pStream) : E_UNEXPECTED)))
3452 {
3453 stream:
3454 ULONG written;
3455 cvs.Signature = cvs.SIG;
3457 hr = pStream->Write(&cvs, sizeof(cvs), &written);
3458 if (SUCCEEDED(hr))
3459 hr = pStream->Write(&cols, cbColumns, &written);
3460 }
3461 // TODO: else if (SUCCEEDED(_DoFolderViewCB(SFVM_GETCOLUMNSTREAM)))
3462 if (pStream)
3463 pStream->Release();
3464 return hr;
3465}
int sortcol
Definition: sort.c:23
static const COLUMN_LIST Columns[]
Definition: listview.c:19
STDMETHOD() GetCurrentViewMode(UINT *pViewMode) override
Definition: CDefView.cpp:3605
void UpdateFolderViewFlags()
Definition: CDefView.cpp:3475
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 4167 of file CDefView.cpp.

4168{
4169 FIXME("(%p)->(%d) stub\n", this, flags);
4170 return E_NOTIMPL;
4171}

◆ SelectAndPositionItem() [1/2]

HRESULT CDefView::SelectAndPositionItem ( int  Idx,
UINT  fSVSI,
POINT ppt 
)

Definition at line 3928 of file CDefView.cpp.

3929{
3930 if (Idx == -1)
3931 return fSVSI == SVSI_DESELECTOTHERS ? SelectItem(-2, fSVSI) : E_INVALIDARG;
3932 if (ppt)
3933 m_ListView.SetItemPosition(Idx, ppt);
3934 return SelectItem(Idx, fSVSI); // After SetItemPosition for SVSI_ENSUREVISIBLE
3935}

Referenced by SelectAndPositionItem(), and SelectAndPositionItems().

◆ SelectAndPositionItem() [2/2]

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

Definition at line 3937 of file CDefView.cpp.

3938{
3939 if (!item)
3940 return SelectAndPositionItem(-1, flags, point);
3941 int idx = LV_FindItemByPidl(item);
3942 return idx != -1 ? SelectAndPositionItem(idx, flags, point) : S_FALSE;
3943}
HRESULT SelectAndPositionItem(int Idx, UINT fSVSI, POINT *ppt)
Definition: CDefView.cpp:3928
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 3791 of file CDefView.cpp.

3792{
3794 m_ListView.SetItemState(-1, 0, LVIS_SELECTED); // Reset the selection
3795 for (UINT i = 0 ; i < cidl; i++)
3796 {
3797 int lvIndex = LV_FindItemByPidl(apidl[i]);
3798 if (lvIndex != -1)
3799 SelectAndPositionItem(lvIndex, dwFlags, apt ? &apt[i] : NULL);
3800 }
3801 return S_OK;
3802}
_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 3760 of file CDefView.cpp.

3761{
3762 LVITEMW lvItem;
3763
3764 TRACE("(%p)->(%d, %x)\n", this, iItem, dwFlags);
3765
3766 lvItem.state = 0;
3767 lvItem.stateMask = LVIS_SELECTED;
3768
3769 if (dwFlags & SVSI_ENSUREVISIBLE)
3770 m_ListView.EnsureVisible(iItem, 0);
3771
3772 /* all items */
3773 if (dwFlags & SVSI_DESELECTOTHERS)
3775
3776 /* this item */
3777 if (dwFlags & SVSI_SELECT)
3778 lvItem.state |= LVIS_SELECTED;
3779
3780 if (dwFlags & SVSI_FOCUSED)
3781 lvItem.stateMask |= LVIS_FOCUSED;
3782
3783 m_ListView.SetItemState(iItem, lvItem.state, lvItem.stateMask);
3784
3785 if ((dwFlags & SVSI_EDIT) == SVSI_EDIT)
3786 m_ListView.EditLabel(iItem);
3787
3788 return S_OK;
3789}
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 3490 of file CDefView.cpp.

3491{
3492 int i;
3493
3494 TRACE("(%p)->(pidl=%p, 0x%08x) stub\n", this, pidl, uFlags);
3495
3496 if (!m_ListView)
3497 {
3498 ERR("!m_ListView\n");
3499 return E_FAIL;
3500 }
3501
3502 i = LV_FindItemByPidl(pidl);
3503 if (i == -1)
3504 return S_OK;
3505
3506 LVITEMW lvItem = {0};
3507 lvItem.mask = LVIF_STATE;
3509
3510 while (m_ListView.GetItem(&lvItem))
3511 {
3512 if (lvItem.iItem == i)
3513 {
3514 if (uFlags & SVSI_SELECT)
3515 lvItem.state |= LVIS_SELECTED;
3516 else
3517 lvItem.state &= ~LVIS_SELECTED;
3518
3519 if (uFlags & SVSI_FOCUSED)
3520 lvItem.state |= LVIS_FOCUSED;
3521 else
3522 lvItem.state &= ~LVIS_FOCUSED;
3523 }
3524 else
3525 {
3526 if (uFlags & SVSI_DESELECTOTHERS)
3527 {
3528 lvItem.state &= ~LVIS_SELECTED;
3529 }
3530 lvItem.state &= ~LVIS_FOCUSED;
3531 }
3532
3533 m_ListView.SetItem(&lvItem);
3534 lvItem.iItem++;
3535 }
3536
3537 if (uFlags & SVSI_ENSUREVISIBLE)
3539
3540 if((uFlags & SVSI_EDIT) == SVSI_EDIT)
3542
3543 return S_OK;
3544}

Referenced by drag_notify_subitem(), HandleRename(), OnContextMenu(), and SelectAndPositionItem().

◆ SetAdvise()

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

Implements IViewObject.

Definition at line 4730 of file CDefView.cpp.

4731{
4732 FIXME("partial stub: %p 0x%08x 0x%08x %p\n", this, aspects, advf, pAdvSink);
4733
4734 // FIXME: we set the AdviseSink, but never use it to send any advice
4735 m_pAdvSink = pAdvSink;
4736 m_dwAspects = aspects;
4737 m_dwAdvf = advf;
4738
4739 return S_OK;
4740}

◆ SetAutomationObject()

HRESULT STDMETHODCALLTYPE CDefView::SetAutomationObject ( IDispatch disp)
override

Definition at line 4179 of file CDefView.cpp.

4180{
4181 FIXME("(%p)->(%p) stub\n", this, disp);
4182 return E_NOTIMPL;
4183}

◆ SetCallback()

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

Definition at line 4155 of file CDefView.cpp.

4156{
4157 if (old_cb)
4158 *old_cb = m_pShellFolderViewCB.Detach();
4159
4160 m_pShellFolderViewCB = new_cb;
4162 if (new_cb)
4163 new_cb->QueryInterface(IID_PPV_ARG(IFolderFilter, &m_pFolderFilter));
4164 return S_OK;
4165}
T * Detach()
Definition: atlcomcli.h:186

◆ SetClipboard()

HRESULT STDMETHODCALLTYPE CDefView::SetClipboard ( BOOL  move)
override

Definition at line 4119 of file CDefView.cpp.

4120{
4121 if (!move)
4122 return S_OK;
4123
4124 UINT CutCount = 0;
4125 for (int i = -1; (i = m_ListView.GetNextItem(i, LVNI_SELECTED)) != -1;)
4126 {
4127 if (!CutCount++)
4128 {
4129 // Turn off the LVIS_CUT LVM_SETCALLBACKMASK optimization
4130 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, m_ListView.SendMessageW(LVM_GETCALLBACKMASK, 0, 0) & ~LVIS_CUT, 0);
4132 }
4134 }
4135 if (CutCount)
4136 {
4138 m_HasCutItems = true;
4139 }
4140 return S_OK;
4141}
void RefreshGhostedState()
Definition: CDefView.cpp:3136

◆ SetCurrentViewMode()

HRESULT STDMETHODCALLTYPE CDefView::SetCurrentViewMode ( UINT  ViewMode)
override

Implements IFolderView.

Definition at line 3616 of file CDefView.cpp.

3617{
3618 DWORD dwStyle;
3619 TRACE("(%p)->(%u), stub\n", this, ViewMode);
3620
3621 /* It's not redundant to check FVM_AUTO because it's a (UINT)-1 */
3622 if (((INT)ViewMode < FVM_FIRST || (INT)ViewMode > FVM_LAST) && ((INT)ViewMode != FVM_AUTO))
3623 return E_INVALIDARG;
3624
3625 /* Windows before Vista uses LVM_SETVIEW and possibly
3626 LVM_SETEXTENDEDLISTVIEWSTYLE to set the style of the listview,
3627 while later versions seem to accomplish this through other
3628 means. */
3629 switch (ViewMode)
3630 {
3631 case FVM_ICON: dwStyle = LVS_ICON; break;
3632 case FVM_SMALLICON: dwStyle = LVS_SMALLICON; break;
3633 case FVM_LIST: dwStyle = LVS_LIST; break;
3634 case FVM_DETAILS: dwStyle = LVS_REPORT; break;
3635 default:
3636 FIXME("ViewMode %d not implemented\n", ViewMode);
3637 dwStyle = LVS_LIST;
3638 break;
3639 }
3640
3641 m_ListView.ModifyStyle(LVS_TYPEMASK, dwStyle);
3642
3643 /* This will not necessarily be the actual mode set above.
3644 This mimics the behavior of Windows XP. */
3645 m_FolderSettings.ViewMode = ViewMode;
3646 CheckToolbar();
3647 return S_OK;
3648}

Referenced by OnCommand().

◆ SetItemPos()

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

Definition at line 4107 of file CDefView.cpp.

4108{
4109 FIXME("(%p)->(%p %p) stub\n", this, pidl, pt);
4110 return E_NOTIMPL;
4111}

◆ SetObjectCount()

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

Definition at line 4022 of file CDefView.cpp.

4023{
4024 FIXME("(%p)->(%d %x) stub\n", this, count, flags);
4025 return E_NOTIMPL;
4026}

◆ SetPoints()

HRESULT STDMETHODCALLTYPE CDefView::SetPoints ( IDataObject obj)
override

Definition at line 4143 of file CDefView.cpp.

4144{
4145 FIXME("(%p)->(%p) stub\n", this, obj);
4146 return E_NOTIMPL;
4147}

◆ SetRedraw()

HRESULT STDMETHODCALLTYPE CDefView::SetRedraw ( BOOL  redraw)
override

Definition at line 4040 of file CDefView.cpp.

4041{
4042 TRACE("(%p)->(%d)\n", this, redraw);
4043 if (m_ListView)
4045 return S_OK;
4046}
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 3161 of file CDefView.cpp.

3162{
3163 if (m_isEditing)
3164 return S_FALSE;
3165
3166 if (lpmsg->message >= WM_KEYFIRST && lpmsg->message <= WM_KEYLAST)
3167 {
3168 if (::TranslateAcceleratorW(m_hWnd, m_hAccel, lpmsg) != 0)
3169 return S_OK;
3170
3171 TRACE("-- key=0x%04lx\n", lpmsg->wParam);
3172 }
3173
3174 return m_pShellBrowser ? m_pShellBrowser->TranslateAcceleratorSB(lpmsg, 0) : S_FALSE;
3175}
#define WM_KEYFIRST
Definition: winuser.h:1733
int WINAPI TranslateAcceleratorW(_In_ HWND, _In_ HACCEL, _In_ LPMSG)
#define WM_KEYLAST
Definition: winuser.h:1747

◆ UIActivate()

HRESULT WINAPI CDefView::UIActivate ( UINT  uState)
override

Implements IShellView.

Definition at line 3183 of file CDefView.cpp.

3184{
3185 TRACE("(%p)->(state=%x)\n", this, uState);
3186
3187 // don't do anything if the state isn't changing
3188 if (m_uState == uState)
3189 return S_OK;
3190
3191 // OnActivate handles the menu merging and internal state
3192 DoActivate(uState);
3193
3194 // only do this if we are active
3195 if (uState != SVUIA_DEACTIVATE)
3196 {
3198
3199 // Set the text for the status bar
3201 }
3202
3203 return S_OK;
3204}

Referenced by DestroyViewWindow().

◆ Unfreeze()

HRESULT WINAPI CDefView::Unfreeze ( DWORD  dwFreeze)
override

Implements IViewObject.

Definition at line 4724 of file CDefView.cpp.

4725{
4726 FIXME("Stub: this=%p\n", this);
4727 return E_NOTIMPL;
4728}

◆ UpdateFolderViewFlags()

void CDefView::UpdateFolderViewFlags ( )

◆ UpdateListColors()

void CDefView::UpdateListColors ( )

Definition at line 940 of file CDefView.cpp.

941{
943 {
944 /* Check if drop shadows option is enabled */
945 BOOL bDropShadow = FALSE;
946 DWORD cbDropShadow = sizeof(bDropShadow);
947
948 /*
949 * The desktop ListView always take the default desktop colours, by
950 * remaining transparent and letting user32/win32k paint itself the
951 * desktop background color, if any.
952 */
954
955 SHGetValueW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
956 L"ListviewShadow", NULL, &bDropShadow, &cbDropShadow);
957 if (bDropShadow)
958 {
959 /* Set the icon background transparent */
961 m_ListView.SetTextColor(RGB(255, 255, 255));
962 m_ListView.SetExtendedListViewStyle(LVS_EX_TRANSPARENTSHADOWTEXT, LVS_EX_TRANSPARENTSHADOWTEXT);
963 }
964 else
965 {
966 /* Set the icon background as the same colour as the desktop */
968 m_ListView.SetTextBkColor(crDesktop);
969 if (GetRValue(crDesktop) + GetGValue(crDesktop) + GetBValue(crDesktop) > 128 * 3)
970 m_ListView.SetTextColor(RGB(0, 0, 0));
971 else
972 m_ListView.SetTextColor(RGB(255, 255, 255));
973 m_ListView.SetExtendedListViewStyle(0, LVS_EX_TRANSPARENTSHADOWTEXT);
974 }
975 }
976 else
977 {
980
981 // Background is painted by the parent via WM_PRINTCLIENT
982 m_ListView.SetExtendedListViewStyle(LVS_EX_TRANSPARENTBKGND, LVS_EX_TRANSPARENTBKGND);
983 }
984}
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:932
#define COLOR_DESKTOP
Definition: winuser.h:925

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 4028 of file CDefView.cpp.

4029{
4030 FIXME("(%p)->(%p %p %p) stub\n", this, pidl_old, pidl_new, item);
4031 return E_NOTIMPL;
4032}

◆ UpdateStatusbar()

void CDefView::UpdateStatusbar ( )

Definition at line 733 of file CDefView.cpp.

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

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

◆ UpdateStatusbarLocation()

void CDefView::UpdateStatusbarLocation ( )

Definition at line 805 of file CDefView.cpp.

806{
807 LRESULT lResult;
808 LPARAM pIcon = NULL;
809 WCHAR szPartText[MAX_PATH];
810 *szPartText = 0;
812 {
813 // If we are in a Recycle Bin then show no text for the location part
814 int csidl;
815 if (!IsSpecialFolder(csidl) || (csidl != CSIDL_NETWORK && csidl != CSIDL_BITBUCKET))
816 {
817 LoadStringW(shell32_hInstance, IDS_MYCOMPUTER, szPartText, _countof(szPartText));
818 pIcon = (LPARAM)m_hMyComputerIcon;
819 }
820 /*else if (csidl == CSIDL_NETWORK) // TODO: Figure out the type of share (My Computer/Local Intranet/Internet?)
821 {
822 ImageList_GetIconSize(ListView_GetImageList(m_ListView, LVSIL_SMALL), &x, &y);
823 pIcon = (LPARAM)LoadImage(shell32_hInstance, MAKEINTRESOURCEW(IDI_SHELL_MY_NETWORK_PLACES),
824 IMAGE_ICON, x, y, LR_SHARED);
825 }*/
826 }
827 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETICON, 2, pIcon, &lResult);
828 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETTEXT, 2, (LPARAM)szPartText, &lResult);
829}
BOOL IsSpecialFolder(int &csidl) const
Definition: CDefView.cpp:298
#define SB_SETICON
Definition: commctrl.h:1966
#define IDS_MYCOMPUTER
Definition: shresdef.h:283

Referenced by FillList(), and OnCreate().

◆ WindowProc()

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

Definition at line 528 of file CDefView.cpp.

529 {
530 CDefView *pThis;
532
533 // Must hold a reference during message handling
534 pThis = reinterpret_cast<CDefView *>(hWnd);
535 pThis->AddRef();
537 pThis->Release();
538 return result;
539 }
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 281 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 282 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 279 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 285 of file CDefView.cpp.

Referenced by CDefView(), and UpdateStatusbarLocation().

◆ 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 OnInitMenuPopup(), OnNotify(), and TranslateAccelerator().

◆ m_isFullStatusBar

bool CDefView::m_isFullStatusBar
private

◆ 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(), OnInitMenuPopup(), and OnMenuMessage().

◆ 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

Definition at line 253 of file CDefView.cpp.

Referenced by IncludeObject(), OnChangeNotify(), OnCreate(), OnDestroy(), and OnNotify().

◆ 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 278 of file CDefView.cpp.

Referenced by OnNotify(), and OnUpdateStatusbar().

◆ m_sortInfo

◆ m_SpecialFolder

signed char CDefView::m_SpecialFolder
private

Definition at line 276 of file CDefView.cpp.

Referenced by IsSpecialFolder(), and OnCreate().

◆ 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 283 of file CDefView.cpp.

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


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