ReactOS 0.4.16-dev-2491-g3dc6630
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_RefreshItem (INT iItem)
 
void LV_RefreshItems ()
 
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 *pVid, 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 bool IsSupportedFolderViewMode (int Mode)
 
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 222 of file CDefView.cpp.

Constructor & Destructor Documentation

◆ CDefView()

CDefView::CDefView ( )

Definition at line 601 of file CDefView.cpp.

601 :
602 m_ListView(),
604 m_hMenu(NULL),
609 m_uState(0),
610 m_cidl(0),
611 m_apidl(NULL),
614 m_hNotify(0),
615 m_hAccel(NULL),
616 m_dwAspects(0),
617 m_dwAdvf(0),
621 m_SpecialFolder(-1),
622 m_isFullStatusBar(true),
624 m_HasCutItems(false),
626{
633
637}
#define shell32_hInstance
HMENU m_hMenu
Definition: CDefView.cpp:247
HDPA m_LoadColumnsList
Definition: CDefView.cpp:256
bool m_ScheduledStatusbarUpdate
Definition: CDefView.cpp:280
HMENU m_hMenuArrangeModes
Definition: CDefView.cpp:248
bool m_isFullStatusBar
Definition: CDefView.cpp:279
HWND m_hWndParent
Definition: CDefView.cpp:245
DWORD m_dwAdvf
Definition: CDefView.cpp:262
DWORD m_dwAspects
Definition: CDefView.cpp:261
UINT m_cScrollDelay
Definition: CDefView.cpp:269
LISTVIEW_SORT_INFO m_sortInfo
Definition: CDefView.cpp:258
PIDLIST_ABSOLUTE m_pidlParent
Definition: CDefView.cpp:255
HMENU m_hContextMenu
Definition: CDefView.cpp:250
BOOL m_Destroyed
Definition: CDefView.cpp:284
PCUITEMID_CHILD * m_apidl
Definition: CDefView.cpp:254
HDPA m_ListToFolderColMap
Definition: CDefView.cpp:257
CLSID m_Category
Definition: CDefView.cpp:283
signed char m_SpecialFolder
Definition: CDefView.cpp:278
HICON m_hMyComputerIcon
Definition: CDefView.cpp:287
BOOL m_bmenuBarInitialized
Definition: CDefView.cpp:251
UINT m_cidl
Definition: CDefView.cpp:253
UINT m_uState
Definition: CDefView.cpp:252
BOOL m_isEditing
Definition: CDefView.cpp:277
POINT m_ptLastMousePos
Definition: CDefView.cpp:270
ULONG m_hNotify
Definition: CDefView.cpp:259
bool m_HasCutItems
Definition: CDefView.cpp:281
LONG m_iDragOverItem
Definition: CDefView.cpp:268
HMENU m_hMenuViewModes
Definition: CDefView.cpp:249
HACCEL m_hAccel
Definition: CDefView.cpp:260
FOLDERSETTINGS m_FolderSettings
Definition: CDefView.cpp:246
CListView m_ListView
Definition: CDefView.cpp:244
SFVM_CUSTOMVIEWINFO_DATA m_viewinfo_data
Definition: CDefView.cpp:285
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
HDPA WINAPI DPA_Create(INT nGrow)
Definition: dpa.c:950
#define ZeroMemory
Definition: minwinbase.h:31
#define IDI_SHELL_COMPUTER_DESKTOP
Definition: shresdef.h:688
#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:2444

◆ ~CDefView()

CDefView::~CDefView ( )

Definition at line 639 of file CDefView.cpp.

640{
641 TRACE(" destroying IShellView(%p)\n", this);
642
644
646 {
649 }
650
651 if (m_hWnd)
652 {
654 }
655
659}
#define SFVM_VIEWRELEASE
HWND m_hWnd
Definition: atlwin.h:273
STDMETHOD() DestroyViewWindow() override
Definition: CDefView.cpp:3226
HRESULT _DoFolderViewCB(UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: CDefView.cpp:4807
BOOL WINAPI DPA_Destroy(HDPA hdpa)
Definition: dpa.c:396
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:370
pKey DeleteObject()
#define TRACE(s)
Definition: solgame.cpp:4

Member Function Documentation

◆ _DoCopyToMoveToFolder()

void CDefView::_DoCopyToMoveToFolder ( BOOL  bCopy)
private

Definition at line 2488 of file CDefView.cpp.

2489{
2490 if (!GetSelections())
2491 return;
2492
2493 SFGAOF rfg = SFGAO_CANCOPY | SFGAO_CANMOVE | SFGAO_FILESYSTEM;
2494 HRESULT hr = m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &rfg);
2496 return;
2497
2498 if (!bCopy && !(rfg & SFGAO_CANMOVE))
2499 return;
2500 if (bCopy && !(rfg & SFGAO_CANCOPY))
2501 return;
2502
2504 hr = m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, m_apidl, IID_IContextMenu, 0, (void **)&pCM);
2506 return;
2507
2508 InvokeContextMenuCommand(pCM, (bCopy ? "copyto" : "moveto"), NULL);
2509}
CComPtr< IShellFolder > m_pSFParent
Definition: CDefView.cpp:235
HRESULT InvokeContextMenuCommand(CComPtr< IContextMenu > &pCM, LPCSTR lpVerb, POINT *pt=NULL, bool TryMapVerb=false)
Definition: CDefView.cpp:2147
UINT GetSelections()
Definition: CDefView.cpp:2106
HRESULT hr
Definition: delayimp.cpp:573
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:30
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
Definition: ebrowser.c:83

Referenced by OnCommand().

◆ _DoFolderViewCB()

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

Definition at line 4807 of file CDefView.cpp.

4808{
4810
4812 {
4813 hr = m_pShellFolderViewCB->MessageSFVCB(uMsg, wParam, lParam);
4814 }
4815
4816 return hr;
4817}
CComPtr< IShellFolderViewCB > m_pShellFolderViewCB
Definition: CDefView.cpp:238
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define E_NOTIMPL
Definition: ddrawi.h:99

Referenced by AddPropertySheetPages(), 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 4463 of file CDefView.cpp.

4464{
4465 RECT rcBound;
4466 INT i, nCount = m_ListView.GetItemCount();
4467 DWORD dwSpacing;
4468 INT dx, dy;
4469 BOOL bSmall = ((m_ListView.GetStyle() & LVS_TYPEMASK) != LVS_ICON);
4470
4471 // FIXME: LVM_GETORIGIN is broken. See CORE-17266
4472 pt.x += m_ListView.GetScrollPos(SB_HORZ);
4473 pt.y += m_ListView.GetScrollPos(SB_VERT);
4474
4475 if (m_ListView.GetStyle() & LVS_ALIGNLEFT)
4476 {
4477 // vertically
4478 for (i = 0; i < nCount; ++i)
4479 {
4480 dwSpacing = ListView_GetItemSpacing(m_ListView, bSmall);
4481 dx = LOWORD(dwSpacing);
4482 dy = HIWORD(dwSpacing);
4484 rcBound.right = rcBound.left + dx;
4485 rcBound.bottom = rcBound.top + dy;
4486 if (pt.x < rcBound.right && pt.y < (rcBound.top + rcBound.bottom) / 2)
4487 {
4488 return i;
4489 }
4490 }
4491 for (i = nCount - 1; i >= 0; --i)
4492 {
4494 if (rcBound.left < pt.x && rcBound.top < pt.y)
4495 {
4496 return i + 1;
4497 }
4498 }
4499 }
4500 else
4501 {
4502 // horizontally
4503 for (i = 0; i < nCount; ++i)
4504 {
4505 dwSpacing = ListView_GetItemSpacing(m_ListView, bSmall);
4506 dx = LOWORD(dwSpacing);
4507 dy = HIWORD(dwSpacing);
4509 rcBound.right = rcBound.left + dx;
4510 rcBound.bottom = rcBound.top + dy;
4511 if (pt.y < rcBound.bottom && pt.x < rcBound.left)
4512 {
4513 return i;
4514 }
4515 if (pt.y < rcBound.bottom && pt.x < rcBound.right)
4516 {
4517 return i + 1;
4518 }
4519 }
4520 for (i = nCount - 1; i >= 0; --i)
4521 {
4523 if (rcBound.left < pt.x && rcBound.top < pt.y)
4524 {
4525 return i + 1;
4526 }
4527 }
4528 }
4529
4530 return nCount;
4531}
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:108
LONG bottom
Definition: windef.h:109
LONG top
Definition: windef.h:107
LONG left
Definition: windef.h:106
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 4559 of file CDefView.cpp.

4560{
4561 // Get the handle for the status bar
4562 HWND fStatusBar;
4563 m_pShellBrowser->GetControlWindow(FCW_STATUS, &fStatusBar);
4564
4565 // Get the size of our status bar
4566 RECT statusBarSize;
4567 ::GetWindowRect(fStatusBar, &statusBarSize);
4568
4569 // Resize the status bar
4570 _HandleStatusBarResize(statusBarSize.right - statusBarSize.left);
4571}
CComPtr< IShellBrowser > m_pShellBrowser
Definition: CDefView.cpp:239
void _HandleStatusBarResize(int width)
Definition: CDefView.cpp:4533
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)

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

◆ _GetSnapToGrid()

HRESULT CDefView::_GetSnapToGrid ( )
private

Definition at line 3756 of file CDefView.cpp.

3757{
3758 DWORD dwExStyle = (DWORD)m_ListView.SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
3759 return ((dwExStyle & LVS_EX_SNAPTOGRID) ? S_OK : S_FALSE);
3760}
#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:3451

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

◆ _HandleStatusBarResize()

void CDefView::_HandleStatusBarResize ( int  width)
private

Definition at line 4533 of file CDefView.cpp.

4534{
4535 LRESULT lResult;
4536
4537 if (!m_isFullStatusBar)
4538 {
4539 int nPartArray[] = {-1};
4540 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETPARTS, _countof(nPartArray), (LPARAM)nPartArray, &lResult);
4541 return;
4542 }
4543
4544 int nFileSizePartLength = 125;
4545 const int nLocationPartLength = 150;
4546 const int nRightPartsLength = nFileSizePartLength + nLocationPartLength;
4547 int nObjectsPartLength = nWidth - nRightPartsLength;
4548
4549 // If the window is small enough just divide each part into thirds
4550 // to match the behavior of Windows Server 2003
4551 if (nObjectsPartLength <= nLocationPartLength)
4552 nObjectsPartLength = nFileSizePartLength = nWidth / 3;
4553
4554 int nPartArray[] = {nObjectsPartLength, nObjectsPartLength + nFileSizePartLength, -1};
4555
4556 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETPARTS, _countof(nPartArray), (LPARAM)nPartArray, &lResult);
4557}
LONG_PTR LPARAM
Definition: minwindef.h:175
LONG_PTR LRESULT
Definition: minwindef.h:176
#define SB_SETPARTS
Definition: commctrl.h:1959
#define _countof(array)
Definition: sndvol32.h:70

Referenced by _ForceStatusBarResize().

◆ _MergeToolbar()

HRESULT CDefView::_MergeToolbar ( )
private

Definition at line 4780 of file CDefView.cpp.

4781{
4783 HRESULT hr = S_OK;
4784
4785 hr = IUnknown_QueryService(m_pShellBrowser, IID_IExplorerToolbar, IID_PPV_ARG(IExplorerToolbar, &ptb));
4786 if (FAILED(hr))
4787 return hr;
4788
4789 m_Category = CGID_DefViewFrame;
4790
4791 hr = ptb->SetCommandTarget(static_cast<IOleCommandTarget*>(this), &m_Category, 0);
4792 if (FAILED(hr))
4793 return hr;
4794
4795 if (hr == S_FALSE)
4796 return S_OK;
4797
4798#if 0
4799 hr = ptb->AddButtons(&m_Category, buttonsCount, buttons);
4800 if (FAILED(hr))
4801 return hr;
4802#endif
4803
4804 return S_OK;
4805}
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 4587 of file CDefView.cpp.

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

Referenced by Drop().

◆ _PidlByItem() [1/2]

PCUITEMID_CHILD CDefView::_PidlByItem ( int  i)

Definition at line 1331 of file CDefView.cpp.

1332{
1333 if (!m_ListView)
1334 return nullptr;
1335 return reinterpret_cast<PCUITEMID_CHILD>(m_ListView.GetItemData(i));
1336}
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 1338 of file CDefView.cpp.

1339{
1340 if (!m_ListView)
1341 return nullptr;
1342 return reinterpret_cast<PCUITEMID_CHILD>(lvItem.lParam);
1343}

◆ _Sort()

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

Definition at line 1267 of file CDefView.cpp.

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

3986{
3987 TRACE("(%p)->(%p %p)\n", this, pidl, item);
3988 if (!m_ListView)
3989 {
3990 ERR("!m_ListView\n");
3991 return E_FAIL;
3992 }
3993 *item = LV_AddItem(pidl);
3994 return (int)*item >= 0 ? S_OK : E_OUTOFMEMORY;
3995}
int LV_AddItem(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1376
#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 3286 of file CDefView.cpp.

3287{
3288 TRACE("(%p)->(0x%lX, %p, %p)\n", this, dwReserved, lpfn, lparam);
3289
3292 return S_OK;
3293}
@ 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:1342

◆ ArrangeGrid()

HRESULT STDMETHODCALLTYPE CDefView::ArrangeGrid ( )
override

Definition at line 3972 of file CDefView.cpp.

3973{
3975 return S_OK;
3976}
DWORD SetExtendedListViewStyle(DWORD dw, DWORD dwMask=0)
Definition: rosctrls.h:47

Referenced by OnCommand().

◆ AutoArrange()

HRESULT STDMETHODCALLTYPE CDefView::AutoArrange ( )
override

Definition at line 3978 of file CDefView.cpp.

3979{
3980 m_ListView.ModifyStyle(0, LVS_AUTOARRANGE);
3982 return S_OK;
3983}
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 721 of file CDefView.cpp.

722{
724
725 TRACE("\n");
726
727 if (m_pCommDlgBrowser != NULL)
728 {
729 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_CHECKBUTTON,
731 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_CHECKBUTTON,
733 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON,
735 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON,
737 }
738}
CComPtr< ICommDlgBrowser > m_pCommDlgBrowser
Definition: CDefView.cpp:240
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:901
#define FCIDM_TB_REPORTVIEW
Definition: shresdef.h:902

Referenced by CreateViewWindow3(), and SetCurrentViewMode().

◆ CheckViewMode()

HRESULT CDefView::CheckViewMode ( HMENU  hmenuView)

Definition at line 1986 of file CDefView.cpp.

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

1188{
1190 m_ListToFolderColMap = NULL; // No cache while we are building the cache
1192 for (UINT i = 0;; ++i)
1193 {
1195 if (FAILED(hr))
1196 break; // No more columns
1197 if (!DPA_SetPtr(cache, i, (void*)(INT_PTR) hr))
1198 break; // Cannot allow holes in the cache, must stop now.
1199 }
1201
1202 for (;;)
1203 {
1205 break;
1206 }
1208 if (hMenu)
1209 {
1210 hMenu = GetSubmenuByID(hMenu, FCIDM_SHVIEW_ARRANGE);
1211 for (UINT i = DVIDM_ARRANGESORT_FIRST; i <= DVIDM_ARRANGESORT_LAST && hMenu; ++i)
1212 {
1213 RemoveMenu(hMenu, i, MF_BYCOMMAND);
1214 }
1215 if ((int) GetMenuItemID(hMenu, 0) <= 0)
1216 RemoveMenu(hMenu, 0, MF_BYPOSITION); // Separator
1217 }
1219 LVCOLUMN lvc;
1220 lvc.mask = LVCF_TEXT;
1221 lvc.pszText = buf;
1222 lvc.cchTextMax = _countof(buf);
1223 for (UINT listCol = 0; listCol < DEFVIEW_ARRANGESORT_MAXENUM; ++listCol)
1224 {
1225 if (!ListView_GetColumn(m_ListView.m_hWnd, listCol, &lvc))
1226 break;
1227 HRESULT foldCol = MapListColumnToFolderColumn(listCol);
1228 assert(SUCCEEDED(foldCol));
1231 DVIDM_ARRANGESORT_FIRST + listCol, lvc.pszText, listCol);
1232 }
1233
1234 ListView_RedrawItems(m_ListView.m_hWnd, 0, 0x7fffffff);
1235 m_ListView.InvalidateRect(NULL, TRUE);
1236}
static BOOL AppendMenuItem(HMENU hMenu, UINT MF, UINT Id, LPCWSTR String, SIZE_T Data=0)
Definition: CDefView.cpp:155
static HMENU GetSubmenuByID(HMENU hmenu, UINT id)
Definition: CDefView.cpp:179
@ DVIDM_ARRANGESORT_FIRST
Definition: CDefView.cpp:50
@ DEFVIEW_ARRANGESORT_MAXENUM
Definition: CDefView.cpp:47
@ DVIDM_ARRANGESORT_LAST
Definition: CDefView.cpp:49
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(_expr)
Definition: assert.h:32
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:60
#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:639
#define FCIDM_SHVIEW_ARRANGE
Definition: shresdef.h:865
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 3155 of file CDefView.cpp.

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

◆ CreateList()

BOOL CDefView::CreateList ( )

Definition at line 849 of file CDefView.cpp.

850{
851 DWORD dwStyle, dwExStyle, ListExStyle;
852 TRACE("%p\n", this);
853
855 LVS_SHAREIMAGELISTS | LVS_EDITLABELS | LVS_AUTOARRANGE; // FIXME: Remove LVS_AUTOARRANGE when the view is able to save ItemPos
857 ListExStyle = LVS_EX_INFOTIP | LVS_EX_LABELTIP;
858
860 {
862 dwStyle |= LVS_ALIGNLEFT;
863 // LVS_EX_REGIONAL?
864 }
865 else
866 {
867 dwStyle |= LVS_SHOWSELALWAYS; // MSDN says FWF_SHOWSELALWAYS is deprecated, always turn on for folders
869#if 0 // FIXME: Temporarily disabled until ListView is fixed (CORE-19624, CORE-19818)
870 ListExStyle |= LVS_EX_DOUBLEBUFFER;
871#endif
872 }
873
875 {
876 case FVM_ICON:
877 dwStyle |= LVS_ICON;
878 break;
879 case FVM_DETAILS:
880 dwStyle |= LVS_REPORT;
881 break;
882 case FVM_SMALLICON:
883 dwStyle |= LVS_SMALLICON;
884 break;
885 case FVM_LIST:
886 dwStyle |= LVS_LIST;
887 break;
888 default:
889 dwStyle |= LVS_LIST;
890 break;
891 }
892
894 dwStyle |= LVS_AUTOARRANGE;
895
897 ListExStyle |= LVS_EX_SNAPTOGRID;
898
900 dwStyle |= LVS_SINGLESEL;
901
903 ListExStyle |= LVS_EX_FULLROWSELECT;
904
905 ListExStyle |= GetItemActivateFlags();
906 if (ListExStyle & LVS_EX_ONECLICKACTIVATE)
907 ListExStyle |= SHELL_GetIconUnderlineFlags();
908
910 dwStyle |= LVS_NOCOLUMNHEADER;
911
912#if 0
913 // FIXME: Because this is a negative, everyone gets the new flag by default unless they
914 // opt out. This code should be enabled when shell looks like Vista instead of 2003
916 ListExStyle |= LVS_EX_HEADERINALLVIEWS;
917#endif
918
920 dwExStyle &= ~WS_EX_CLIENTEDGE;
921
922 RECT rcListView = {0,0,0,0};
923 m_ListView.Create(m_hWnd, rcListView, L"FolderView", dwStyle, dwExStyle, ID_LISTVIEW);
924
925 if (!m_ListView)
926 return FALSE;
927
929
930 /* UpdateShellSettings(); */
931 return TRUE;
932}
#define ID_LISTVIEW
Definition: CDefView.cpp:592
UINT GetItemActivateFlags()
Definition: CDefView.cpp:3484
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
@ 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 3220 of file CDefView.cpp.

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

3829{
3830 return CreateViewWindow3(view_params->psbOwner, view_params->psvPrev,
3831 SV3CVW3_DEFAULT, (FOLDERFLAGS)view_params->pfs->fFlags, (FOLDERFLAGS)view_params->pfs->fFlags,
3832 (FOLDERVIEWMODE)view_params->pfs->ViewMode, view_params->pvid, view_params->prcView, &view_params->hwndView);
3833}

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

3836{
3837 OLEMENUGROUPWIDTHS omw = { { 0, 0, 0, 0, 0, 0 } };
3838 const UINT SUPPORTED_SV3CVW3 = SV3CVW3_FORCEVIEWMODE | SV3CVW3_FORCEFOLDERFLAGS;
3839 const UINT IGNORE_FWF = FWF_OWNERDATA; // FIXME: Support this
3840
3841 *hwnd = NULL;
3842
3843 TRACE("(%p)->(shlview=%p shlbrs=%p rec=%p hwnd=%p vmode=%x flags=%x)\n", this, psvPrevious, psb, prcView, hwnd, mode, flags);
3844 if (prcView != NULL)
3845 TRACE("-- left=%i top=%i right=%i bottom=%i\n", prcView->left, prcView->top, prcView->right, prcView->bottom);
3846
3847 /* Validate the Shell Browser */
3848 if (psb == NULL || m_hWnd)
3849 return E_UNEXPECTED;
3850
3851 if (view_flags & ~SUPPORTED_SV3CVW3)
3852 FIXME("unsupported view flags 0x%08x\n", view_flags & ~SUPPORTED_SV3CVW3);
3853
3854 /* Set up the member variables */
3855 m_pShellBrowser = psb;
3857 m_FolderSettings.fFlags = (mask & flags) & ~IGNORE_FWF;
3858
3859 if (view_id)
3860 {
3863 mode = temp;
3864 else if (*view_id == VID_Default)
3865 mode = FVM_AUTO;
3866 else
3867 FIXME("Ignoring unrecognized VID %s\n", debugstr_guid(view_id));
3868 }
3869 if (mode == FVM_AUTO)
3871
3873 {
3875 ? "unsupported" : "invalid", m_FolderSettings.ViewMode);
3877 }
3878 const UINT requestedViewMode = m_FolderSettings.ViewMode;
3879
3880 /* Get our parent window */
3881 m_pShellBrowser->GetWindow(&m_hWndParent);
3883
3884 /* Try to get the ICommDlgBrowserInterface, adds a reference !!! */
3887 {
3888 TRACE("-- CommDlgBrowser\n");
3889 }
3890
3891 LoadViewState();
3892 if (view_flags & SV3CVW3_FORCEVIEWMODE)
3893 m_FolderSettings.ViewMode = requestedViewMode;
3894 if (view_flags & SV3CVW3_FORCEFOLDERFLAGS)
3895 m_FolderSettings.fFlags = (mask & flags) & ~IGNORE_FWF;
3896
3897 RECT rcView = *prcView;
3899 if (m_hWnd == NULL)
3900 return E_FAIL;
3901
3902 *hwnd = m_hWnd;
3903
3904 CheckToolbar();
3905
3906 if (!*hwnd)
3907 return E_FAIL;
3908
3910
3912 UpdateWindow();
3913
3914 if (!m_hMenu)
3915 {
3916 m_hMenu = CreateMenu();
3917 m_pShellBrowser->InsertMenusSB(m_hMenu, &omw);
3918 TRACE("-- after fnInsertMenusSB\n");
3919 }
3920
3921 _MergeToolbar();
3922
3923 return S_OK;
3924}
HRESULT ShellViewIdToFolderViewMode(const SHELLVIEWID *pVid)
const SHELLVIEWID * FolderViewModeToShellViewId(UINT FVM)
#define VID_Default
Definition: CDefView.cpp:218
#define U(x)
Definition: wordpad.c:45
@ Create
Definition: registry.c:563
BOOL UpdateWindow()
Definition: atlwin.h:1345
HRESULT _MergeToolbar()
Definition: CDefView.cpp:4780
void CheckToolbar()
Definition: CDefView.cpp:721
FOLDERVIEWMODE GetDefaultViewMode()
Definition: CDefView.cpp:3598
HRESULT LoadViewState()
Definition: CDefView.cpp:3334
static bool IsSupportedFolderViewMode(int Mode)
Definition: CDefView.cpp:377
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:840
@ SV3CVW3_FORCEFOLDERFLAGS
Definition: shobjidl.idl:841
#define debugstr_guid
Definition: kernel32.h:35
UINT_PTR WPARAM
Definition: minwindef.h:174
#define WS_CHILD
Definition: pedump.c:617
static calc_node_t temp
Definition: rpn_ieee.c:38
#define SFVM_WINDOWCREATED
Definition: shlobj.h:1315
#define SFVM_HWNDMAIN
Definition: shlobj.h:1341
@ FWF_OWNERDATA
Definition: shobjidl.idl:645
@ FVM_AUTO
Definition: shobjidl.idl:678
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define E_UNEXPECTED
Definition: winerror.h:3528
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 3226 of file CDefView.cpp.

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

Referenced by ~CDefView().

◆ DoActivate()

void CDefView::DoActivate ( UINT  uState)

Definition at line 2454 of file CDefView.cpp.

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

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

◆ DoColumnContextMenu()

LRESULT CDefView::DoColumnContextMenu ( LRESULT  lParam)

Definition at line 1999 of file CDefView.cpp.

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

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

4417{
4418 if (*pdwEffect == DROPEFFECT_NONE)
4419 return S_OK;
4420
4421 /* Get a hold on the data object for later calls to DragEnter on the sub-folders */
4422 m_pCurDataObject = pDataObject;
4423
4424 HRESULT hr = drag_notify_subitem(grfKeyState, pt, pdwEffect);
4425 if (SUCCEEDED(hr))
4426 {
4427 POINT ptClient = {pt.x, pt.y};
4428 ScreenToClient(&ptClient);
4429 ImageList_DragEnter(m_hWnd, ptClient.x, ptClient.y);
4430 }
4431
4432 return hr;
4433}
HRESULT drag_notify_subitem(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
Definition: CDefView.cpp:4301
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 4443 of file CDefView.cpp.

4444{
4446
4447 if (m_pCurDropTarget)
4448 {
4449 m_pCurDropTarget->DragLeave();
4451 }
4452
4453 if (m_pCurDataObject != NULL)
4454 {
4456 }
4457
4458 m_iDragOverItem = 0;
4459
4460 return S_OK;
4461}
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 4435 of file CDefView.cpp.

4436{
4437 POINT ptClient = {pt.x, pt.y};
4438 ScreenToClient(&ptClient);
4439 ImageList_DragMove(ptClient.x, ptClient.y);
4440 return drag_notify_subitem(grfKeyState, pt, pdwEffect);
4441}
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 4718 of file CDefView.cpp.

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

◆ Drop()

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

Implements IDropTarget.

Definition at line 4647 of file CDefView.cpp.

4648{
4651
4652 if ((IsDropOnSource(NULL) == S_OK) &&
4653 (*pdwEffect & DROPEFFECT_MOVE) &&
4655 {
4656 if (m_pCurDropTarget)
4657 {
4658 m_pCurDropTarget->DragLeave();
4660 }
4661
4662 POINT ptDrop = { pt.x, pt.y };
4663 ::ScreenToClient(m_ListView, &ptDrop);
4665 m_ptLastMousePos = ptDrop;
4666
4668 if (m_ListView.GetStyle() & LVS_AUTOARRANGE)
4669 {
4671 }
4672 else
4673 {
4674 POINT ptItem;
4675 INT iItem = -1;
4676 while ((iItem = m_ListView.GetNextItem(iItem, LVNI_SELECTED)) >= 0)
4677 {
4678 if (m_ListView.GetItemPosition(iItem, &ptItem))
4679 {
4682 m_ListView.SetItemPosition(iItem, &ptItem);
4683 }
4684 }
4685 }
4687 }
4688 else if (m_pCurDropTarget)
4689 {
4690 m_pCurDropTarget->Drop(pDataObject, grfKeyState, pt, pdwEffect);
4692 }
4693
4695 m_iDragOverItem = 0;
4696 return S_OK;
4697}
POINT m_ptFirstMousePos
Definition: CDefView.cpp:271
STDMETHOD() IsDropOnSource(IDropTarget *drop_target) override
Definition: CDefView.cpp:4087
void _MoveSelectionOnAutoArrange(POINT pt)
Definition: CDefView.cpp:4587
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:2403

◆ EnableModeless()

HRESULT WINAPI CDefView::EnableModeless ( BOOL  fEnable)
override

Implements IShellView.

Definition at line 3179 of file CDefView.cpp.

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

◆ Exec()

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

Implements IOleCommandTarget.

Definition at line 4218 of file CDefView.cpp.

4219{
4220 FIXME("(%p)->(\n\tTarget GUID:%s Command:0x%08x Opt:0x%08x %p %p)\n",
4221 this, debugstr_guid(pguidCmdGroup), nCmdID, nCmdexecopt, pvaIn, pvaOut);
4222
4223 if (!pguidCmdGroup)
4224 return OLECMDERR_E_UNKNOWNGROUP;
4225
4226 if (IsEqualCLSID(*pguidCmdGroup, m_Category))
4227 {
4228 if (nCmdID == FCIDM_SHVIEW_AUTOARRANGE)
4229 {
4230 if (V_VT(pvaIn) != VT_INT_PTR)
4231 return OLECMDERR_E_NOTSUPPORTED;
4232
4234 params.cbSize = sizeof(params);
4235 params.rcExclude = *(RECT*) V_INTREF(pvaIn);
4236
4237 if (m_hMenuViewModes)
4238 {
4239 // Duplicate all but the last two items of the view modes menu
4240 HMENU hmenuViewPopup = CreatePopupMenu();
4241 Shell_MergeMenus(hmenuViewPopup, m_hMenuViewModes, 0, 0, 0xFFFF, 0);
4242 DeleteMenu(hmenuViewPopup, GetMenuItemCount(hmenuViewPopup) - 1, MF_BYPOSITION);
4243 DeleteMenu(hmenuViewPopup, GetMenuItemCount(hmenuViewPopup) - 1, MF_BYPOSITION);
4244 CheckViewMode(hmenuViewPopup);
4245 TrackPopupMenuEx(hmenuViewPopup, TPM_LEFTALIGN | TPM_TOPALIGN, params.rcExclude.left, params.rcExclude.bottom, m_hWndParent, &params);
4246 ::DestroyMenu(hmenuViewPopup);
4247 }
4248
4249 // pvaOut is VT_I4 with value 0x403 (cmd id of the new mode maybe?)
4250 V_VT(pvaOut) = VT_I4;
4251 V_I4(pvaOut) = 0x403;
4252 }
4253 }
4254
4255 if (IsEqualIID(*pguidCmdGroup, CGID_Explorer) &&
4256 (nCmdID == 0x29) &&
4257 (nCmdexecopt == 4) && pvaOut)
4258 return S_OK;
4259
4260 if (IsEqualIID(*pguidCmdGroup, CGID_ShellDocView) &&
4261 (nCmdID == 9) &&
4262 (nCmdexecopt == 0))
4263 return 1;
4264
4265 if (IsEqualIID(*pguidCmdGroup, CGID_DefView))
4266 {
4267 CComPtr<IStream> pStream;
4268 WCHAR SubKey[MAX_PATH];
4269 switch (nCmdID)
4270 {
4272 SHDeleteKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\ShellNoRoam\\Bags");
4274 SaveViewState(pStream);
4275 return S_OK;
4277 PathCombineW(SubKey, REGSTR_PATH_EXPLORER, L"Streams\\Default");
4279 SHDeleteKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\ShellNoRoam\\Bags");
4280 m_FolderSettings.fFlags |= FWF_NOBROWSERVIEWSTATE; // Don't let this folder save itself
4281 return S_OK;
4282 }
4283 }
4284
4285 return OLECMDERR_E_UNKNOWNGROUP;
4286}
STDMETHOD() SaveViewState() override
Definition: CDefView.cpp:3469
HRESULT CheckViewMode(HMENU hmenuView)
Definition: CDefView.cpp:1986
HRESULT GetDefaultViewStream(DWORD Stgm, IStream **ppStream)
Definition: CDefView.cpp:3309
@ 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:937
#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:318
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
#define SHDeleteKey
Definition: shlwapi.h:831
#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
@ FWF_NOBROWSERVIEWSTATE
Definition: shobjidl.idl:670
#define FCIDM_SHVIEW_AUTOARRANGE
Definition: shresdef.h:887
#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:2419
#define TPM_LEFTALIGN
Definition: winuser.h:2413

◆ fill_list()

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

Definition at line 1522 of file CDefView.cpp.

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

1931{
1932 bool forceMerge = false;
1934
1935 // Make sure the column we currently sort by is in the menu
1938 {
1942 LVCOLUMN lvc;
1943 lvc.mask = LVCF_TEXT;
1944 lvc.pszText = buf;
1945 lvc.cchTextMax = _countof(buf);
1946 currentSortId = DVIDM_ARRANGESORT_LAST;
1947 forceMerge = true;
1949 AppendMenuItem(m_hMenuArrangeModes, MF_STRING, currentSortId, lvc.pszText, m_sortInfo.ListColumn);
1950 }
1951
1952 // Prepend the sort-by items unless they are aleady there
1953 if (GetMenuItemID(hmenuArrange, 0) == FCIDM_SHVIEW_AUTOARRANGE || forceMerge)
1954 {
1955 Shell_MergeMenus(hmenuArrange, m_hMenuArrangeModes, 0, 0, 0xFFFF, MM_ADDSEPARATOR);
1956 }
1957
1958 CheckMenuRadioItem(hmenuArrange,
1960 currentSortId, MF_BYCOMMAND);
1961
1963 {
1966 }
1967 else
1968 {
1971
1972 if (GetAutoArrange() == S_OK)
1974 else
1976
1977 if (_GetSnapToGrid() == S_OK)
1979 else
1981 }
1982
1983 return S_OK;
1984}
@ DEFVIEW_ARRANGESORT_MAX
Definition: CDefView.cpp:48
STDMETHOD() GetAutoArrange() override
Definition: CDefView.cpp:3751
HRESULT _GetSnapToGrid()
Definition: CDefView.cpp:3756
#define C_ASSERT(e)
Definition: intsafe.h:73
#define MM_ADDSEPARATOR
Definition: shlobj.h:2536
#define FCIDM_SHVIEW_ALIGNTOGRID
Definition: shresdef.h:889
#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 1897 of file CDefView.cpp.

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

Referenced by DoActivate().

◆ FillFileMenu()

HRESULT CDefView::FillFileMenu ( )

Definition at line 1851 of file CDefView.cpp.

1852{
1854 if (!hFileMenu)
1855 return E_FAIL;
1856
1857 /* Cleanup the items added previously */
1858 for (int i = GetMenuItemCount(hFileMenu) - 1; i >= 0; i--)
1859 {
1860 UINT id = GetMenuItemID(hFileMenu, i);
1861 if (id < FCIDM_BROWSERFIRST || id > FCIDM_BROWSERLAST)
1862 DeleteMenu(hFileMenu, i, MF_BYPOSITION);
1863 }
1864
1865 // In case we still have this left over, clean it up
1866 if (m_pFileMenu)
1867 {
1870 }
1871 UINT selcount = m_ListView.GetSelectedCount();
1872 // Store context menu in m_pFileMenu and keep it to invoke the selected command later on
1875 return hr;
1876
1878
1880 hr = m_pFileMenu->QueryContextMenu(hmenu, 0, DVIDM_CONTEXTMENU_FIRST, DVIDM_CONTEXTMENU_LAST, cmf);
1882 return hr;
1883
1884 // TODO: filter or something
1885 if (!selcount)
1886 {
1890 }
1891
1892 Shell_MergeMenus(hFileMenu, hmenu, 0, 0, 0xFFFF, MM_ADDSEPARATOR | MM_SUBMENUSHAVEIDS);
1894 return S_OK;
1895}
static UINT GetContextMenuFlags(IShellBrowser *pSB, SFGAOF sfgao)
Definition: CDefView.cpp:102
@ 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:3548
CComPtr< IContextMenu > m_pFileMenu
Definition: CDefView.cpp:275
SFGAOF GetSelectionAttributes(SFGAOF Query)
Definition: CDefView.cpp:2139
UINT GetSelectedCount()
Definition: rosctrls.h:136
@ SVGIO_SELECTION
Definition: shobjidl.idl:744
@ SVGIO_BACKGROUND
Definition: shobjidl.idl:743
static HMENU hmenu
Definition: win.c:78
#define FCIDM_BROWSERLAST
Definition: shlobj.h:630
#define MM_SUBMENUSHAVEIDS
Definition: shlobj.h:2537
#define FCIDM_MENU_FILE
Definition: shlobj.h:637
#define FCIDM_SHVIEW_REFRESH
Definition: shresdef.h:897
#define FCIDM_SHVIEW_VIEW
Definition: shresdef.h:866

Referenced by OnInitMenuPopup().

◆ FillList()

HRESULT CDefView::FillList ( BOOL  IsRefreshCommand = TRUE)

Definition at line 1539 of file CDefView.cpp.

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

Referenced by OnCreate(), and Refresh().

◆ FillViewMenu()

HRESULT CDefView::FillViewMenu ( )

Definition at line 1914 of file CDefView.cpp.

1915{
1917 if (!hViewMenu)
1918 return E_FAIL;
1919
1921 if (!m_hMenuViewModes)
1922 return E_FAIL;
1923
1926
1927 return S_OK;
1928}
DWORD WINAPI SHMenuIndexFromID(HMENU hMenu, UINT uID)
Definition: ordinal.c:4725
#define FCIDM_MENU_VIEW_SEP_OPTIONS
Definition: shlobj.h:640
#define MM_DONTREMOVESEPS
Definition: shlobj.h:2538

Referenced by DoActivate().

◆ Freeze()

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

Implements IViewObject.

Definition at line 4730 of file CDefView.cpp.

4731{
4732 FIXME("Stub: this=%p\n", this);
4733 return E_NOTIMPL;
4734}

◆ GetAdvise()

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

Implements IViewObject.

Definition at line 4754 of file CDefView.cpp.

4755{
4756 TRACE("this=%p pAspects=%p pAdvf=%p ppAdvSink=%p\n", this, pAspects, pAdvf, ppAdvSink);
4757
4758 if (ppAdvSink)
4759 {
4760 *ppAdvSink = m_pAdvSink;
4761 m_pAdvSink.p->AddRef();
4762 }
4763
4764 if (pAspects)
4765 *pAspects = m_dwAspects;
4766
4767 if (pAdvf)
4768 *pAdvf = m_dwAdvf;
4769
4770 return S_OK;
4771}
CComPtr< IAdviseSink > m_pAdvSink
Definition: CDefView.cpp:263
ULONG AddRef()

◆ GetArrangeParam()

HRESULT STDMETHODCALLTYPE CDefView::GetArrangeParam ( LPARAM sort)
override

Definition at line 3965 of file CDefView.cpp.

3966{
3967 int col = m_sortInfo.ListColumn;
3968 *sort = col != LISTVIEW_SORT_INFO::UNSPECIFIEDCOLUMN ? col : 0;
3970}
static struct @460 sort

◆ GetAutoArrange()

HRESULT STDMETHODCALLTYPE CDefView::GetAutoArrange ( )
override

Implements IFolderView.

Definition at line 3751 of file CDefView.cpp.

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

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

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

◆ GetCommDlgViewFlags()

DWORD CDefView::GetCommDlgViewFlags ( )
inline

Definition at line 365 of file CDefView.cpp.

366 {
369 {
370 DWORD flags;
371 if (SUCCEEDED(pcdb2->GetViewFlags(&flags)))
372 return flags;
373 }
374 return 0;
375 }

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

◆ GetCurrentInfo()

HRESULT WINAPI CDefView::GetCurrentInfo ( LPFOLDERSETTINGS  pfs)
override

Implements IShellView.

Definition at line 3274 of file CDefView.cpp.

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

◆ GetCurrentViewMode()

HRESULT STDMETHODCALLTYPE CDefView::GetCurrentViewMode ( UINT pViewMode)
override

Implements IFolderView.

Definition at line 3607 of file CDefView.cpp.

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

Referenced by SaveViewState().

◆ GetDefaultSpacing()

HRESULT STDMETHODCALLTYPE CDefView::GetDefaultSpacing ( POINT ppt)
override

Implements IFolderView.

Definition at line 3746 of file CDefView.cpp.

3747{
3748 return E_NOTIMPL;
3749}

◆ GetDefaultViewMode()

FOLDERVIEWMODE CDefView::GetDefaultViewMode ( )

Definition at line 3598 of file CDefView.cpp.

3599{
3603 mode = temp;
3604 return mode;
3605}
BOOL WINAPI IsOS(DWORD feature)
Definition: ordinal.c:4230
#define OS_SERVERADMINUI
Definition: shlwapi.h:260
#define SFVM_DEFVIEWMODE
Definition: shlobj.h:1325

Referenced by CreateViewWindow3().

◆ GetDefaultViewStream()

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

Definition at line 3309 of file CDefView.cpp.

3310{
3311 CLSID clsid;
3313 if (SUCCEEDED(hr))
3314 {
3315 WCHAR path[MAX_PATH], name[39];
3316 wsprintfW(path, L"%s\\%s", REGSTR_PATH_EXPLORER, L"Streams\\Default");
3318 *ppStream = SHOpenRegStream2W(HKEY_CURRENT_USER, path, name, Stgm);
3319 hr = *ppStream ? S_OK : E_FAIL;
3320 }
3321 return hr;
3322}
INT WINAPI StringFromGUID2(REFGUID guid, LPOLESTR str, INT cmax)
Definition: combase.c:1525
HRESULT WINAPI IUnknown_GetClassID(IUnknown *lpUnknown, CLSID *clsid)
Definition: ordinal.c:1457
const CLSID * clsid
Definition: msctf.cpp:50
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 1054 of file CDefView.cpp.

1055{
1056 // According to learn.microsoft.com/en-us/windows/win32/shell/sfvm-getdetailsof
1057 // the query order is IShellFolder2, IShellDetails, SFVM_GETDETAILSOF.
1058 HRESULT hr = E_FAIL;
1059 if (m_pSF2Parent)
1060 {
1061 hr = m_pSF2Parent->GetDetailsOf(pidl, FoldCol, &sd);
1062 }
1063 if (FAILED(hr) && m_pSDParent)
1064 {
1065 hr = m_pSDParent->GetDetailsOf(pidl, FoldCol, &sd);
1066 }
1067#if 0 // TODO
1068 if (FAILED(hr))
1069 {
1070 FIXME("Try SFVM_GETDETAILSOF\n");
1071 }
1072#endif
1073 return hr;
1074}
CComPtr< IShellDetails > m_pSDParent
Definition: CDefView.cpp:237

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

◆ GetDetailsByListColumn()

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

Definition at line 1076 of file CDefView.cpp.

1077{
1079 if (SUCCEEDED(hr))
1080 return GetDetailsByFolderColumn(pidl, hr, sd);
1081 ERR("Unable to determine folder column from list column %d\n", (int) ListCol);
1082 return hr;
1083}

Referenced by OnNotify().

◆ GetDragPoint()

HRESULT STDMETHODCALLTYPE CDefView::GetDragPoint ( POINT pt)
override

Definition at line 4098 of file CDefView.cpp.

4099{
4100 if (!pt)
4101 return E_INVALIDARG;
4102
4104 return S_OK;
4105}

◆ GetDropPoint()

HRESULT STDMETHODCALLTYPE CDefView::GetDropPoint ( POINT pt)
override

Definition at line 4107 of file CDefView.cpp.

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

◆ GetFocusedItem()

HRESULT STDMETHODCALLTYPE CDefView::GetFocusedItem ( int piItem)
override

Implements IFolderView.

Definition at line 3699 of file CDefView.cpp.

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

◆ GetFolder()

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

Implements IFolderView.

Definition at line 3652 of file CDefView.cpp.

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

◆ GetItemActivateFlags()

UINT CDefView::GetItemActivateFlags ( )

Definition at line 3484 of file CDefView.cpp.

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

Referenced by CreateList(), and OnSettingChange().

◆ GetItemAttributes() [1/2]

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

Definition at line 1325 of file CDefView.cpp.

1326{
1327 PCUITEMID_CHILD pItem = _PidlByItem(i);
1328 return pItem ? GetItemAttributes(pItem, Query) : 0;
1329}
BOOL Query(LPCTSTR *ServiceArgs, DWORD ArgCount, BOOL bExtended)
Definition: query.c:292
SFGAOF GetItemAttributes(PCUITEMID_CHILD pidl, UINT Query)
Definition: CDefView.cpp:1319

◆ GetItemAttributes() [2/2]

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

Definition at line 1319 of file CDefView.cpp.

1320{
1321 SFGAOF Attr = (SFGAOF)Query;
1322 return SUCCEEDED(m_pSFParent->GetAttributesOf(1, &pidl, &Attr)) ? (Attr & Query) : 0;
1323}

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

3549{
3551
3552 TRACE("(%p)->(uItem=0x%08x,\n\tIID=%s, ppv=%p)\n", this, uItem, debugstr_guid(&riid), ppvOut);
3553
3554 if (!ppvOut)
3555 return E_INVALIDARG;
3556
3557 *ppvOut = NULL;
3558
3559 switch (uItem)
3560 {
3561 case SVGIO_BACKGROUND:
3562 if (IsEqualIID(riid, IID_IContextMenu))
3563 {
3566 return hr;
3567
3568 IUnknown_SetSite(*((IUnknown**)ppvOut), (IShellView *)this);
3569 }
3570 else if (IsEqualIID(riid, IID_IDispatch))
3571 {
3573 {
3576 return hr;
3577 }
3578 hr = m_pShellFolderViewDual->QueryInterface(riid, ppvOut);
3579 }
3580 break;
3581 case SVGIO_SELECTION:
3582 GetSelections();
3583 hr = m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, m_apidl, riid, 0, ppvOut);
3585 return hr;
3586
3587 if (IsEqualIID(riid, IID_IContextMenu))
3588 IUnknown_SetSite(*((IUnknown**)ppvOut), (IShellView *)this);
3589
3590 break;
3591 }
3592
3593 TRACE("-- (%p)->(interface=%p)\n", this, *ppvOut);
3594
3595 return hr;
3596}
HRESULT CDefViewBckgrndMenu_CreateInstance(IShellFolder *psf, REFIID riid, void **ppv)
HRESULT WINAPI CDefViewDual_Constructor(REFIID riid, LPVOID *ppvOut)
CComPtr< IShellFolderViewDual > m_pShellFolderViewDual
Definition: CDefView.cpp:242
const GUID IID_IDispatch
#define E_NOINTERFACE
Definition: winerror.h:3479

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

◆ GetItemPosition()

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

Implements IFolderView.

Definition at line 3708 of file CDefView.cpp.

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

◆ GetItemSpacing()

HRESULT STDMETHODCALLTYPE CDefView::GetItemSpacing ( ITEMSPACING spacing)
override

Definition at line 4161 of file CDefView.cpp.

4162{
4163 FIXME("(%p)->(%p) stub\n", this, spacing);
4164 return E_NOTIMPL;
4165}

◆ GetObject()

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

Definition at line 3997 of file CDefView.cpp.

3998{
3999 TRACE("(%p)->(%p %d)\n", this, pidl, item);
4000 return Item(item, pidl);
4001}
_In_ WDFCOLLECTION _In_ WDFOBJECT Item

◆ GetObjectCount()

HRESULT STDMETHODCALLTYPE CDefView::GetObjectCount ( UINT count)
override

Definition at line 4027 of file CDefView.cpp.

4028{
4029 TRACE("(%p)->(%p)\n", this, count);
4031 return S_OK;
4032}
GLuint GLuint GLsizei count
Definition: gl.h:1545

◆ GetSelectedCount()

HRESULT STDMETHODCALLTYPE CDefView::GetSelectedCount ( UINT count)
override

Definition at line 4060 of file CDefView.cpp.

4061{
4063 return S_OK;
4064}

◆ GetSelectedObjects()

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

Definition at line 4066 of file CDefView.cpp.

4067{
4068 TRACE("(%p)->(%p %p)\n", this, pidl, items);
4069
4070 *items = GetSelections();
4071
4072 if (*items)
4073 {
4074 *pidl = static_cast<PCUITEMID_CHILD *>(LocalAlloc(0, *items * sizeof(PCUITEMID_CHILD)));
4075 if (!*pidl)
4076 {
4077 return E_OUTOFMEMORY;
4078 }
4079
4080 // It's documented that caller shouldn't free the PIDLs, only the array itself
4081 memcpy(*pidl, m_apidl, *items * sizeof(PCUITEMID_CHILD));
4082 }
4083
4084 return S_OK;
4085}
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 2139 of file CDefView.cpp.

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

Referenced by FillFileMenu(), and OnContextMenu().

◆ GetSelectionMarkedItem()

HRESULT STDMETHODCALLTYPE CDefView::GetSelectionMarkedItem ( int piItem)
override

Implements IFolderView.

Definition at line 3690 of file CDefView.cpp.

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

◆ GetSelections()

UINT CDefView::GetSelections ( )

Definition at line 2106 of file CDefView.cpp.

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

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

◆ GetSpacing()

HRESULT STDMETHODCALLTYPE CDefView::GetSpacing ( POINT ppt)
override

Implements IFolderView.

Definition at line 3724 of file CDefView.cpp.

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

Implements IShellView2.

Definition at line 3809 of file CDefView.cpp.

3810{
3811 if (view_type == SV2GV_DEFAULTVIEW)
3812 {
3813 *pVid = VID_Default;
3814 return S_OK;
3815 }
3816 if (view_type == SV2GV_CURRENTVIEW)
3818 if ((int)view_type < 0)
3819 return E_UNEXPECTED;
3820
3823 return E_INVALIDARG;
3825 return S_OK;
3826}
view_type

◆ GetWindow()

HRESULT WINAPI CDefView::GetWindow ( HWND lphwnd)
override

Implements IOleWindow.

Definition at line 3146 of file CDefView.cpp.

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

◆ GetWindowProc()

virtual WNDPROC CDefView::GetWindowProc ( )
inlineoverridevirtual

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

Definition at line 530 of file CDefView.cpp.

531 {
532 return WindowProc;
533 }
static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: CDefView.cpp:535

◆ GetWndClassInfo()

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

Definition at line 517 of file CDefView.cpp.

518 {
519 static ATL::CWndClassInfo wc =
520 {
522 0, 0, NULL, NULL,
523 LoadCursor(NULL, IDC_ARROW), NULL, NULL, L"SHELLDLL_DefView", NULL
524 },
525 NULL, NULL, IDC_ARROW, TRUE, 0, _T("")
526 };
527 return wc;
528 }
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:5978
WNDCLASSEXA WNDCLASSEX
Definition: winuser.h:5885
#define CS_PARENTDC
Definition: winuser.h:664

◆ GiveFeedback()

HRESULT WINAPI CDefView::GiveFeedback ( DWORD  dwEffect)
override

Implements IDropSource.

Definition at line 4711 of file CDefView.cpp.

4712{
4713 TRACE("(%p)\n", this);
4714
4716}
#define DRAGDROP_S_USEDEFAULTCURSORS
Definition: winerror.h:3763

◆ HandleRename()

HRESULT STDMETHODCALLTYPE CDefView::HandleRename ( LPCITEMIDLIST  pidl)
override

Definition at line 3926 of file CDefView.cpp.

3927{
3928 if (!pidl)
3929 {
3931 if (idx < 0)
3933 pidl = _PidlByItem(idx);
3934 }
3935 if (ILFindLastID(pidl) != pidl)
3936 return E_INVALIDARG;
3937 return SelectItem(pidl, SVSI_EDIT | SVSI_ENSUREVISIBLE | SVSI_FOCUSED | SVSI_SELECT);
3938}
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 672 of file CDefView.cpp.

673{
674 HRESULT ret = S_OK;
675 if (m_pCommDlgBrowser && !(GetCommDlgViewFlags() & CDB2GVF_NOINCLUDEITEM))
676 {
677 TRACE("ICommDlgBrowser::IncludeObject pidl=%p\n", pidl);
678 ret = m_pCommDlgBrowser->IncludeObject(this, pidl);
679 TRACE("-- returns 0x%08x\n", ret);
680 }
681 else if (m_pFolderFilter)
682 {
683 ret = m_pFolderFilter->ShouldShow(m_pSFParent, m_pidlParent, pidl);
684 }
685 return ret;
686}
CComPtr< IFolderFilter > m_pFolderFilter
Definition: CDefView.cpp:241
return ret
Definition: mutex.c:146

Referenced by fill_list().

◆ Initialize()

HRESULT WINAPI CDefView::Initialize ( IShellFolder shellFolder)

Definition at line 661 of file CDefView.cpp.

662{
663 m_pSFParent = shellFolder;
665 shellFolder->QueryInterface(IID_PPV_ARG(IShellDetails, &m_pSDParent));
666
667 return S_OK;
668}
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)

◆ InitList()

BOOL CDefView::InitList ( )

Definition at line 981 of file CDefView.cpp.

982{
983 HIMAGELIST big_icons, small_icons;
984
985 TRACE("%p\n", this);
986
988
989 Shell_GetImageLists(&big_icons, &small_icons);
991 m_ListView.SetImageList(small_icons, LVSIL_SMALL);
992
994
996 UINT ColumnCount = pColumns ? DPA_GetPtrCount(m_LoadColumnsList) : 0;
997 LoadColumns(pColumns, ColumnCount);
999 {
1003 }
1004 return TRUE;
1005}
HRESULT LoadColumns(SIZE_T *pColList=NULL, UINT ColListCount=0)
Definition: CDefView.cpp:1122
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 2147 of file CDefView.cpp.

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

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

◆ IsDesktop()

BOOL CDefView::IsDesktop ( ) const
inlineprivate

Definition at line 298 of file CDefView.cpp.

◆ IsDropOnSource()

HRESULT STDMETHODCALLTYPE CDefView::IsDropOnSource ( IDropTarget drop_target)
override

Definition at line 4087 of file CDefView.cpp.

4088{
4089 if ((m_iDragOverItem == -1 || m_pCurDropTarget == NULL) &&
4091 {
4092 return S_OK;
4093 }
4094
4095 return S_FALSE;
4096}

Referenced by Drop().

◆ IsSpecialFolder()

BOOL CDefView::IsSpecialFolder ( int csidl) const
inlineprivate

Definition at line 300 of file CDefView.cpp.

301 {
302 csidl = m_SpecialFolder;
303 return m_SpecialFolder >= 0;
304 }

Referenced by UpdateStatusbarLocation().

◆ IsSupportedFolderViewMode()

static bool CDefView::IsSupportedFolderViewMode ( int  Mode)
inlinestatic

Definition at line 377 of file CDefView.cpp.

378 {
379 return Mode >= FVM_FIRST && Mode <= FVM_DETAILS; // We don't support Tile nor Thumbstrip
380 }
_In_ ULONG Mode
Definition: hubbusif.h:303

Referenced by CreateViewWindow3(), GetDefaultViewMode(), and GetView().

◆ Item()

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

Implements IFolderView.

Definition at line 3660 of file CDefView.cpp.

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

◆ ItemCount()

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

Implements IFolderView.

Definition at line 3673 of file CDefView.cpp.

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

3686{
3687 return E_NOTIMPL;
3688}

◆ ListViewCompareItems()

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

Definition at line 1253 of file CDefView.cpp.

1254{
1255 PCUIDLIST_RELATIVE pidl1 = reinterpret_cast<PCUIDLIST_RELATIVE>(lParam1);
1256 PCUIDLIST_RELATIVE pidl2 = reinterpret_cast<PCUIDLIST_RELATIVE>(lParam2);
1257 CDefView *pThis = reinterpret_cast<CDefView*>(lpData);
1258
1259 HRESULT hres = pThis->m_pSFParent->CompareIDs(pThis->m_sortInfo.FolderColumn, pidl1, pidl2);
1261 return 0;
1262
1263 SHORT nDiff = HRESULT_CODE(hres);
1264 return nDiff * pThis->m_sortInfo.Direction;
1265}
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:188

Referenced by _Sort().

◆ LoadColumn()

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

Definition at line 1085 of file CDefView.cpp.

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

1123{
1124 HWND hWndHdr = ListView_GetHeader(m_ListView.m_hWnd);
1125 UINT newColCount = 0, oldColCount = Header_GetItemCount(hWndHdr);
1126 UINT width = 0, foldCol, i;
1127 HRESULT hr = S_FALSE;
1128
1130 for (i = 0, foldCol = 0;; ++foldCol)
1131 {
1132 if (newColCount >= 0xffff)
1133 break; // CompareIDs limit reached
1134
1135 if (pColList)
1136 {
1137 if (i >= ColListCount)
1138 break;
1139 width = HIWORD(pColList[i]);
1140 foldCol = LOWORD(pColList[i++]);
1141 }
1142
1143 SHCOLSTATEF state = 0;
1144 if (!m_pSF2Parent || FAILED(m_pSF2Parent->GetDefaultColumnState(foldCol, &state)))
1146
1147 if (foldCol == 0)
1148 {
1149 // Force the first column
1150 }
1151 else if (state & SHCOLSTATE_HIDDEN)
1152 {
1153 continue;
1154 }
1155 else if (!pColList && !(state & SHCOLSTATE_ONBYDEFAULT))
1156 {
1157 continue;
1158 }
1159
1160 bool insert = newColCount >= oldColCount;
1161 UINT listCol = insert ? -1 : newColCount;
1162 hr = LoadColumn(foldCol, listCol, insert, width);
1163 if (FAILED(hr))
1164 {
1165 if (!pColList)
1166 hr = S_OK; // No more items, we are done
1167 break;
1168 }
1169 ++newColCount;
1170 }
1171 for (i = newColCount; i < oldColCount; ++i)
1172 {
1174 }
1175
1178 assert(SUCCEEDED(MapFolderColumnToListColumn(0))); // We don't allow turning off the Name column
1180 {
1183 }
1184 return hr;
1185}
GLint GLint GLsizei width
Definition: gl.h:1546
@ SHCOLSTATE_TYPE_STR
Definition: shtypes.idl:121
@ SHCOLSTATE_ONBYDEFAULT
Definition: shtypes.idl:125

Referenced by InitList().

◆ LoadViewState()

HRESULT CDefView::LoadViewState ( )

Definition at line 3334 of file CDefView.cpp.

3335{
3337 PERSISTCOLUMNS cols;
3340 bool fallback = false;
3341 HRESULT hrColumns = E_FAIL;
3343 if (SUCCEEDED(hr))
3344 {
3345 DWORD data;
3346 if (FAILED(hr = SHPropertyBag_ReadDWORD(pPB, L"Mode", &data)))
3347 goto loadfallback;
3349 cvs.FolderSettings.fFlags = ReadDWORD(pPB, L"FFlags", FWF_NOGROUPING);
3350 data = ReadDWORD(pPB, L"Sort", ~0ul);
3352 cvs.SortDir = (INT8)ReadDWORD(pPB, L"SortDir", 1);
3353 if (SUCCEEDED(hrColumns = SHPropertyBag_ReadStream(pPB, L"ColInfo", &pS)))
3354 hrColumns = LoadColumnsStream(cols, pS);
3355 }
3356 else
3357 {
3358 if (FAILED(hr = (m_pShellBrowser ? m_pShellBrowser->GetViewStateStream(STGM_READ, &pS) : E_UNEXPECTED)))
3359 {
3360 loadfallback:
3362 fallback = true;
3363 }
3364 if (FAILED(hr) || FAILED(hr = Read(pS, &cvs, sizeof(cvs))))
3365 return hr;
3366 if (cvs.Signature != cvs.SIG)
3368 hrColumns = LoadColumnsStream(cols, pS);
3369 }
3371 m_FolderSettings.fFlags &= ~cvs.VALIDFWF;
3373 if (SUCCEEDED(hrColumns))
3374 {
3375 BOOL failed = FALSE;
3376 if ((m_LoadColumnsList = DPA_Create(cols.Count)) != NULL)
3377 {
3378 for (UINT i = 0; i < cols.Count; ++i)
3379 {
3380 failed |= !DPA_SetPtr(m_LoadColumnsList, i, UlongToPtr(cols.Columns[i]));
3381 }
3382 }
3383 if (failed || !cols.Count)
3384 {
3387 }
3388 }
3391 m_sortInfo.Direction = cvs.SortDir > 0 ? 1 : -1;
3393 return hr;
3394}
static HRESULT LoadColumnsStream(PERSISTCOLUMNS &cols, IStream *pS)
Definition: CDefView.cpp:3324
static DWORD ReadDWORD(IPropertyBag *pPB, LPCWSTR name, DWORD def)
Definition: CDefView.cpp:3302
signed char INT8
Definition: basetsd.h:183
#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:936
EXTERN_C HRESULT WINAPI IUnknown_QueryServicePropertyBag(_In_ IUnknown *punk, _In_ long flags, _In_ REFIID riid, _Outptr_ void **ppvObj)
Definition: propbag.cpp:1967
#define SHGVSPB_FOLDER
Definition: shlwapi.h:174
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:98
static const UINT SIG
Definition: CDefView.cpp:93
static const UINT VALIDFWF
Definition: CDefView.cpp:97
UINT Columns[MAXCOUNT]
Definition: CDefView.cpp:88
#define ERROR_INVALID_DATA
Definition: winerror.h:238

Referenced by CreateViewWindow3().

◆ LV_AddItem()

int CDefView::LV_AddItem ( PCUITEMID_CHILD  pidl)

Definition at line 1376 of file CDefView.cpp.

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

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

1346{
1348
1349 int cItems = m_ListView.GetItemCount();
1351 for (int i = 0; i < cItems; i++)
1352 {
1353 PCUITEMID_CHILD currentpidl = _PidlByItem(i);
1354 HRESULT hr = m_pSFParent->CompareIDs(lParam, pidl, currentpidl);
1355 if (SUCCEEDED(hr))
1356 {
1357 if (hr == S_EQUAL)
1358 return i;
1359 }
1360 else
1361 {
1362#if DBG
1363 for (i = 0; pidl && i < cItems; i++)
1364 {
1365 currentpidl = _PidlByItem(i);
1366 if (currentpidl && currentpidl->mkid.cb == pidl->mkid.cb && !memcmp(currentpidl, pidl, pidl->mkid.cb))
1367 DbgPrint("Matched item #%d, broken CompareIDs?\n", i);
1368 }
1369#endif
1370 break;
1371 }
1372 }
1373 return -1;
1374}
#define SHCIDS_CANONICALONLY
Definition: shobjidl.idl:226
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2802
#define DbgPrint
Definition: hal.h:12
#define S_EQUAL
Definition: shellutils.h:676

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

◆ LV_RefreshItem()

void CDefView::LV_RefreshItem ( INT  iItem)

Definition at line 1496 of file CDefView.cpp.

1497{
1499
1500 LVITEMW lvItem = { LVIF_IMAGE };
1501 lvItem.iItem = iItem;
1502 lvItem.iImage = I_IMAGECALLBACK;
1503 m_ListView.SetItem(&lvItem);
1504 for (UINT iCol = 0; m_ListView.SetItemText(iItem, iCol, LPSTR_TEXTCALLBACK); ++iCol) {}
1505 m_ListView.Update(iItem);
1506}
BOOL SetItemText(int i, int subItem, LPCWSTR text)
Definition: rosctrls.h:186
BOOL Update(int i)
Definition: rosctrls.h:131
BOOL SetItem(const LV_ITEM *pitem)
Definition: rosctrls.h:111
#define LPSTR_TEXTCALLBACK
Definition: commctrl.h:2388

Referenced by LV_RefreshItems().

◆ LV_RefreshItems()

void CDefView::LV_RefreshItems ( )

Definition at line 1508 of file CDefView.cpp.

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

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

1460{
1461 BOOL bResult = FALSE;
1462 LVITEMW lvItem;
1463 if (nItem >= 0)
1464 {
1466
1467 lvItem.mask = LVIF_IMAGE;
1468 lvItem.iItem = nItem;
1469 lvItem.iSubItem = 0;
1471 lvItem.stateMask = LVIS_CUT;
1472 if (m_HasCutItems)
1473 {
1474 lvItem.mask |= LVIF_STATE;
1475 lvItem.state = GetItemAttributes(pidl, SFGAO_HIDDEN | SFGAO_GHOSTED) ? LVIS_CUT : 0;
1476 }
1477 PCUITEMID_CHILD pidlOld = _PidlByItem(nItem);
1478 if (pidlOld && (lvItem.lParam = reinterpret_cast<LPARAM>(ILClone(pidl))) != NULL)
1479 lvItem.mask |= LVIF_PARAM;
1480 bResult = m_ListView.SetItem(&lvItem);
1481 if (bResult && lvItem.lParam && pidlOld)
1482 ILFree(const_cast<PUITEMID_CHILD>(pidlOld));
1483 for (UINT i = 0; m_ListView.SetItemText(nItem, i, LPSTR_TEXTCALLBACK); ++i) {} // Update all columns
1484 }
1485 return bResult;
1486}
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1051
#define SFVM_UPDATINGOBJECT
Definition: shlobj.h:1340
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 1488 of file CDefView.cpp.

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

◆ MapFolderColumnToListColumn()

HRESULT CDefView::MapFolderColumnToListColumn ( UINT  FoldCol)

Definition at line 1020 of file CDefView.cpp.

1021{
1022 // This function is only called during column management, performance is not critical.
1023 for (UINT i = 0;; ++i)
1024 {
1026 if ((UINT)r == FoldCol)
1027 return i;
1028 else if (FAILED(r))
1029 return r;
1030 }
1031}
static HRESULT SHGetLVColumnSubItem(HWND List, UINT Col)
Definition: CDefView.cpp:1010

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

◆ MapListColumnToFolderColumn()

HRESULT CDefView::MapListColumnToFolderColumn ( UINT  ListCol)

Definition at line 1033 of file CDefView.cpp.

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

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

◆ MoveIcons()

HRESULT STDMETHODCALLTYPE CDefView::MoveIcons ( IDataObject obj)
override

Definition at line 4113 of file CDefView.cpp.

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

◆ OnActivate()

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

Definition at line 2511 of file CDefView.cpp.

2512{
2514 return 0;
2515}
void DoActivate(UINT uState)
Definition: CDefView.cpp:2454

◆ OnChangeCBChain()

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

Definition at line 3118 of file CDefView.cpp.

3119{
3120 bHandled = TRUE;
3121 return m_ClipboardChain.HandleChangeCBChain(wParam, lParam);
3122}
ClipboardViewerChain m_ClipboardChain
Definition: CDefView.cpp:243

◆ OnChangeNotify()

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

Definition at line 2924 of file CDefView.cpp.

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

2550{
2551 DWORD dwCmdID;
2552 DWORD dwCmd;
2553 HWND hwndCmd;
2554 int nCount;
2555
2556 dwCmdID = GET_WM_COMMAND_ID(wParam, lParam);
2558 hwndCmd = GET_WM_COMMAND_HWND(wParam, lParam);
2559
2560 TRACE("(%p)->(0x%08x 0x%08x %p) stub\n", this, dwCmdID, dwCmd, hwndCmd);
2561
2562 if (dwCmdID >= DVIDM_ARRANGESORT_FIRST && dwCmdID <= DVIDM_ARRANGESORT_LAST)
2563 {
2564 UINT listCol = (UINT)GetMenuItemDataById(m_hMenuArrangeModes, dwCmdID);
2565 _Sort(listCol);
2566 return 0;
2567 }
2568
2569 switch (dwCmdID)
2570 {
2575 case 0x702D:
2577 case 0x702F:
2579 break;
2582 break;
2584 if (_GetSnapToGrid() == S_OK)
2586 else
2587 ArrangeGrid();
2588 break;
2590 if (GetAutoArrange() == S_OK)
2591 m_ListView.ModifyStyle(LVS_AUTOARRANGE, 0);
2592 else
2593 AutoArrange();
2594 break;
2598 break;
2600 nCount = m_ListView.GetItemCount();
2601 for (int i=0; i < nCount; i++)
2603 break;
2606 break;
2608 Refresh();
2609 break;
2611 case FCIDM_SHVIEW_CUT:
2612 case FCIDM_SHVIEW_COPY:
2616 return 0;
2617 return OnExplorerCommand(dwCmdID, TRUE);
2621 return 0;
2623 case FCIDM_SHVIEW_UNDO:
2626 return OnExplorerCommand(dwCmdID, FALSE);
2627 default:
2628 // WM_COMMAND messages from file menu are routed to CDefView to let m_pFileMenu handle them
2629 if (m_pFileMenu && dwCmd == 0)
2630 {
2631 HMENU Dummy = NULL;
2632 MenuCleanup _(m_pFileMenu, Dummy);
2634 }
2635 }
2636
2637 return 0;
2638}
#define GET_WM_COMMAND_HWND(wp, lp)
Definition: CDefView.cpp:596
#define GET_WM_COMMAND_ID(wp, lp)
Definition: CDefView.cpp:595
#define GET_WM_COMMAND_CMD(wp, lp)
Definition: CDefView.cpp:597
#define SFVM_CANSELECTALL
STDMETHOD() AutoArrange() override
Definition: CDefView.cpp:3978
void _DoCopyToMoveToFolder(BOOL bCopy)
Definition: CDefView.cpp:2488
STDMETHOD() SetCurrentViewMode(UINT ViewMode) override
Definition: CDefView.cpp:3618
LRESULT OnExplorerCommand(UINT uCommand, BOOL bUseSelection)
Definition: CDefView.cpp:2368
STDMETHOD() ArrangeGrid() override
Definition: CDefView.cpp:3972
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:1676
#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:878
#define FCIDM_SHVIEW_LISTVIEW
Definition: shresdef.h:883
#define FCIDM_SHVIEW_UNDO
Definition: shresdef.h:874
#define FCIDM_SHVIEW_TILEVIEW
Definition: shresdef.h:885
#define FCIDM_SHVIEW_INSERTLINK
Definition: shresdef.h:875
#define FCIDM_SHVIEW_NEWFOLDER
Definition: shresdef.h:893
#define FCIDM_SHVIEW_SMALLICON
Definition: shresdef.h:882
#define FCIDM_SHVIEW_SNAPTOGRID
Definition: shresdef.h:888
#define FCIDM_SHVIEW_COPYTO
Definition: shresdef.h:876
#define FCIDM_SHVIEW_MOVETO
Definition: shresdef.h:877
#define FCIDM_SHVIEW_REPORTVIEW
Definition: shresdef.h:884
#define FCIDM_SHVIEW_INVERTSELECTION
Definition: shresdef.h:879

◆ OnContextMenu()

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

Definition at line 2251 of file CDefView.cpp.

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

◆ OnCreate()

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

Definition at line 1765 of file CDefView.cpp.

1766{
1769
1770 TRACE("%p\n", this);
1771
1773 {
1774 if (FAILED(RegisterDragDrop(m_hWnd, pdt)))
1775 ERR("Error Registering DragDrop\n");
1776 }
1777
1778 /* register for receiving notifications */
1779 m_pSFParent->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2));
1780 if (ppf2)
1781 {
1782 ppf2->GetCurFolder(&m_pidlParent);
1783 }
1784
1785 if (CreateList())
1786 {
1787 if (InitList())
1788 {
1789 FillList(FALSE);
1790 }
1791 }
1792
1794 {
1795 HWND hwndSB;
1796 m_pShellBrowser->GetWindow(&hwndSB);
1798 }
1799
1800 // Set up change notification
1801 LPITEMIDLIST pidlTarget = NULL;
1802 LONG fEvents = 0;
1803 HRESULT hr = _DoFolderViewCB(SFVM_GETNOTIFY, (WPARAM)&pidlTarget, (LPARAM)&fEvents);
1804 if (FAILED(hr) || (!pidlTarget && !fEvents)) // FIXME: MSDN says both zero means no notifications
1805 {
1806 pidlTarget = m_pidlParent;
1807 fEvents = SHCNE_ALLEVENTS;
1808 }
1809 SHChangeNotifyEntry ntreg = {};
1811 if (FAILED(hr))
1812 {
1813 ntreg.fRecursive = FALSE;
1814 ntreg.pidl = pidlTarget;
1815 }
1819 fEvents, SHV_CHANGE_NOTIFY,
1820 1, &ntreg);
1821
1823
1824 int bForceFullStatusBar = false;
1825 BOOL bIsFileSystem = SHGetAttributes(NULL, m_pidlParent, SFGAO_FILESYSTEM) & SFGAO_FILESYSTEM;
1826 m_SpecialFolder = bIsFileSystem ? -1 : 0x7f; // FS folder or "generic" CSIDL
1828 {
1830 }
1831 else if (IsEqualPersistClassID(ppf2, CLSID_RecycleBin))
1832 {
1833 m_SpecialFolder = bForceFullStatusBar = CSIDL_BITBUCKET;
1834 }
1835 else if (bIsFileSystem)
1836 {
1838 if (ILIsParent(pidlNet, m_pidlParent, FALSE) && ILGetSize(pidlNet) < ILGetSize(m_pidlParent))
1840 }
1841 m_isFullStatusBar = bIsFileSystem || bForceFullStatusBar;
1842 _ForceStatusBarResize(); // This handles changing StatusBar parts
1845
1846 return S_OK;
1847}
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
#define SHV_CHANGE_NOTIFY
Definition: brfolder.cpp:20
EXTERN_C ULONG WINAPI SHChangeNotifyRegister(HWND hwnd, INT fSources, LONG wEventMask, UINT uMsg, INT cItems, SHChangeNotifyEntry *lpItems)
BOOL CreateList()
Definition: CDefView.cpp:849
HRESULT FillList(BOOL IsRefreshCommand=TRUE)
Definition: CDefView.cpp:1539
void _ForceStatusBarResize()
Definition: CDefView.cpp:4559
BOOL InitList()
Definition: CDefView.cpp:981
HRESULT WINAPI RegisterDragDrop(HWND hwnd, LPDROPTARGET pDropTarget)
Definition: ole2.c:547
DWORD SHGetAttributes(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes)
Definition: utils.cpp:438
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:1946
#define SHCNRF_ShellLevel
Definition: shlobj.h:1944
#define CSIDL_DESKTOP
Definition: shlobj.h:2181
#define CSIDL_NETWORK
Definition: shlobj.h:2198
#define SHCNRF_InterruptLevel
Definition: shlobj.h:1943
#define SHCNE_ALLEVENTS
Definition: shlobj.h:1921
#define SFVM_QUERYFSNOTIFY
Definition: shlobj.h:1323
#define SFVM_GETNOTIFY
Definition: shlobj.h:1344
#define CSIDL_BITBUCKET
Definition: shlobj.h:2191
#define IDA_SHELLVIEW
Definition: shresdef.h:26
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
PCIDLIST_ABSOLUTE pidl
Definition: shlobj.h:1893
BOOL WINAPI SetShellWindowEx(HWND, HWND)
Definition: ntwrapper.h:58
HACCEL WINAPI LoadAcceleratorsW(_In_opt_ HINSTANCE, _In_ LPCWSTR)

◆ OnDeactivate()

void CDefView::OnDeactivate ( )

Definition at line 2443 of file CDefView.cpp.

2444{
2445 TRACE("%p\n", this);
2446
2448 {
2449 // TODO: cleanup menu after deactivation
2451 }
2452}

Referenced by DoActivate(), and OnNotify().

◆ OnDefaultCommand()

HRESULT CDefView::OnDefaultCommand ( )

Definition at line 688 of file CDefView.cpp.

689{
691
692 if (m_pCommDlgBrowser.p != NULL)
693 {
694 TRACE("ICommDlgBrowser::OnDefaultCommand\n");
695 ret = m_pCommDlgBrowser->OnDefaultCommand(this);
696 TRACE("-- returns 0x%08x\n", ret);
697 }
698
699 return ret;
700}

Referenced by OnContextMenu(), and OpenSelectedItems().

◆ OnDestroy()

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

Definition at line 1654 of file CDefView.cpp.

1655{
1656 if (!m_Destroyed)
1657 {
1658 m_Destroyed = TRUE;
1661 m_hNotify = NULL;
1662 m_ClipboardChain.Unhook(m_hWnd);
1663 if (m_pFileMenu)
1664 {
1666 m_pFileMenu = NULL;
1667 }
1668 if (m_hMenu)
1669 {
1671 m_hMenu = NULL;
1672 }
1675 }
1676 bHandled = FALSE;
1677 return 0;
1678}
EXTERN_C BOOL WINAPI SHChangeNotifyDeregister(ULONG hNotify)
HRESULT WINAPI RevokeDragDrop(HWND hwnd)
Definition: ole2.c:629

◆ OnDrawClipboard()

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

Definition at line 3124 of file CDefView.cpp.

3125{
3126 bHandled = TRUE;
3127 const LRESULT res = m_ClipboardChain.HandleDrawClipboard(wParam, lParam);
3128 if (m_HasCutItems)
3129 {
3130 m_ClipboardChain.Unhook(m_hWnd);
3131 m_HasCutItems = false;
3132 m_ListView.SetItemState(-1, 0, LVIS_CUT); // Somebody copied or pasted, nothing can be "cut" anymore
3133 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, m_ListView.SendMessageW(LVM_GETCALLBACKMASK, 0, 0) | LVIS_CUT, 0);
3134 }
3135 return res;
3136}
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 1680 of file CDefView.cpp.

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

◆ OnExplorerCommand()

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

Definition at line 2368 of file CDefView.cpp.

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

Referenced by OnCommand().

◆ OnFinalMessage()

VOID CDefView::OnFinalMessage ( HWND  )
overridevirtual

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

Definition at line 1760 of file CDefView.cpp.

1761{
1762 this->Release();
1763}
ULONG Release()

◆ OnGetDlgCode()

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

Definition at line 1649 of file CDefView.cpp.

1650{
1651 return m_ListView.SendMessageW(uMsg, 0, 0);
1652}

◆ OnGetShellBrowser()

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

Definition at line 1748 of file CDefView.cpp.

1749{
1750 return reinterpret_cast<LRESULT>(m_pShellBrowser.p);
1751}

◆ OnInitMenuPopup()

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

Definition at line 3058 of file CDefView.cpp.

3059{
3060 HMENU hmenu = (HMENU) wParam;
3061 int nPos = LOWORD(lParam);
3062 UINT menuItemId;
3063
3064 if (m_isEditing)
3066 if (m_pCM)
3067 OnMenuMessage(uMsg, wParam, lParam, bHandled);
3068
3070
3071 if (GetSelections() == 0)
3072 {
3079 }
3080 else
3081 {
3082 // FIXME: Check copyable
3089 }
3090
3091 /* Lets try to find out what the hell wParam is */
3092 if (hmenu == GetSubMenu(m_hMenu, nPos))
3093 menuItemId = ReallyGetMenuItemID(m_hMenu, nPos);
3094 else if (hViewMenu && hmenu == GetSubMenu(hViewMenu, nPos))
3095 menuItemId = ReallyGetMenuItemID(hViewMenu, nPos);
3096 else if (m_hContextMenu && hmenu == GetSubMenu(m_hContextMenu, nPos))
3097 menuItemId = ReallyGetMenuItemID(m_hContextMenu, nPos);
3098 else
3099 return FALSE;
3100
3101 switch (menuItemId)
3102 {
3103 case FCIDM_MENU_FILE:
3104 FillFileMenu();
3105 break;
3106 case FCIDM_MENU_VIEW:
3107 case FCIDM_SHVIEW_VIEW:
3109 break;
3112 break;
3113 }
3114
3115 return FALSE;
3116}
static UINT ReallyGetMenuItemID(HMENU hmenu, int i)
Definition: CDefView.cpp:190
HRESULT FillFileMenu()
Definition: CDefView.cpp:1851
LRESULT OnMenuMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:3026
HRESULT FillArrangeAsMenu(HMENU hmenuArrange)
Definition: CDefView.cpp:1930
#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 2537 of file CDefView.cpp.

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

◆ OnMenuMessage()

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

Definition at line 3026 of file CDefView.cpp.

3027{
3028 if (!m_pCM)
3029 {
3030 /* no menu */
3031 ERR("no context menu\n");
3032 return FALSE;
3033 }
3034 LRESULT result = 0;
3036 return SUCCEEDED(hres);
3037}
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 1753 of file CDefView.cpp.

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

◆ OnNotify()

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

Definition at line 2658 of file CDefView.cpp.

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

◆ OnPrintClient()

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

Definition at line 1712 of file CDefView.cpp.

1713{
1714 HDC hDC = (HDC)wParam;
1715
1716 RECT rc;
1718
1720 {
1721 BITMAP bm;
1722 if (::GetObject(m_viewinfo_data.hbmBack, sizeof(BITMAP), &bm))
1723 {
1727 }
1728 }
1729 else
1730 {
1732 }
1733
1734 bHandled = TRUE;
1735
1736 return TRUE;
1737}
static HDC hDC
Definition: 3dtext.c:33
static COLORREF GetViewColor(COLORREF Clr, UINT SysFallback)
Definition: CDefView.cpp:213
static VOID DrawTileBitmap(HDC hDC, LPCRECT prc, HBITMAP hbm, INT nWidth, INT nHeight, INT dx, INT dy)
Definition: CDefView.cpp:1691
DWORD WINAPI SHFillRectClr(HDC hDC, LPCRECT pRect, COLORREF cRef)
Definition: ordinal.c:2133
static HDC
Definition: imagelist.c:88
LONG bmHeight
Definition: wingdi.h:1869
LONG bmWidth
Definition: wingdi.h:1868
#define GetObject
Definition: wingdi.h:4914
#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 2517 of file CDefView.cpp.

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

Referenced by OnNotify().

◆ OnSettingChange()

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

Definition at line 3039 of file CDefView.cpp.

3040{
3041 /* Wallpaper setting affects drop shadows effect */
3042 if (wParam == SPI_SETDESKWALLPAPER || wParam == 0)
3044
3046 UINT ListExBits = GetItemActivateFlags();
3048 (lParam && !lstrcmpiW((PWSTR)lParam, REGSTR_PATH_EXPLORER L"\\IconUnderline")))
3049 {
3051 ListExBits |= SHELL_GetIconUnderlineFlags();
3052 }
3053 m_ListView.SetExtendedListViewStyle(ListExBits, ListExMask);
3054 m_ListView.SendMessage(uMsg, wParam, lParam);
3055 return S_OK;
3056}
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4171
#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 1641 of file CDefView.cpp.

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

◆ OnSize()

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

Definition at line 2418 of file CDefView.cpp.

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

◆ OnStateChange()

HRESULT CDefView::OnStateChange ( UINT  uFlags)

Definition at line 702 of file CDefView.cpp.

703{
705
706 if (m_pCommDlgBrowser.p != NULL)
707 {
708 TRACE("ICommDlgBrowser::OnStateChange flags=%x\n", uFlags);
709 ret = m_pCommDlgBrowser->OnStateChange(this, uFlags);
710 TRACE("--\n");
711 }
712
713 return ret;
714}

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

◆ OnSysColorChange()

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

Definition at line 1739 of file CDefView.cpp.

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

◆ OnUpdateStatusbar()

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

Definition at line 838 of file CDefView.cpp.

839{
842 return 0;
843}

◆ OpenSelectedItems()

HRESULT CDefView::OpenSelectedItems ( PCSTR  pszVerb = NULL)

Definition at line 2209 of file CDefView.cpp.

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

4700{
4701 TRACE("(%p)\n", this);
4702
4703 if (fEscapePressed)
4704 return DRAGDROP_S_CANCEL;
4705 else if (!(grfKeyState & MK_LBUTTON) && !(grfKeyState & MK_RBUTTON))
4706 return DRAGDROP_S_DROP;
4707 else
4708 return S_OK;
4709}
#define DRAGDROP_S_DROP
Definition: winerror.h:3758
#define DRAGDROP_S_CANCEL
Definition: winerror.h:3761
#define MK_RBUTTON
Definition: winuser.h:2404

◆ QueryService()

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

Implements IServiceProvider.

Definition at line 4773 of file CDefView.cpp.

4774{
4775 if (IsEqualIID(guidService, SID_SFolderView))
4776 return QueryInterface(riid, ppvObject);
4777 return m_pShellBrowser ? IUnknown_QueryService(m_pShellBrowser, guidService, riid, ppvObject) : E_NOINTERFACE;
4778}

◆ QueryStatus()

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

Implements IOleCommandTarget.

Definition at line 4197 of file CDefView.cpp.

4198{
4199 FIXME("(%p)->(%p(%s) 0x%08x %p %p\n",
4200 this, pguidCmdGroup, debugstr_guid(pguidCmdGroup), cCmds, prgCmds, pCmdText);
4201
4202 if (!prgCmds)
4203 return E_INVALIDARG;
4204
4205 for (UINT i = 0; i < cCmds; i++)
4206 {
4207 FIXME("\tprgCmds[%d].cmdID = %d\n", i, prgCmds[i].cmdID);
4208 prgCmds[i].cmdf = 0;
4209 }
4210
4211 return OLECMDERR_E_UNKNOWNGROUP;
4212}

◆ QuerySupport()

HRESULT STDMETHODCALLTYPE CDefView::QuerySupport ( UINT support)
override

Definition at line 4185 of file CDefView.cpp.

4186{
4187 TRACE("(%p)->(%p)\n", this, support);
4188 return S_OK;
4189}

◆ Rearrange()

HRESULT STDMETHODCALLTYPE CDefView::Rearrange ( LPARAM  sort)
override

Definition at line 3959 of file CDefView.cpp.

3960{
3961 _Sort(LOWORD(sort & SHCIDS_COLUMNMASK));
3962 return S_OK;
3963}

◆ Refresh()

HRESULT WINAPI CDefView::Refresh ( )
override

Implements IShellView.

Definition at line 3208 of file CDefView.cpp.

3209{
3210 TRACE("(%p)\n", this);
3211
3213
3215 FillList();
3216
3217 return S_OK;
3218}

Referenced by OnChangeNotify(), and OnCommand().

◆ RefreshGhostedState()

void CDefView::RefreshGhostedState ( )

Definition at line 3138 of file CDefView.cpp.

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

Referenced by SetClipboard().

◆ RefreshObject()

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

Definition at line 4046 of file CDefView.cpp.

4047{
4048 FIXME("(%p)->(%p %p) stub\n", this, pidl, item);
4049 return E_NOTIMPL;
4050}

◆ RemoveObject()

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

Definition at line 4003 of file CDefView.cpp.

4004{
4005 TRACE("(%p)->(%p %p)\n", this, pidl, item);
4006
4007 if (!m_ListView)
4008 {
4009 ERR("!m_ListView\n");
4010 return E_FAIL;
4011 }
4012
4013 if (pidl)
4014 {
4017 }
4018 else
4019 {
4020 *item = 0;
4022 }
4023
4024 return S_OK;
4025}

◆ SaveViewState() [1/2]

HRESULT WINAPI CDefView::SaveViewState ( )
override

Implements IShellView.

Definition at line 3469 of file CDefView.cpp.

3470{
3472 return SaveViewState(NULL);
3473 return S_FALSE;
3474}

Referenced by Exec(), and SaveViewState().

◆ SaveViewState() [2/2]

HRESULT CDefView::SaveViewState ( IStream pStream)

Definition at line 3396 of file CDefView.cpp.

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

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

◆ SelectAndPositionItem() [1/2]

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

Definition at line 3940 of file CDefView.cpp.

3941{
3942 if (Idx == -1)
3943 return fSVSI == SVSI_DESELECTOTHERS ? SelectItem(-2, fSVSI) : E_INVALIDARG;
3944 if (ppt)
3945 m_ListView.SetItemPosition(Idx, ppt);
3946 return SelectItem(Idx, fSVSI); // After SetItemPosition for SVSI_ENSUREVISIBLE
3947}

Referenced by SelectAndPositionItem(), and SelectAndPositionItems().

◆ SelectAndPositionItem() [2/2]

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

Definition at line 3949 of file CDefView.cpp.

3950{
3951 if (!item)
3952 return SelectAndPositionItem(-1, flags, point);
3953 int idx = LV_FindItemByPidl(item);
3954 return idx != -1 ? SelectAndPositionItem(idx, flags, point) : S_FALSE;
3955}
HRESULT SelectAndPositionItem(int Idx, UINT fSVSI, POINT *ppt)
Definition: CDefView.cpp:3940
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 3793 of file CDefView.cpp.

3794{
3796 m_ListView.SetItemState(-1, 0, LVIS_SELECTED); // Reset the selection
3797 for (UINT i = 0 ; i < cidl; i++)
3798 {
3799 int lvIndex = LV_FindItemByPidl(apidl[i]);
3800 if (lvIndex != -1)
3801 SelectAndPositionItem(lvIndex, dwFlags, apt ? &apt[i] : NULL);
3802 }
3803 return S_OK;
3804}
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141

◆ SelectItem() [1/2]

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

Implements IFolderView.

Definition at line 3762 of file CDefView.cpp.

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

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

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

4743{
4744 FIXME("partial stub: %p 0x%08x 0x%08x %p\n", this, aspects, advf, pAdvSink);
4745
4746 // FIXME: we set the AdviseSink, but never use it to send any advice
4747 m_pAdvSink = pAdvSink;
4748 m_dwAspects = aspects;
4749 m_dwAdvf = advf;
4750
4751 return S_OK;
4752}

◆ SetAutomationObject()

HRESULT STDMETHODCALLTYPE CDefView::SetAutomationObject ( IDispatch disp)
override

Definition at line 4191 of file CDefView.cpp.

4192{
4193 FIXME("(%p)->(%p) stub\n", this, disp);
4194 return E_NOTIMPL;
4195}

◆ SetCallback()

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

Definition at line 4167 of file CDefView.cpp.

4168{
4169 if (old_cb)
4170 *old_cb = m_pShellFolderViewCB.Detach();
4171
4172 m_pShellFolderViewCB = new_cb;
4174 if (new_cb)
4175 new_cb->QueryInterface(IID_PPV_ARG(IFolderFilter, &m_pFolderFilter));
4176 return S_OK;
4177}
T * Detach()
Definition: atlcomcli.h:186

◆ SetClipboard()

HRESULT STDMETHODCALLTYPE CDefView::SetClipboard ( BOOL  move)
override

Definition at line 4131 of file CDefView.cpp.

4132{
4133 if (!move)
4134 return S_OK;
4135
4136 UINT CutCount = 0;
4137 for (int i = -1; (i = m_ListView.GetNextItem(i, LVNI_SELECTED)) != -1;)
4138 {
4139 if (!CutCount++)
4140 {
4141 // Turn off the LVIS_CUT LVM_SETCALLBACKMASK optimization
4142 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, m_ListView.SendMessageW(LVM_GETCALLBACKMASK, 0, 0) & ~LVIS_CUT, 0);
4144 }
4146 }
4147 if (CutCount)
4148 {
4150 m_HasCutItems = true;
4151 }
4152 return S_OK;
4153}
void RefreshGhostedState()
Definition: CDefView.cpp:3138

◆ SetCurrentViewMode()

HRESULT STDMETHODCALLTYPE CDefView::SetCurrentViewMode ( UINT  ViewMode)
override

Implements IFolderView.

Definition at line 3618 of file CDefView.cpp.

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

Referenced by OnCommand().

◆ SetItemPos()

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

Definition at line 4119 of file CDefView.cpp.

4120{
4121 FIXME("(%p)->(%p %p) stub\n", this, pidl, pt);
4122 return E_NOTIMPL;
4123}

◆ SetObjectCount()

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

Definition at line 4034 of file CDefView.cpp.

4035{
4036 FIXME("(%p)->(%d %x) stub\n", this, count, flags);
4037 return E_NOTIMPL;
4038}

◆ SetPoints()

HRESULT STDMETHODCALLTYPE CDefView::SetPoints ( IDataObject obj)
override

Definition at line 4155 of file CDefView.cpp.

4156{
4157 FIXME("(%p)->(%p) stub\n", this, obj);
4158 return E_NOTIMPL;
4159}

◆ SetRedraw()

HRESULT STDMETHODCALLTYPE CDefView::SetRedraw ( BOOL  redraw)
override

Definition at line 4052 of file CDefView.cpp.

4053{
4054 TRACE("(%p)->(%d)\n", this, redraw);
4055 if (m_ListView)
4057 return S_OK;
4058}
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 3163 of file CDefView.cpp.

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

◆ UIActivate()

HRESULT WINAPI CDefView::UIActivate ( UINT  uState)
override

Implements IShellView.

Definition at line 3185 of file CDefView.cpp.

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

Referenced by DestroyViewWindow().

◆ Unfreeze()

HRESULT WINAPI CDefView::Unfreeze ( DWORD  dwFreeze)
override

Implements IViewObject.

Definition at line 4736 of file CDefView.cpp.

4737{
4738 FIXME("Stub: this=%p\n", this);
4739 return E_NOTIMPL;
4740}

◆ UpdateFolderViewFlags()

void CDefView::UpdateFolderViewFlags ( )

◆ UpdateListColors()

void CDefView::UpdateListColors ( )

Definition at line 934 of file CDefView.cpp.

935{
937 {
938 /* Check if drop shadows option is enabled */
939 BOOL bDropShadow = FALSE;
940 DWORD cbDropShadow = sizeof(bDropShadow);
941
942 /*
943 * The desktop ListView always take the default desktop colours, by
944 * remaining transparent and letting user32/win32k paint itself the
945 * desktop background color, if any.
946 */
948
949 SHGetValueW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
950 L"ListviewShadow", NULL, &bDropShadow, &cbDropShadow);
951 if (bDropShadow)
952 {
953 /* Set the icon background transparent */
955 m_ListView.SetTextColor(RGB(255, 255, 255));
956 m_ListView.SetExtendedListViewStyle(LVS_EX_TRANSPARENTSHADOWTEXT, LVS_EX_TRANSPARENTSHADOWTEXT);
957 }
958 else
959 {
960 /* Set the icon background as the same colour as the desktop */
962 m_ListView.SetTextBkColor(crDesktop);
963 if (GetRValue(crDesktop) + GetGValue(crDesktop) + GetBValue(crDesktop) > 128 * 3)
964 m_ListView.SetTextColor(RGB(0, 0, 0));
965 else
966 m_ListView.SetTextColor(RGB(255, 255, 255));
967 m_ListView.SetExtendedListViewStyle(0, LVS_EX_TRANSPARENTSHADOWTEXT);
968 }
969 }
970 else
971 {
974
975 // Background is painted by the parent via WM_PRINTCLIENT
976 m_ListView.SetExtendedListViewStyle(LVS_EX_TRANSPARENTBKGND, LVS_EX_TRANSPARENTBKGND);
977 }
978}
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:67
#define GetBValue(quad)
Definition: precomp.h:71
#define GetGValue(quad)
Definition: precomp.h:70
#define GetRValue(quad)
Definition: precomp.h:69
#define CLR_NONE
Definition: commctrl.h:319
DWORD COLORREF
Definition: windef.h:100
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 4040 of file CDefView.cpp.

4041{
4042 FIXME("(%p)->(%p %p %p) stub\n", this, pidl_old, pidl_new, item);
4043 return E_NOTIMPL;
4044}

◆ UpdateStatusbar()

void CDefView::UpdateStatusbar ( )

Definition at line 740 of file CDefView.cpp.

741{
742 WCHAR szFormat[MAX_PATH];
743 WCHAR szPartText[MAX_PATH];
744 UINT cSelectedItems;
745
746 if (!m_ListView)
747 return;
748
749 cSelectedItems = m_ListView.GetSelectedCount();
750 if (cSelectedItems)
751 {
753 StringCchPrintfW(szPartText, _countof(szPartText), szFormat, cSelectedItems);
754 }
755 else
756 {
757 LoadStringW(shell32_hInstance, IDS_OBJECTS, szFormat, _countof(szFormat));
758 StringCchPrintfW(szPartText, _countof(szPartText), szFormat, m_ListView.GetItemCount());
759 }
760
761 LRESULT lResult;
762 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETTEXT, 0, (LPARAM)szPartText, &lResult);
763
764 // Don't bother with the extra processing if we only have one StatusBar part
766 {
767 UINT64 uTotalFileSize = 0;
768 WORD uFileFlags = LVNI_ALL;
769 INT nItem = -1;
770 bool bIsOnlyFoldersSelected = true;
771
772 // If we have something selected then only count selected file sizes
773 if (cSelectedItems)
774 {
775 uFileFlags = LVNI_SELECTED;
776 }
777
778 while ((nItem = m_ListView.GetNextItem(nItem, uFileFlags)) >= 0)
779 {
780 PCUITEMID_CHILD pidl = _PidlByItem(nItem);
781
782 uTotalFileSize += _ILGetFileSize(pidl, NULL, 0);
783
784 if (!_ILIsFolder(pidl))
785 {
786 bIsOnlyFoldersSelected = false;
787 }
788 }
789
790 // Don't show the file size text if there is 0 bytes in the folder
791 // OR we only have folders selected
792 if ((cSelectedItems && !bIsOnlyFoldersSelected) || uTotalFileSize)
793 StrFormatByteSizeW(uTotalFileSize, szPartText, _countof(szPartText));
794 else
795 *szPartText = 0;
796
797 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETTEXT, 1, (LPARAM)szPartText, &lResult);
798 }
799
800 SFGAOF att = 0;
801 if (cSelectedItems > 0)
802 {
803 UINT maxquery = 42; // Checking the attributes can be slow, only check small selections (_DoCopyToMoveToFolder will verify the full array)
804 att = SFGAO_CANCOPY | SFGAO_CANMOVE;
805 if (cSelectedItems <= maxquery && (!GetSelections() || FAILED(m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &att))))
806 att = 0;
807 }
808 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON, FCIDM_SHVIEW_COPYTO, (att & SFGAO_CANCOPY) != 0, &lResult);
809 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON, FCIDM_SHVIEW_MOVETO, (att & SFGAO_CANMOVE) != 0, &lResult);
810}
COMPILER_DEPENDENT_UINT64 UINT64
Definition: actypes.h:131
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:2524
BOOL _ILIsFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:2144
DWORD _ILGetFileSize(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
Definition: pidl.c:2519
#define SB_SETTEXT
Definition: commctrl.h:1954
#define LoadStringW
Definition: utils.h:64
#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 812 of file CDefView.cpp.

813{
814 LRESULT lResult;
815 LPARAM pIcon = NULL;
816 WCHAR szPartText[MAX_PATH];
817 *szPartText = 0;
819 {
820 // If we are in a Recycle Bin then show no text for the location part
821 int csidl;
822 if (!IsSpecialFolder(csidl) || (csidl != CSIDL_NETWORK && csidl != CSIDL_BITBUCKET))
823 {
824 LoadStringW(shell32_hInstance, IDS_MYCOMPUTER, szPartText, _countof(szPartText));
825 pIcon = (LPARAM)m_hMyComputerIcon;
826 }
827 /*else if (csidl == CSIDL_NETWORK) // TODO: Figure out the type of share (My Computer/Local Intranet/Internet?)
828 {
829 ImageList_GetIconSize(ListView_GetImageList(m_ListView, LVSIL_SMALL), &x, &y);
830 pIcon = (LPARAM)LoadImage(shell32_hInstance, MAKEINTRESOURCEW(IDI_SHELL_MY_NETWORK_PLACES),
831 IMAGE_ICON, x, y, LR_SHARED);
832 }*/
833 }
834 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETICON, 2, pIcon, &lResult);
835 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETTEXT, 2, (LPARAM)szPartText, &lResult);
836}
BOOL IsSpecialFolder(int &csidl) const
Definition: CDefView.cpp:300
#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 535 of file CDefView.cpp.

536 {
537 CDefView *pThis;
539
540 // Must hold a reference during message handling
541 pThis = reinterpret_cast<CDefView *>(hWnd);
542 pThis->AddRef();
544 pThis->Release();
545 return result;
546 }
HWND hWnd
Definition: settings.c:17

Referenced by GetWindowProc().

Member Data Documentation

◆ m_apidl

◆ m_bmenuBarInitialized

BOOL CDefView::m_bmenuBarInitialized
private

Definition at line 251 of file CDefView.cpp.

Referenced by DoActivate().

◆ m_Category

CLSID CDefView::m_Category
private

Definition at line 283 of file CDefView.cpp.

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

◆ m_cidl

◆ m_ClipboardChain

ClipboardViewerChain CDefView::m_ClipboardChain
private

Definition at line 243 of file CDefView.cpp.

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

◆ m_cScrollDelay

UINT CDefView::m_cScrollDelay
private

Definition at line 269 of file CDefView.cpp.

Referenced by drag_notify_subitem().

◆ m_Destroyed

BOOL CDefView::m_Destroyed
private

Definition at line 284 of file CDefView.cpp.

Referenced by OnDestroy().

◆ m_dwAdvf

DWORD CDefView::m_dwAdvf
private

Definition at line 262 of file CDefView.cpp.

Referenced by GetAdvise(), and SetAdvise().

◆ m_dwAspects

DWORD CDefView::m_dwAspects
private

Definition at line 261 of file CDefView.cpp.

Referenced by GetAdvise(), and SetAdvise().

◆ m_FolderSettings

◆ m_grfKeyState

DWORD CDefView::m_grfKeyState
private

Definition at line 272 of file CDefView.cpp.

Referenced by drag_notify_subitem(), and Drop().

◆ m_hAccel

HACCEL CDefView::m_hAccel
private

Definition at line 260 of file CDefView.cpp.

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

◆ m_HasCutItems

bool CDefView::m_HasCutItems
private

Definition at line 281 of file CDefView.cpp.

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

◆ m_hContextMenu

HMENU CDefView::m_hContextMenu
private

Definition at line 250 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 249 of file CDefView.cpp.

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

◆ m_hMyComputerIcon

HICON CDefView::m_hMyComputerIcon
private

Definition at line 287 of file CDefView.cpp.

Referenced by CDefView(), and UpdateStatusbarLocation().

◆ m_hNotify

ULONG CDefView::m_hNotify
private

Definition at line 259 of file CDefView.cpp.

Referenced by OnCreate(), and OnDestroy().

◆ m_hWndParent

HWND CDefView::m_hWndParent
private

Definition at line 245 of file CDefView.cpp.

Referenced by CreateViewWindow3(), and Exec().

◆ m_iDragOverItem

LONG CDefView::m_iDragOverItem
private

Definition at line 268 of file CDefView.cpp.

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

◆ m_isEditing

BOOL CDefView::m_isEditing
private

Definition at line 277 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 257 of file CDefView.cpp.

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

◆ m_ListView

◆ m_LoadColumnsList

HDPA CDefView::m_LoadColumnsList
private

Definition at line 256 of file CDefView.cpp.

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

◆ m_pAdvSink

CComPtr<IAdviseSink> CDefView::m_pAdvSink
private

Definition at line 263 of file CDefView.cpp.

Referenced by GetAdvise(), and SetAdvise().

◆ m_pCM

CComPtr<IContextMenu> CDefView::m_pCM
private

Definition at line 274 of file CDefView.cpp.

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

◆ m_pCommDlgBrowser

◆ m_pCurDataObject

CComPtr<IDataObject> CDefView::m_pCurDataObject
private

Definition at line 267 of file CDefView.cpp.

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

◆ m_pCurDropTarget

CComPtr<IDropTarget> CDefView::m_pCurDropTarget
private

Definition at line 266 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 275 of file CDefView.cpp.

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

◆ m_pFolderFilter

CComPtr<IFolderFilter> CDefView::m_pFolderFilter
private

Definition at line 241 of file CDefView.cpp.

Referenced by IncludeObject(), and SetCallback().

◆ m_pidlParent

PIDLIST_ABSOLUTE CDefView::m_pidlParent
private

Definition at line 255 of file CDefView.cpp.

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

◆ m_pSDParent

CComPtr<IShellDetails> CDefView::m_pSDParent
private

Definition at line 237 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 238 of file CDefView.cpp.

Referenced by _DoFolderViewCB(), and SetCallback().

◆ m_pShellFolderViewDual

CComPtr<IShellFolderViewDual> CDefView::m_pShellFolderViewDual
private

Definition at line 242 of file CDefView.cpp.

Referenced by GetItemObject().

◆ m_pSourceDataObject

CComPtr<IDataObject> CDefView::m_pSourceDataObject
private

Definition at line 265 of file CDefView.cpp.

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

◆ m_ptFirstMousePos

POINT CDefView::m_ptFirstMousePos
private

Definition at line 271 of file CDefView.cpp.

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

◆ m_ptLastMousePos

POINT CDefView::m_ptLastMousePos
private

Definition at line 270 of file CDefView.cpp.

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

◆ m_ScheduledStatusbarUpdate

bool CDefView::m_ScheduledStatusbarUpdate
private

Definition at line 280 of file CDefView.cpp.

Referenced by OnNotify(), and OnUpdateStatusbar().

◆ m_sortInfo

◆ m_SpecialFolder

signed char CDefView::m_SpecialFolder
private

Definition at line 278 of file CDefView.cpp.

Referenced by IsSpecialFolder(), and OnCreate().

◆ m_uState

UINT CDefView::m_uState
private

Definition at line 252 of file CDefView.cpp.

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

◆ m_viewinfo_data

SFVM_CUSTOMVIEWINFO_DATA CDefView::m_viewinfo_data
private

Definition at line 285 of file CDefView.cpp.

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


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