ReactOS 0.4.16-dev-1946-g52006dd
CDefView Class Reference
Inheritance diagram for CDefView:
Collaboration diagram for CDefView:

Public Member Functions

 CDefView ()
 
 ~CDefView ()
 
HRESULT WINAPI Initialize (IShellFolder *shellFolder)
 
HRESULT IncludeObject (PCUITEMID_CHILD pidl)
 
HRESULT OnDefaultCommand ()
 
HRESULT OnStateChange (UINT uFlags)
 
void UpdateStatusbar ()
 
void UpdateStatusbarLocation ()
 
void CheckToolbar ()
 
BOOL CreateList ()
 
void UpdateListColors ()
 
BOOL InitList ()
 
HRESULT MapFolderColumnToListColumn (UINT FoldCol)
 
HRESULT MapListColumnToFolderColumn (UINT ListCol)
 
HRESULT GetDetailsByFolderColumn (PCUITEMID_CHILD pidl, UINT FoldCol, SHELLDETAILS &sd)
 
HRESULT GetDetailsByListColumn (PCUITEMID_CHILD pidl, UINT ListCol, SHELLDETAILS &sd)
 
HRESULT LoadColumn (UINT FoldCol, UINT ListCol, BOOL Insert, UINT ForceWidth=0)
 
HRESULT LoadColumns (SIZE_T *pColList=NULL, UINT ColListCount=0)
 
void ColumnListChanged ()
 
SFGAOF GetItemAttributes (PCUITEMID_CHILD pidl, UINT Query)
 
SFGAOF GetItemAttributes (int i, UINT Query)
 
void RefreshGhostedState ()
 
PCUITEMID_CHILD _PidlByItem (int i)
 
PCUITEMID_CHILD _PidlByItem (LVITEM &lvItem)
 
int LV_FindItemByPidl (PCUITEMID_CHILD pidl)
 
int LV_AddItem (PCUITEMID_CHILD pidl)
 
BOOLEAN LV_DeleteItem (PCUITEMID_CHILD pidl)
 
BOOLEAN LV_RenameItem (PCUITEMID_CHILD pidlOld, PCUITEMID_CHILD pidlNew)
 
BOOL LV_UpdateItem (INT nItem, PCUITEMID_CHILD pidl)
 
BOOL LV_UpdateItem (PCUITEMID_CHILD pidl)
 
void LV_RefreshIcon (INT iItem)
 
void LV_RefreshIcons ()
 
HRESULT FillList (BOOL IsRefreshCommand=TRUE)
 
HRESULT FillFileMenu ()
 
HRESULT FillEditMenu ()
 
HRESULT FillViewMenu ()
 
HRESULT FillArrangeAsMenu (HMENU hmenuArrange)
 
HRESULT CheckViewMode (HMENU hmenuView)
 
LRESULT DoColumnContextMenu (LRESULT lParam)
 
HRESULT SelectAndPositionItem (int Idx, UINT fSVSI, POINT *ppt)
 
UINT GetSelections ()
 
SFGAOF GetSelectionAttributes (SFGAOF Query)
 
HRESULT OpenSelectedItems (PCSTR pszVerb=NULL)
 
void OnDeactivate ()
 
void DoActivate (UINT uState)
 
HRESULT drag_notify_subitem (DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
 
HRESULT InvokeContextMenuCommand (CComPtr< IContextMenu > &pCM, LPCSTR lpVerb, POINT *pt=NULL, bool TryMapVerb=false)
 
LRESULT OnExplorerCommand (UINT uCommand, BOOL bUseSelection)
 
FOLDERVIEWMODE GetDefaultViewMode ()
 
HRESULT GetDefaultViewStream (DWORD Stgm, IStream **ppStream)
 
HRESULT LoadViewState ()
 
HRESULT SaveViewState (IStream *pStream)
 
void UpdateFolderViewFlags ()
 
UINT GetItemActivateFlags ()
 
DWORD GetCommDlgViewFlags ()
 
STDMETHOD() GetWindow (HWND *lphwnd) override
 
STDMETHOD() ContextSensitiveHelp (BOOL fEnterMode) override
 
STDMETHOD() TranslateAccelerator (MSG *pmsg) override
 
STDMETHOD() EnableModeless (BOOL fEnable) override
 
STDMETHOD() UIActivate (UINT uState) override
 
STDMETHOD() Refresh () override
 
STDMETHOD() CreateViewWindow (IShellView *psvPrevious, LPCFOLDERSETTINGS pfs, IShellBrowser *psb, RECT *prcView, HWND *phWnd) override
 
STDMETHOD() DestroyViewWindow () override
 
STDMETHOD() GetCurrentInfo (LPFOLDERSETTINGS pfs) override
 
STDMETHOD() AddPropertySheetPages (DWORD dwReserved, LPFNSVADDPROPSHEETPAGE pfn, LPARAM lparam) override
 
STDMETHOD() SaveViewState () override
 
STDMETHOD() SelectItem (PCUITEMID_CHILD pidlItem, SVSIF uFlags) override
 
STDMETHOD() GetItemObject (UINT uItem, REFIID riid, void **ppv) override
 
STDMETHOD() GetView (SHELLVIEWID *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 225 of file CDefView.cpp.

Constructor & Destructor Documentation

◆ CDefView()

CDefView::CDefView ( )

Definition at line 604 of file CDefView.cpp.

604 :
605 m_ListView(),
607 m_hMenu(NULL),
612 m_uState(0),
613 m_cidl(0),
614 m_apidl(NULL),
617 m_hNotify(0),
618 m_hAccel(NULL),
619 m_dwAspects(0),
620 m_dwAdvf(0),
624 m_SpecialFolder(-1),
625 m_isFullStatusBar(true),
627 m_HasCutItems(false),
629{
636
640}
#define shell32_hInstance
HMENU m_hMenu
Definition: CDefView.cpp:250
HDPA m_LoadColumnsList
Definition: CDefView.cpp:259
bool m_ScheduledStatusbarUpdate
Definition: CDefView.cpp:283
HMENU m_hMenuArrangeModes
Definition: CDefView.cpp:251
bool m_isFullStatusBar
Definition: CDefView.cpp:282
HWND m_hWndParent
Definition: CDefView.cpp:248
DWORD m_dwAdvf
Definition: CDefView.cpp:265
DWORD m_dwAspects
Definition: CDefView.cpp:264
UINT m_cScrollDelay
Definition: CDefView.cpp:272
LISTVIEW_SORT_INFO m_sortInfo
Definition: CDefView.cpp:261
PIDLIST_ABSOLUTE m_pidlParent
Definition: CDefView.cpp:258
HMENU m_hContextMenu
Definition: CDefView.cpp:253
BOOL m_Destroyed
Definition: CDefView.cpp:287
PCUITEMID_CHILD * m_apidl
Definition: CDefView.cpp:257
HDPA m_ListToFolderColMap
Definition: CDefView.cpp:260
CLSID m_Category
Definition: CDefView.cpp:286
signed char m_SpecialFolder
Definition: CDefView.cpp:281
HICON m_hMyComputerIcon
Definition: CDefView.cpp:290
BOOL m_bmenuBarInitialized
Definition: CDefView.cpp:254
UINT m_cidl
Definition: CDefView.cpp:256
UINT m_uState
Definition: CDefView.cpp:255
BOOL m_isEditing
Definition: CDefView.cpp:280
POINT m_ptLastMousePos
Definition: CDefView.cpp:273
ULONG m_hNotify
Definition: CDefView.cpp:262
bool m_HasCutItems
Definition: CDefView.cpp:284
LONG m_iDragOverItem
Definition: CDefView.cpp:271
HMENU m_hMenuViewModes
Definition: CDefView.cpp:252
HACCEL m_hAccel
Definition: CDefView.cpp:263
FOLDERSETTINGS m_FolderSettings
Definition: CDefView.cpp:249
CListView m_ListView
Definition: CDefView.cpp:247
SFVM_CUSTOMVIEWINFO_DATA m_viewinfo_data
Definition: CDefView.cpp:288
#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:2427

◆ ~CDefView()

CDefView::~CDefView ( )

Definition at line 642 of file CDefView.cpp.

643{
644 TRACE(" destroying IShellView(%p)\n", this);
645
647
649 {
652 }
653
654 if (m_hWnd)
655 {
657 }
658
662}
#define SFVM_VIEWRELEASE
HWND m_hWnd
Definition: atlwin.h:273
STDMETHOD() DestroyViewWindow() override
Definition: CDefView.cpp:3228
HRESULT _DoFolderViewCB(UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: CDefView.cpp:4809
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 2490 of file CDefView.cpp.

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

Referenced by OnCommand().

◆ _DoFolderViewCB()

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

Definition at line 4809 of file CDefView.cpp.

4810{
4812
4814 {
4815 hr = m_pShellFolderViewCB->MessageSFVCB(uMsg, wParam, lParam);
4816 }
4817
4818 return hr;
4819}
CComPtr< IShellFolderViewCB > m_pShellFolderViewCB
Definition: CDefView.cpp:241
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 4465 of file CDefView.cpp.

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

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

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

◆ _GetSnapToGrid()

HRESULT CDefView::_GetSnapToGrid ( )
private

Definition at line 3758 of file CDefView.cpp.

3759{
3760 DWORD dwExStyle = (DWORD)m_ListView.SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
3761 return ((dwExStyle & LVS_EX_SNAPTOGRID) ? S_OK : S_FALSE);
3762}
#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 4535 of file CDefView.cpp.

4536{
4537 LRESULT lResult;
4538
4539 if (!m_isFullStatusBar)
4540 {
4541 int nPartArray[] = {-1};
4542 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETPARTS, _countof(nPartArray), (LPARAM)nPartArray, &lResult);
4543 return;
4544 }
4545
4546 int nFileSizePartLength = 125;
4547 const int nLocationPartLength = 150;
4548 const int nRightPartsLength = nFileSizePartLength + nLocationPartLength;
4549 int nObjectsPartLength = nWidth - nRightPartsLength;
4550
4551 // If the window is small enough just divide each part into thirds
4552 // to match the behavior of Windows Server 2003
4553 if (nObjectsPartLength <= nLocationPartLength)
4554 nObjectsPartLength = nFileSizePartLength = nWidth / 3;
4555
4556 int nPartArray[] = {nObjectsPartLength, nObjectsPartLength + nFileSizePartLength, -1};
4557
4558 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETPARTS, _countof(nPartArray), (LPARAM)nPartArray, &lResult);
4559}
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 4782 of file CDefView.cpp.

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

4590{
4591 // get insertable index from position
4593
4594 // create identity mapping of indexes
4596 INT nCount = m_ListView.GetItemCount();
4597 for (INT i = 0; i < nCount; ++i)
4598 {
4599 array.Add(i);
4600 }
4601
4602 // re-ordering mapping
4603 INT iItem = -1;
4604 while ((iItem = m_ListView.GetNextItem(iItem, LVNI_SELECTED)) >= 0)
4605 {
4606 INT iFrom = iItem, iTo = iPosition;
4607 if (iFrom < iTo)
4608 --iTo;
4609 if (iFrom >= nCount)
4610 iFrom = nCount - 1;
4611 if (iTo >= nCount)
4612 iTo = nCount - 1;
4613
4614 // shift indexes by swapping (like a bucket relay)
4615 if (iFrom < iTo)
4616 {
4617 for (INT i = iFrom; i < iTo; ++i)
4618 {
4619 // swap array[i] and array[i + 1]
4620 INT tmp = array[i];
4621 array[i] = array[i + 1];
4622 array[i + 1] = tmp;
4623 }
4624 }
4625 else
4626 {
4627 for (INT i = iFrom; i > iTo; --i)
4628 {
4629 // swap array[i] and array[i - 1]
4630 INT tmp = array[i];
4631 array[i] = array[i - 1];
4632 array[i - 1] = tmp;
4633 }
4634 }
4635 }
4636
4637 // create mapping (ListView's lParam to index) from array
4639 for (INT i = 0; i < nCount; ++i)
4640 {
4642 map.Add(lParam, i);
4643 }
4644
4645 // finally sort
4647}
static INT CALLBACK SelectionMoveCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
Definition: CDefView.cpp:4578
INT _FindInsertableIndexFromPoint(POINT pt)
Definition: CDefView.cpp:4465
int GetNextItem(int i, WORD flags)
Definition: rosctrls.h:161
BOOL SortItems(PFNLVCOMPARE pfnCompare, PVOID lParam)
Definition: rosctrls.h:141
DWORD_PTR GetItemData(int i)
Definition: rosctrls.h:204
Definition: _map.h:48
#define LVNI_SELECTED
Definition: commctrl.h:2429

Referenced by Drop().

◆ _PidlByItem() [1/2]

PCUITEMID_CHILD CDefView::_PidlByItem ( int  i)

Definition at line 1334 of file CDefView.cpp.

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

1342{
1343 if (!m_ListView)
1344 return nullptr;
1345 return reinterpret_cast<PCUITEMID_CHILD>(lvItem.lParam);
1346}

◆ _Sort()

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

Definition at line 1270 of file CDefView.cpp.

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

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

3289{
3290 TRACE("(%p)->(0x%lX, %p, %p)\n", this, dwReserved, lpfn, lparam);
3291
3294 return S_OK;
3295}
@ lparam
Definition: SystemMenu.c:31
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95
#define SFVM_ADDPROPERTYPAGES
Definition: shlobj.h:1340

◆ ArrangeGrid()

HRESULT STDMETHODCALLTYPE CDefView::ArrangeGrid ( )
override

Definition at line 3974 of file CDefView.cpp.

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

Referenced by OnCommand().

◆ AutoArrange()

HRESULT STDMETHODCALLTYPE CDefView::AutoArrange ( )
override

Definition at line 3980 of file CDefView.cpp.

3981{
3982 m_ListView.ModifyStyle(0, LVS_AUTOARRANGE);
3984 return S_OK;
3985}
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 724 of file CDefView.cpp.

725{
727
728 TRACE("\n");
729
730 if (m_pCommDlgBrowser != NULL)
731 {
732 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_CHECKBUTTON,
734 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_CHECKBUTTON,
736 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON,
738 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON,
740 }
741}
CComPtr< ICommDlgBrowser > m_pCommDlgBrowser
Definition: CDefView.cpp:243
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 1988 of file CDefView.cpp.

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

1191{
1193 m_ListToFolderColMap = NULL; // No cache while we are building the cache
1195 for (UINT i = 0;; ++i)
1196 {
1198 if (FAILED(hr))
1199 break; // No more columns
1200 if (!DPA_SetPtr(cache, i, (void*)(INT_PTR) hr))
1201 break; // Cannot allow holes in the cache, must stop now.
1202 }
1204
1205 for (;;)
1206 {
1208 break;
1209 }
1211 if (hMenu)
1212 {
1213 hMenu = GetSubmenuByID(hMenu, FCIDM_SHVIEW_ARRANGE);
1214 for (UINT i = DVIDM_ARRANGESORT_FIRST; i <= DVIDM_ARRANGESORT_LAST && hMenu; ++i)
1215 {
1216 RemoveMenu(hMenu, i, MF_BYCOMMAND);
1217 }
1218 if ((int) GetMenuItemID(hMenu, 0) <= 0)
1219 RemoveMenu(hMenu, 0, MF_BYPOSITION); // Separator
1220 }
1222 LVCOLUMN lvc;
1223 lvc.mask = LVCF_TEXT;
1224 lvc.pszText = buf;
1225 lvc.cchTextMax = _countof(buf);
1226 for (UINT listCol = 0; listCol < DEFVIEW_ARRANGESORT_MAXENUM; ++listCol)
1227 {
1228 if (!ListView_GetColumn(m_ListView.m_hWnd, listCol, &lvc))
1229 break;
1230 HRESULT foldCol = MapListColumnToFolderColumn(listCol);
1231 assert(SUCCEEDED(foldCol));
1234 DVIDM_ARRANGESORT_FIRST + listCol, lvc.pszText, listCol);
1235 }
1236
1237 ListView_RedrawItems(m_ListView.m_hWnd, 0, 0x7fffffff);
1238 m_ListView.InvalidateRect(NULL, TRUE);
1239}
static BOOL AppendMenuItem(HMENU hMenu, UINT MF, UINT Id, LPCWSTR String, SIZE_T Data=0)
Definition: CDefView.cpp:158
@ DVIDM_ARRANGESORT_FIRST
Definition: CDefView.cpp:50
@ DEFVIEW_ARRANGESORT_MAXENUM
Definition: CDefView.cpp:47
@ DVIDM_ARRANGESORT_LAST
Definition: CDefView.cpp:49
static HMENU GetSubmenuByID(HMENU hmenu, UINT id)
Definition: CDefView.cpp:182
BOOL WINAPI DPA_SetPtr(HDPA hdpa, INT i, LPVOID p)
Definition: dpa.c:626
BOOL WINAPI DPA_DeleteAllPtrs(HDPA hdpa)
Definition: dpa.c:730
#define MAX_PATH
Definition: compat.h:34
#define assert(x)
Definition: debug.h:53
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define SUCCEEDED(hr)
Definition: intsafe.h:50
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c: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:637
#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 3157 of file CDefView.cpp.

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

◆ CreateList()

BOOL CDefView::CreateList ( )

Definition at line 852 of file CDefView.cpp.

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

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

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

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

3838{
3839 OLEMENUGROUPWIDTHS omw = { { 0, 0, 0, 0, 0, 0 } };
3840 const UINT SUPPORTED_SV3CVW3 = SV3CVW3_FORCEVIEWMODE | SV3CVW3_FORCEFOLDERFLAGS;
3841 const UINT IGNORE_FWF = FWF_OWNERDATA; // FIXME: Support this
3842
3843 *hwnd = NULL;
3844
3845 TRACE("(%p)->(shlview=%p shlbrs=%p rec=%p hwnd=%p vmode=%x flags=%x)\n", this, psvPrevious, psb, prcView, hwnd, mode, flags);
3846 if (prcView != NULL)
3847 TRACE("-- left=%i top=%i right=%i bottom=%i\n", prcView->left, prcView->top, prcView->right, prcView->bottom);
3848
3849 /* Validate the Shell Browser */
3850 if (psb == NULL || m_hWnd)
3851 return E_UNEXPECTED;
3852
3853 if (view_flags & ~SUPPORTED_SV3CVW3)
3854 FIXME("unsupported view flags 0x%08x\n", view_flags & ~SUPPORTED_SV3CVW3);
3855
3856 /* Set up the member variables */
3857 m_pShellBrowser = psb;
3859 m_FolderSettings.fFlags = (mask & flags) & ~IGNORE_FWF;
3860
3861 if (view_id)
3862 {
3865 mode = temp;
3866 else if (*view_id == VID_Default)
3867 mode = FVM_AUTO;
3868 else
3869 FIXME("Ignoring unrecognized VID %s\n", debugstr_guid(view_id));
3870 }
3871 if (mode == FVM_AUTO)
3873
3875 {
3877 ? "unsupported" : "invalid", m_FolderSettings.ViewMode);
3879 }
3880 const UINT requestedViewMode = m_FolderSettings.ViewMode;
3881
3882 /* Get our parent window */
3883 m_pShellBrowser->GetWindow(&m_hWndParent);
3885
3886 /* Try to get the ICommDlgBrowserInterface, adds a reference !!! */
3889 {
3890 TRACE("-- CommDlgBrowser\n");
3891 }
3892
3893 LoadViewState();
3894 if (view_flags & SV3CVW3_FORCEVIEWMODE)
3895 m_FolderSettings.ViewMode = requestedViewMode;
3896 if (view_flags & SV3CVW3_FORCEFOLDERFLAGS)
3897 m_FolderSettings.fFlags = (mask & flags) & ~IGNORE_FWF;
3898
3899 RECT rcView = *prcView;
3901 if (m_hWnd == NULL)
3902 return E_FAIL;
3903
3904 *hwnd = m_hWnd;
3905
3906 CheckToolbar();
3907
3908 if (!*hwnd)
3909 return E_FAIL;
3910
3912
3914 UpdateWindow();
3915
3916 if (!m_hMenu)
3917 {
3918 m_hMenu = CreateMenu();
3919 m_pShellBrowser->InsertMenusSB(m_hMenu, &omw);
3920 TRACE("-- after fnInsertMenusSB\n");
3921 }
3922
3923 _MergeToolbar();
3924
3925 return S_OK;
3926}
HRESULT ShellViewIdToFolderViewMode(const SHELLVIEWID *pVid)
const SHELLVIEWID * FolderViewModeToShellViewId(UINT FVM)
#define VID_Default
Definition: CDefView.cpp:221
#define U(x)
Definition: wordpad.c:45
@ Create
Definition: registry.c:563
BOOL UpdateWindow()
Definition: atlwin.h:1345
HRESULT _MergeToolbar()
Definition: CDefView.cpp:4782
void CheckToolbar()
Definition: CDefView.cpp:724
FOLDERVIEWMODE GetDefaultViewMode()
Definition: CDefView.cpp:3600
HRESULT LoadViewState()
Definition: CDefView.cpp:3336
static bool IsSupportedFolderViewMode(int Mode)
Definition: CDefView.cpp:380
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:1313
#define SFVM_HWNDMAIN
Definition: shlobj.h:1339
@ 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 3228 of file CDefView.cpp.

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

Referenced by ~CDefView().

◆ DoActivate()

void CDefView::DoActivate ( UINT  uState)

Definition at line 2456 of file CDefView.cpp.

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

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

◆ DoColumnContextMenu()

LRESULT CDefView::DoColumnContextMenu ( LRESULT  lParam)

Definition at line 2001 of file CDefView.cpp.

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

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

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

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

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

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

◆ Drop()

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

Implements IDropTarget.

Definition at line 4649 of file CDefView.cpp.

4650{
4653
4654 if ((IsDropOnSource(NULL) == S_OK) &&
4655 (*pdwEffect & DROPEFFECT_MOVE) &&
4657 {
4658 if (m_pCurDropTarget)
4659 {
4660 m_pCurDropTarget->DragLeave();
4662 }
4663
4664 POINT ptDrop = { pt.x, pt.y };
4665 ::ScreenToClient(m_ListView, &ptDrop);
4667 m_ptLastMousePos = ptDrop;
4668
4670 if (m_ListView.GetStyle() & LVS_AUTOARRANGE)
4671 {
4673 }
4674 else
4675 {
4676 POINT ptItem;
4677 INT iItem = -1;
4678 while ((iItem = m_ListView.GetNextItem(iItem, LVNI_SELECTED)) >= 0)
4679 {
4680 if (m_ListView.GetItemPosition(iItem, &ptItem))
4681 {
4684 m_ListView.SetItemPosition(iItem, &ptItem);
4685 }
4686 }
4687 }
4689 }
4690 else if (m_pCurDropTarget)
4691 {
4692 m_pCurDropTarget->Drop(pDataObject, grfKeyState, pt, pdwEffect);
4694 }
4695
4697 m_iDragOverItem = 0;
4698 return S_OK;
4699}
POINT m_ptFirstMousePos
Definition: CDefView.cpp:274
STDMETHOD() IsDropOnSource(IDropTarget *drop_target) override
Definition: CDefView.cpp:4089
void _MoveSelectionOnAutoArrange(POINT pt)
Definition: CDefView.cpp:4589
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 3181 of file CDefView.cpp.

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

◆ Exec()

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

Implements IOleCommandTarget.

Definition at line 4220 of file CDefView.cpp.

4221{
4222 FIXME("(%p)->(\n\tTarget GUID:%s Command:0x%08x Opt:0x%08x %p %p)\n",
4223 this, debugstr_guid(pguidCmdGroup), nCmdID, nCmdexecopt, pvaIn, pvaOut);
4224
4225 if (!pguidCmdGroup)
4226 return OLECMDERR_E_UNKNOWNGROUP;
4227
4228 if (IsEqualCLSID(*pguidCmdGroup, m_Category))
4229 {
4230 if (nCmdID == FCIDM_SHVIEW_AUTOARRANGE)
4231 {
4232 if (V_VT(pvaIn) != VT_INT_PTR)
4233 return OLECMDERR_E_NOTSUPPORTED;
4234
4236 params.cbSize = sizeof(params);
4237 params.rcExclude = *(RECT*) V_INTREF(pvaIn);
4238
4239 if (m_hMenuViewModes)
4240 {
4241 // Duplicate all but the last two items of the view modes menu
4242 HMENU hmenuViewPopup = CreatePopupMenu();
4243 Shell_MergeMenus(hmenuViewPopup, m_hMenuViewModes, 0, 0, 0xFFFF, 0);
4244 DeleteMenu(hmenuViewPopup, GetMenuItemCount(hmenuViewPopup) - 1, MF_BYPOSITION);
4245 DeleteMenu(hmenuViewPopup, GetMenuItemCount(hmenuViewPopup) - 1, MF_BYPOSITION);
4246 CheckViewMode(hmenuViewPopup);
4247 TrackPopupMenuEx(hmenuViewPopup, TPM_LEFTALIGN | TPM_TOPALIGN, params.rcExclude.left, params.rcExclude.bottom, m_hWndParent, &params);
4248 ::DestroyMenu(hmenuViewPopup);
4249 }
4250
4251 // pvaOut is VT_I4 with value 0x403 (cmd id of the new mode maybe?)
4252 V_VT(pvaOut) = VT_I4;
4253 V_I4(pvaOut) = 0x403;
4254 }
4255 }
4256
4257 if (IsEqualIID(*pguidCmdGroup, CGID_Explorer) &&
4258 (nCmdID == 0x29) &&
4259 (nCmdexecopt == 4) && pvaOut)
4260 return S_OK;
4261
4262 if (IsEqualIID(*pguidCmdGroup, CGID_ShellDocView) &&
4263 (nCmdID == 9) &&
4264 (nCmdexecopt == 0))
4265 return 1;
4266
4267 if (IsEqualIID(*pguidCmdGroup, CGID_DefView))
4268 {
4269 CComPtr<IStream> pStream;
4270 WCHAR SubKey[MAX_PATH];
4271 switch (nCmdID)
4272 {
4274 SHDeleteKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\ShellNoRoam\\Bags");
4276 SaveViewState(pStream);
4277 return S_OK;
4279 PathCombineW(SubKey, REGSTR_PATH_EXPLORER, L"Streams\\Default");
4281 SHDeleteKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\ShellNoRoam\\Bags");
4282 m_FolderSettings.fFlags |= FWF_NOBROWSERVIEWSTATE; // Don't let this folder save itself
4283 return S_OK;
4284 }
4285 }
4286
4287 return OLECMDERR_E_UNKNOWNGROUP;
4288}
STDMETHOD() SaveViewState() override
Definition: CDefView.cpp:3471
HRESULT CheckViewMode(HMENU hmenuView)
Definition: CDefView.cpp:1988
HRESULT GetDefaultViewStream(DWORD Stgm, IStream **ppStream)
Definition: CDefView.cpp:3311
@ VT_I4
Definition: compat.h:2298
@ VT_INT_PTR
Definition: compat.h:2327
GLenum const GLfloat * params
Definition: glext.h:5645
#define STGM_WRITE
Definition: objbase.h:918
#define V_VT(A)
Definition: oleauto.h:211
#define V_I4(A)
Definition: oleauto.h:247
#define V_INTREF(A)
Definition: oleauto.h:252
#define PathCombineW
Definition: pathcch.h: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 1524 of file CDefView.cpp.

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

1933{
1934 bool forceMerge = false;
1936
1937 // Make sure the column we currently sort by is in the menu
1940 {
1944 LVCOLUMN lvc;
1945 lvc.mask = LVCF_TEXT;
1946 lvc.pszText = buf;
1947 lvc.cchTextMax = _countof(buf);
1948 currentSortId = DVIDM_ARRANGESORT_LAST;
1949 forceMerge = true;
1951 AppendMenuItem(m_hMenuArrangeModes, MF_STRING, currentSortId, lvc.pszText, m_sortInfo.ListColumn);
1952 }
1953
1954 // Prepend the sort-by items unless they are aleady there
1955 if (GetMenuItemID(hmenuArrange, 0) == FCIDM_SHVIEW_AUTOARRANGE || forceMerge)
1956 {
1957 Shell_MergeMenus(hmenuArrange, m_hMenuArrangeModes, 0, 0, 0xFFFF, MM_ADDSEPARATOR);
1958 }
1959
1960 CheckMenuRadioItem(hmenuArrange,
1962 currentSortId, MF_BYCOMMAND);
1963
1965 {
1968 }
1969 else
1970 {
1973
1974 if (GetAutoArrange() == S_OK)
1976 else
1978
1979 if (_GetSnapToGrid() == S_OK)
1981 else
1983 }
1984
1985 return S_OK;
1986}
@ DEFVIEW_ARRANGESORT_MAX
Definition: CDefView.cpp:48
STDMETHOD() GetAutoArrange() override
Definition: CDefView.cpp:3753
HRESULT _GetSnapToGrid()
Definition: CDefView.cpp:3758
#define C_ASSERT(e)
Definition: intsafe.h:73
#define MM_ADDSEPARATOR
Definition: shlobj.h:2534
#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 1899 of file CDefView.cpp.

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

Referenced by DoActivate().

◆ FillFileMenu()

HRESULT CDefView::FillFileMenu ( )

Definition at line 1853 of file CDefView.cpp.

1854{
1856 if (!hFileMenu)
1857 return E_FAIL;
1858
1859 /* Cleanup the items added previously */
1860 for (int i = GetMenuItemCount(hFileMenu) - 1; i >= 0; i--)
1861 {
1862 UINT id = GetMenuItemID(hFileMenu, i);
1863 if (id < FCIDM_BROWSERFIRST || id > FCIDM_BROWSERLAST)
1864 DeleteMenu(hFileMenu, i, MF_BYPOSITION);
1865 }
1866
1867 // In case we still have this left over, clean it up
1868 if (m_pFileMenu)
1869 {
1872 }
1873 UINT selcount = m_ListView.GetSelectedCount();
1874 // Store context menu in m_pFileMenu and keep it to invoke the selected command later on
1877 return hr;
1878
1880
1882 hr = m_pFileMenu->QueryContextMenu(hmenu, 0, DVIDM_CONTEXTMENU_FIRST, DVIDM_CONTEXTMENU_LAST, cmf);
1884 return hr;
1885
1886 // TODO: filter or something
1887 if (!selcount)
1888 {
1892 }
1893
1894 Shell_MergeMenus(hFileMenu, hmenu, 0, 0, 0xFFFF, MM_ADDSEPARATOR | MM_SUBMENUSHAVEIDS);
1896 return S_OK;
1897}
static UINT GetContextMenuFlags(IShellBrowser *pSB, SFGAOF sfgao)
Definition: CDefView.cpp:105
@ 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:3550
CComPtr< IContextMenu > m_pFileMenu
Definition: CDefView.cpp:278
SFGAOF GetSelectionAttributes(SFGAOF Query)
Definition: CDefView.cpp:2141
UINT GetSelectedCount()
Definition: rosctrls.h:136
@ SVGIO_SELECTION
Definition: shobjidl.idl:744
@ SVGIO_BACKGROUND
Definition: shobjidl.idl:743
static HMENU hmenu
Definition: win.c:66
#define FCIDM_BROWSERLAST
Definition: shlobj.h:628
#define MM_SUBMENUSHAVEIDS
Definition: shlobj.h:2535
#define FCIDM_MENU_FILE
Definition: shlobj.h:635
#define FCIDM_SHVIEW_REFRESH
Definition: shresdef.h:897
#define FCIDM_SHVIEW_VIEW
Definition: shresdef.h:866

Referenced by OnInitMenuPopup().

◆ FillList()

HRESULT CDefView::FillList ( BOOL  IsRefreshCommand = TRUE)

Definition at line 1541 of file CDefView.cpp.

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

Referenced by OnCreate(), and Refresh().

◆ FillViewMenu()

HRESULT CDefView::FillViewMenu ( )

Definition at line 1916 of file CDefView.cpp.

1917{
1919 if (!hViewMenu)
1920 return E_FAIL;
1921
1923 if (!m_hMenuViewModes)
1924 return E_FAIL;
1925
1928
1929 return S_OK;
1930}
DWORD WINAPI SHMenuIndexFromID(HMENU hMenu, UINT uID)
Definition: ordinal.c:4725
#define FCIDM_MENU_VIEW_SEP_OPTIONS
Definition: shlobj.h:638
#define MM_DONTREMOVESEPS
Definition: shlobj.h:2536

Referenced by DoActivate().

◆ Freeze()

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

Implements IViewObject.

Definition at line 4732 of file CDefView.cpp.

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

◆ GetAdvise()

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

Implements IViewObject.

Definition at line 4756 of file CDefView.cpp.

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

◆ GetArrangeParam()

HRESULT STDMETHODCALLTYPE CDefView::GetArrangeParam ( LPARAM sort)
override

Definition at line 3967 of file CDefView.cpp.

3968{
3969 int col = m_sortInfo.ListColumn;
3970 *sort = col != LISTVIEW_SORT_INFO::UNSPECIFIEDCOLUMN ? col : 0;
3972}
static struct @506 sort

◆ GetAutoArrange()

HRESULT STDMETHODCALLTYPE CDefView::GetAutoArrange ( )
override

Implements IFolderView.

Definition at line 3753 of file CDefView.cpp.

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

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

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

◆ GetCommDlgViewFlags()

DWORD CDefView::GetCommDlgViewFlags ( )
inline

Definition at line 368 of file CDefView.cpp.

369 {
372 {
373 DWORD flags;
374 if (SUCCEEDED(pcdb2->GetViewFlags(&flags)))
375 return flags;
376 }
377 return 0;
378 }

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

◆ GetCurrentInfo()

HRESULT WINAPI CDefView::GetCurrentInfo ( LPFOLDERSETTINGS  pfs)
override

Implements IShellView.

Definition at line 3276 of file CDefView.cpp.

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

◆ GetCurrentViewMode()

HRESULT STDMETHODCALLTYPE CDefView::GetCurrentViewMode ( UINT pViewMode)
override

Implements IFolderView.

Definition at line 3609 of file CDefView.cpp.

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

Referenced by SaveViewState().

◆ GetDefaultSpacing()

HRESULT STDMETHODCALLTYPE CDefView::GetDefaultSpacing ( POINT ppt)
override

Implements IFolderView.

Definition at line 3748 of file CDefView.cpp.

3749{
3750 return E_NOTIMPL;
3751}

◆ GetDefaultViewMode()

FOLDERVIEWMODE CDefView::GetDefaultViewMode ( )

Definition at line 3600 of file CDefView.cpp.

3601{
3605 mode = temp;
3606 return mode;
3607}
BOOL WINAPI IsOS(DWORD feature)
Definition: ordinal.c:4230
#define OS_SERVERADMINUI
Definition: shlwapi.h:260
#define SFVM_DEFVIEWMODE
Definition: shlobj.h:1323

Referenced by CreateViewWindow3().

◆ GetDefaultViewStream()

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

Definition at line 3311 of file CDefView.cpp.

3312{
3313 CLSID clsid;
3315 if (SUCCEEDED(hr))
3316 {
3317 WCHAR path[MAX_PATH], name[39];
3318 wsprintfW(path, L"%s\\%s", REGSTR_PATH_EXPLORER, L"Streams\\Default");
3320 *ppStream = SHOpenRegStream2W(HKEY_CURRENT_USER, path, name, Stgm);
3321 hr = *ppStream ? S_OK : E_FAIL;
3322 }
3323 return hr;
3324}
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
Definition: compobj.c:2434
HRESULT WINAPI IUnknown_GetClassID(IUnknown *lpUnknown, CLSID *clsid)
Definition: ordinal.c:1457
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 1057 of file CDefView.cpp.

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

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

◆ GetDetailsByListColumn()

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

Definition at line 1079 of file CDefView.cpp.

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

Referenced by OnNotify().

◆ GetDragPoint()

HRESULT STDMETHODCALLTYPE CDefView::GetDragPoint ( POINT pt)
override

Definition at line 4100 of file CDefView.cpp.

4101{
4102 if (!pt)
4103 return E_INVALIDARG;
4104
4106 return S_OK;
4107}

◆ GetDropPoint()

HRESULT STDMETHODCALLTYPE CDefView::GetDropPoint ( POINT pt)
override

Definition at line 4109 of file CDefView.cpp.

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

◆ GetFocusedItem()

HRESULT STDMETHODCALLTYPE CDefView::GetFocusedItem ( int piItem)
override

Implements IFolderView.

Definition at line 3701 of file CDefView.cpp.

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

◆ GetFolder()

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

Implements IFolderView.

Definition at line 3654 of file CDefView.cpp.

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

◆ GetItemActivateFlags()

UINT CDefView::GetItemActivateFlags ( )

Definition at line 3486 of file CDefView.cpp.

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

Referenced by CreateList(), and OnSettingChange().

◆ GetItemAttributes() [1/2]

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

Definition at line 1328 of file CDefView.cpp.

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

◆ GetItemAttributes() [2/2]

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

Definition at line 1322 of file CDefView.cpp.

1323{
1324 SFGAOF Attr = (SFGAOF)Query;
1325 return SUCCEEDED(m_pSFParent->GetAttributesOf(1, &pidl, &Attr)) ? (Attr & Query) : 0;
1326}

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

3551{
3553
3554 TRACE("(%p)->(uItem=0x%08x,\n\tIID=%s, ppv=%p)\n", this, uItem, debugstr_guid(&riid), ppvOut);
3555
3556 if (!ppvOut)
3557 return E_INVALIDARG;
3558
3559 *ppvOut = NULL;
3560
3561 switch (uItem)
3562 {
3563 case SVGIO_BACKGROUND:
3564 if (IsEqualIID(riid, IID_IContextMenu))
3565 {
3568 return hr;
3569
3570 IUnknown_SetSite(*((IUnknown**)ppvOut), (IShellView *)this);
3571 }
3572 else if (IsEqualIID(riid, IID_IDispatch))
3573 {
3575 {
3578 return hr;
3579 }
3580 hr = m_pShellFolderViewDual->QueryInterface(riid, ppvOut);
3581 }
3582 break;
3583 case SVGIO_SELECTION:
3584 GetSelections();
3585 hr = m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, m_apidl, riid, 0, ppvOut);
3587 return hr;
3588
3589 if (IsEqualIID(riid, IID_IContextMenu))
3590 IUnknown_SetSite(*((IUnknown**)ppvOut), (IShellView *)this);
3591
3592 break;
3593 }
3594
3595 TRACE("-- (%p)->(interface=%p)\n", this, *ppvOut);
3596
3597 return hr;
3598}
HRESULT CDefViewBckgrndMenu_CreateInstance(IShellFolder *psf, REFIID riid, void **ppv)
HRESULT WINAPI CDefViewDual_Constructor(REFIID riid, LPVOID *ppvOut)
CComPtr< IShellFolderViewDual > m_pShellFolderViewDual
Definition: CDefView.cpp:245
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 3710 of file CDefView.cpp.

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

◆ GetItemSpacing()

HRESULT STDMETHODCALLTYPE CDefView::GetItemSpacing ( ITEMSPACING spacing)
override

Definition at line 4163 of file CDefView.cpp.

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

◆ GetObject()

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

Definition at line 3999 of file CDefView.cpp.

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

◆ GetObjectCount()

HRESULT STDMETHODCALLTYPE CDefView::GetObjectCount ( UINT count)
override

Definition at line 4029 of file CDefView.cpp.

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

◆ GetSelectedCount()

HRESULT STDMETHODCALLTYPE CDefView::GetSelectedCount ( UINT count)
override

Definition at line 4062 of file CDefView.cpp.

4063{
4065 return S_OK;
4066}

◆ GetSelectedObjects()

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

Definition at line 4068 of file CDefView.cpp.

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

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

Referenced by FillFileMenu(), and OnContextMenu().

◆ GetSelectionMarkedItem()

HRESULT STDMETHODCALLTYPE CDefView::GetSelectionMarkedItem ( int piItem)
override

Implements IFolderView.

Definition at line 3692 of file CDefView.cpp.

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

◆ GetSelections()

UINT CDefView::GetSelections ( )

Definition at line 2108 of file CDefView.cpp.

2109{
2111 if (count > m_cidl || !count || !m_apidl) // !count to free possibly large cache, !m_apidl to make sure m_apidl is a valid pointer
2112 {
2113 SHFree(m_apidl);
2114 m_apidl = static_cast<PCUITEMID_CHILD*>(SHAlloc(count * sizeof(PCUITEMID_CHILD)));
2115 if (!m_apidl)
2116 {
2117 m_cidl = 0;
2118 return 0;
2119 }
2120 }
2121 m_cidl = count;
2122
2123 TRACE("-- Items selected =%u\n", m_cidl);
2124
2126
2127 UINT i = 0;
2128 int lvIndex = -1;
2129 while ((lvIndex = m_ListView.GetNextItem(lvIndex, LVNI_SELECTED)) > -1)
2130 {
2131 m_apidl[i] = _PidlByItem(lvIndex);
2132 i++;
2133 if (i == m_cidl)
2134 break;
2135 TRACE("-- selected Item found\n");
2136 }
2137
2138 return m_cidl;
2139}
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 3726 of file CDefView.cpp.

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

3812{
3813 if (view_type == SV2GV_DEFAULTVIEW)
3814 {
3815 *pVid = VID_Default;
3816 return S_OK;
3817 }
3818 if (view_type == SV2GV_CURRENTVIEW)
3820 if ((int)view_type < 0)
3821 return E_UNEXPECTED;
3822
3825 return E_INVALIDARG;
3827 return S_OK;
3828}
view_type

◆ GetWindow()

HRESULT WINAPI CDefView::GetWindow ( HWND lphwnd)
override

Implements IOleWindow.

Definition at line 3148 of file CDefView.cpp.

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

◆ GetWindowProc()

virtual WNDPROC CDefView::GetWindowProc ( )
inlineoverridevirtual

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

Definition at line 533 of file CDefView.cpp.

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

◆ GetWndClassInfo()

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

Definition at line 520 of file CDefView.cpp.

521 {
522 static ATL::CWndClassInfo wc =
523 {
525 0, 0, NULL, NULL,
526 LoadCursor(NULL, IDC_ARROW), NULL, NULL, L"SHELLDLL_DefView", NULL
527 },
528 NULL, NULL, IDC_ARROW, TRUE, 0, _T("")
529 };
530 return wc;
531 }
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:5923
WNDCLASSEXA WNDCLASSEX
Definition: winuser.h:5830
#define CS_PARENTDC
Definition: winuser.h:664

◆ GiveFeedback()

HRESULT WINAPI CDefView::GiveFeedback ( DWORD  dwEffect)
override

Implements IDropSource.

Definition at line 4713 of file CDefView.cpp.

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

◆ HandleRename()

HRESULT STDMETHODCALLTYPE CDefView::HandleRename ( LPCITEMIDLIST  pidl)
override

Definition at line 3928 of file CDefView.cpp.

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

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

Referenced by fill_list().

◆ Initialize()

HRESULT WINAPI CDefView::Initialize ( IShellFolder shellFolder)

Definition at line 664 of file CDefView.cpp.

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

◆ InitList()

BOOL CDefView::InitList ( )

Definition at line 984 of file CDefView.cpp.

985{
986 HIMAGELIST big_icons, small_icons;
987
988 TRACE("%p\n", this);
989
991
992 Shell_GetImageLists(&big_icons, &small_icons);
994 m_ListView.SetImageList(small_icons, LVSIL_SMALL);
995
997
999 UINT ColumnCount = pColumns ? DPA_GetPtrCount(m_LoadColumnsList) : 0;
1000 LoadColumns(pColumns, ColumnCount);
1002 {
1006 }
1007 return TRUE;
1008}
HRESULT LoadColumns(SIZE_T *pColList=NULL, UINT ColListCount=0)
Definition: CDefView.cpp:1125
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 2149 of file CDefView.cpp.

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

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

◆ IsDesktop()

BOOL CDefView::IsDesktop ( ) const
inlineprivate

Definition at line 301 of file CDefView.cpp.

◆ IsDropOnSource()

HRESULT STDMETHODCALLTYPE CDefView::IsDropOnSource ( IDropTarget drop_target)
override

Definition at line 4089 of file CDefView.cpp.

4090{
4091 if ((m_iDragOverItem == -1 || m_pCurDropTarget == NULL) &&
4093 {
4094 return S_OK;
4095 }
4096
4097 return S_FALSE;
4098}

Referenced by Drop().

◆ IsSpecialFolder()

BOOL CDefView::IsSpecialFolder ( int csidl) const
inlineprivate

Definition at line 303 of file CDefView.cpp.

304 {
305 csidl = m_SpecialFolder;
306 return m_SpecialFolder >= 0;
307 }

Referenced by UpdateStatusbarLocation().

◆ IsSupportedFolderViewMode()

static bool CDefView::IsSupportedFolderViewMode ( int  Mode)
inlinestatic

Definition at line 380 of file CDefView.cpp.

381 {
382 return Mode >= FVM_FIRST && Mode <= FVM_DETAILS; // We don't support Tile nor Thumbstrip
383 }
_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 3662 of file CDefView.cpp.

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

◆ ItemCount()

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

Implements IFolderView.

Definition at line 3675 of file CDefView.cpp.

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

3688{
3689 return E_NOTIMPL;
3690}

◆ ListViewCompareItems()

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

Definition at line 1256 of file CDefView.cpp.

1257{
1258 PCUIDLIST_RELATIVE pidl1 = reinterpret_cast<PCUIDLIST_RELATIVE>(lParam1);
1259 PCUIDLIST_RELATIVE pidl2 = reinterpret_cast<PCUIDLIST_RELATIVE>(lParam2);
1260 CDefView *pThis = reinterpret_cast<CDefView*>(lpData);
1261
1262 HRESULT hres = pThis->m_pSFParent->CompareIDs(pThis->m_sortInfo.FolderColumn, pidl1, pidl2);
1264 return 0;
1265
1266 SHORT nDiff = HRESULT_CODE(hres);
1267 return nDiff * pThis->m_sortInfo.Direction;
1268}
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 1088 of file CDefView.cpp.

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

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

Referenced by InitList().

◆ LoadViewState()

HRESULT CDefView::LoadViewState ( )

Definition at line 3336 of file CDefView.cpp.

3337{
3339 PERSISTCOLUMNS cols;
3342 bool fallback = false;
3343 HRESULT hrColumns = E_FAIL;
3345 if (SUCCEEDED(hr))
3346 {
3347 DWORD data;
3348 if (FAILED(hr = SHPropertyBag_ReadDWORD(pPB, L"Mode", &data)))
3349 goto loadfallback;
3351 cvs.FolderSettings.fFlags = ReadDWORD(pPB, L"FFlags", FWF_NOGROUPING);
3352 data = ReadDWORD(pPB, L"Sort", ~0ul);
3354 cvs.SortDir = (INT8)ReadDWORD(pPB, L"SortDir", 1);
3355 if (SUCCEEDED(hrColumns = SHPropertyBag_ReadStream(pPB, L"ColInfo", &pS)))
3356 hrColumns = LoadColumnsStream(cols, pS);
3357 }
3358 else
3359 {
3360 if (FAILED(hr = (m_pShellBrowser ? m_pShellBrowser->GetViewStateStream(STGM_READ, &pS) : E_UNEXPECTED)))
3361 {
3362 loadfallback:
3364 fallback = true;
3365 }
3366 if (FAILED(hr) || FAILED(hr = Read(pS, &cvs, sizeof(cvs))))
3367 return hr;
3368 if (cvs.Signature != cvs.SIG)
3370 hrColumns = LoadColumnsStream(cols, pS);
3371 }
3373 m_FolderSettings.fFlags &= ~cvs.VALIDFWF;
3375 if (SUCCEEDED(hrColumns))
3376 {
3377 BOOL failed = FALSE;
3378 if ((m_LoadColumnsList = DPA_Create(cols.Count)) != NULL)
3379 {
3380 for (UINT i = 0; i < cols.Count; ++i)
3381 {
3382 failed |= !DPA_SetPtr(m_LoadColumnsList, i, UlongToPtr(cols.Columns[i]));
3383 }
3384 }
3385 if (failed || !cols.Count)
3386 {
3389 }
3390 }
3393 m_sortInfo.Direction = cvs.SortDir > 0 ? 1 : -1;
3395 return hr;
3396}
static HRESULT LoadColumnsStream(PERSISTCOLUMNS &cols, IStream *pS)
Definition: CDefView.cpp:3326
static DWORD ReadDWORD(IPropertyBag *pPB, LPCWSTR name, DWORD def)
Definition: CDefView.cpp:3304
signed char INT8
#define UlongToPtr(u)
Definition: config.h:106
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define HResultFromWin32
Definition: loader.cpp:14
#define STGM_READ
Definition: objbase.h:917
EXTERN_C HRESULT WINAPI IUnknown_QueryServicePropertyBag(_In_ IUnknown *punk, _In_ long flags, _In_ REFIID riid, _Outptr_ void **ppvObj)
Definition: propbag.cpp:1967
#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:101
static const UINT SIG
Definition: CDefView.cpp:96
static const UINT VALIDFWF
Definition: CDefView.cpp:100
UINT Columns[MAXCOUNT]
Definition: CDefView.cpp:91
#define ERROR_INVALID_DATA
Definition: winerror.h:238

Referenced by CreateViewWindow3().

◆ LV_AddItem()

int CDefView::LV_AddItem ( PCUITEMID_CHILD  pidl)

Definition at line 1379 of file CDefView.cpp.

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

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

1349{
1351
1352 int cItems = m_ListView.GetItemCount();
1354 for (int i = 0; i < cItems; i++)
1355 {
1356 PCUITEMID_CHILD currentpidl = _PidlByItem(i);
1357 HRESULT hr = m_pSFParent->CompareIDs(lParam, pidl, currentpidl);
1358 if (SUCCEEDED(hr))
1359 {
1360 if (hr == S_EQUAL)
1361 return i;
1362 }
1363 else
1364 {
1365#if DBG
1366 for (i = 0; pidl && i < cItems; i++)
1367 {
1368 currentpidl = _PidlByItem(i);
1369 if (currentpidl && currentpidl->mkid.cb == pidl->mkid.cb && !memcmp(currentpidl, pidl, pidl->mkid.cb))
1370 DbgPrint("Matched item #%d, broken CompareIDs?\n", i);
1371 }
1372#endif
1373 break;
1374 }
1375 }
1376 return -1;
1377}
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
#define SHCIDS_CANONICALONLY
Definition: shobjidl.idl:226
#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_RefreshIcon()

void CDefView::LV_RefreshIcon ( INT  iItem)

Definition at line 1499 of file CDefView.cpp.

1500{
1502
1503 LVITEMW lvItem = { LVIF_IMAGE };
1504 lvItem.iItem = iItem;
1505 lvItem.iImage = I_IMAGECALLBACK;
1506 m_ListView.SetItem(&lvItem);
1507 m_ListView.Update(iItem);
1508}
BOOL Update(int i)
Definition: rosctrls.h:131
BOOL SetItem(const LV_ITEM *pitem)
Definition: rosctrls.h:111

Referenced by LV_RefreshIcons().

◆ LV_RefreshIcons()

void CDefView::LV_RefreshIcons ( )

Definition at line 1510 of file CDefView.cpp.

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

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

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

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

◆ LV_UpdateItem() [2/2]

BOOL CDefView::LV_UpdateItem ( PCUITEMID_CHILD  pidl)

Definition at line 1491 of file CDefView.cpp.

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

◆ MapFolderColumnToListColumn()

HRESULT CDefView::MapFolderColumnToListColumn ( UINT  FoldCol)

Definition at line 1023 of file CDefView.cpp.

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

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

◆ MapListColumnToFolderColumn()

HRESULT CDefView::MapListColumnToFolderColumn ( UINT  ListCol)

Definition at line 1036 of file CDefView.cpp.

1037{
1038 // This function is called every time a LVITEM::iSubItem is mapped to
1039 // a folder column (calls to GetDetailsOf etc.) and should be fast.
1041 {
1043 if (ListCol < count)
1044 {
1046 assert(col >= 0 && col == SHGetLVColumnSubItem(m_ListView.m_hWnd, ListCol));
1047 return col;
1048 }
1049 else if (count)
1050 {
1051 TRACE("m_ListToFolderColMap cache miss while mapping %d\n", ListCol);
1052 }
1053 }
1054 return SHGetLVColumnSubItem(m_ListView.m_hWnd, ListCol);
1055}
#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 4115 of file CDefView.cpp.

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

◆ OnActivate()

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

Definition at line 2513 of file CDefView.cpp.

2514{
2516 return 0;
2517}
void DoActivate(UINT uState)
Definition: CDefView.cpp:2456

◆ OnChangeCBChain()

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

Definition at line 3120 of file CDefView.cpp.

3121{
3122 bHandled = TRUE;
3123 return m_ClipboardChain.HandleChangeCBChain(wParam, lParam);
3124}
ClipboardViewerChain m_ClipboardChain
Definition: CDefView.cpp:246

◆ OnChangeNotify()

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

Definition at line 2926 of file CDefView.cpp.

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

◆ OnCommand()

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

Definition at line 2551 of file CDefView.cpp.

2552{
2553 DWORD dwCmdID;
2554 DWORD dwCmd;
2555 HWND hwndCmd;
2556 int nCount;
2557
2558 dwCmdID = GET_WM_COMMAND_ID(wParam, lParam);
2560 hwndCmd = GET_WM_COMMAND_HWND(wParam, lParam);
2561
2562 TRACE("(%p)->(0x%08x 0x%08x %p) stub\n", this, dwCmdID, dwCmd, hwndCmd);
2563
2564 if (dwCmdID >= DVIDM_ARRANGESORT_FIRST && dwCmdID <= DVIDM_ARRANGESORT_LAST)
2565 {
2566 UINT listCol = (UINT)GetMenuItemDataById(m_hMenuArrangeModes, dwCmdID);
2567 _Sort(listCol);
2568 return 0;
2569 }
2570
2571 switch (dwCmdID)
2572 {
2577 case 0x702D:
2579 case 0x702F:
2581 break;
2584 break;
2586 if (_GetSnapToGrid() == S_OK)
2588 else
2589 ArrangeGrid();
2590 break;
2592 if (GetAutoArrange() == S_OK)
2593 m_ListView.ModifyStyle(LVS_AUTOARRANGE, 0);
2594 else
2595 AutoArrange();
2596 break;
2600 break;
2602 nCount = m_ListView.GetItemCount();
2603 for (int i=0; i < nCount; i++)
2605 break;
2608 break;
2610 Refresh();
2611 break;
2613 case FCIDM_SHVIEW_CUT:
2614 case FCIDM_SHVIEW_COPY:
2618 return 0;
2619 return OnExplorerCommand(dwCmdID, TRUE);
2623 return 0;
2625 case FCIDM_SHVIEW_UNDO:
2628 return OnExplorerCommand(dwCmdID, FALSE);
2629 default:
2630 // WM_COMMAND messages from file menu are routed to CDefView to let m_pFileMenu handle them
2631 if (m_pFileMenu && dwCmd == 0)
2632 {
2633 HMENU Dummy = NULL;
2634 MenuCleanup _(m_pFileMenu, Dummy);
2636 }
2637 }
2638
2639 return 0;
2640}
#define GET_WM_COMMAND_HWND(wp, lp)
Definition: CDefView.cpp:599
#define GET_WM_COMMAND_ID(wp, lp)
Definition: CDefView.cpp:598
#define GET_WM_COMMAND_CMD(wp, lp)
Definition: CDefView.cpp:600
#define SFVM_CANSELECTALL
STDMETHOD() AutoArrange() override
Definition: CDefView.cpp:3980
void _DoCopyToMoveToFolder(BOOL bCopy)
Definition: CDefView.cpp:2490
STDMETHOD() SetCurrentViewMode(UINT ViewMode) override
Definition: CDefView.cpp:3620
LRESULT OnExplorerCommand(UINT uCommand, BOOL bUseSelection)
Definition: CDefView.cpp:2370
STDMETHOD() ArrangeGrid() override
Definition: CDefView.cpp:3974
UINT GetItemState(int i, UINT mask)
Definition: rosctrls.h:173
void SetItemState(int i, UINT state, UINT mask)
Definition: rosctrls.h:178
#define _(op)
Definition: opcodes.c:24
#define LVIS_SELECTED
Definition: commctrl.h:2324
#define LVA_SNAPTOGRID
Definition: commctrl.h:2535
@ REST_NOVIEWCONTEXTMENU
Definition: shlobj.h:1674
#define FCIDM_SHVIEW_DESELECTALL
Definition: shlobj_undoc.h:66
DWORD WINAPI SHRestricted(RESTRICTIONS rest)
Definition: shpolicy.c:166
#define FCIDM_SHVIEW_SELECTALL
Definition: shresdef.h: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 2253 of file CDefView.cpp.

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

◆ OnCreate()

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

Definition at line 1767 of file CDefView.cpp.

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

◆ OnDeactivate()

void CDefView::OnDeactivate ( )

Definition at line 2445 of file CDefView.cpp.

2446{
2447 TRACE("%p\n", this);
2448
2450 {
2451 // TODO: cleanup menu after deactivation
2453 }
2454}

Referenced by DoActivate(), and OnNotify().

◆ OnDefaultCommand()

HRESULT CDefView::OnDefaultCommand ( )

Definition at line 691 of file CDefView.cpp.

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

Referenced by OnContextMenu(), and OpenSelectedItems().

◆ OnDestroy()

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

Definition at line 1656 of file CDefView.cpp.

1657{
1658 if (!m_Destroyed)
1659 {
1660 m_Destroyed = TRUE;
1663 m_hNotify = NULL;
1664 m_ClipboardChain.Unhook(m_hWnd);
1665 if (m_pFileMenu)
1666 {
1668 m_pFileMenu = NULL;
1669 }
1670 if (m_hMenu)
1671 {
1673 m_hMenu = NULL;
1674 }
1677 }
1678 bHandled = FALSE;
1679 return 0;
1680}
EXTERN_C BOOL WINAPI SHChangeNotifyDeregister(ULONG hNotify)
HRESULT WINAPI RevokeDragDrop(HWND hwnd)
Definition: ole2.c:639

◆ OnDrawClipboard()

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

Definition at line 3126 of file CDefView.cpp.

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

1683{
1684 /* redirect to parent */
1687
1688 bHandled = FALSE;
1689 return 0;
1690}
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 2370 of file CDefView.cpp.

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

Referenced by OnCommand().

◆ OnFinalMessage()

VOID CDefView::OnFinalMessage ( HWND  )
overridevirtual

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

Definition at line 1762 of file CDefView.cpp.

1763{
1764 this->Release();
1765}
ULONG Release()

◆ OnGetDlgCode()

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

Definition at line 1651 of file CDefView.cpp.

1652{
1653 return m_ListView.SendMessageW(uMsg, 0, 0);
1654}

◆ OnGetShellBrowser()

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

Definition at line 1750 of file CDefView.cpp.

1751{
1752 return reinterpret_cast<LRESULT>(m_pShellBrowser.p);
1753}

◆ OnInitMenuPopup()

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

Definition at line 3060 of file CDefView.cpp.

3061{
3062 HMENU hmenu = (HMENU) wParam;
3063 int nPos = LOWORD(lParam);
3064 UINT menuItemId;
3065
3066 if (m_isEditing)
3068 if (m_pCM)
3069 OnMenuMessage(uMsg, wParam, lParam, bHandled);
3070
3072
3073 if (GetSelections() == 0)
3074 {
3081 }
3082 else
3083 {
3084 // FIXME: Check copyable
3091 }
3092
3093 /* Lets try to find out what the hell wParam is */
3094 if (hmenu == GetSubMenu(m_hMenu, nPos))
3095 menuItemId = ReallyGetMenuItemID(m_hMenu, nPos);
3096 else if (hViewMenu && hmenu == GetSubMenu(hViewMenu, nPos))
3097 menuItemId = ReallyGetMenuItemID(hViewMenu, nPos);
3098 else if (m_hContextMenu && hmenu == GetSubMenu(m_hContextMenu, nPos))
3099 menuItemId = ReallyGetMenuItemID(m_hContextMenu, nPos);
3100 else
3101 return FALSE;
3102
3103 switch (menuItemId)
3104 {
3105 case FCIDM_MENU_FILE:
3106 FillFileMenu();
3107 break;
3108 case FCIDM_MENU_VIEW:
3109 case FCIDM_SHVIEW_VIEW:
3111 break;
3114 break;
3115 }
3116
3117 return FALSE;
3118}
static UINT ReallyGetMenuItemID(HMENU hmenu, int i)
Definition: CDefView.cpp:193
HRESULT FillFileMenu()
Definition: CDefView.cpp:1853
LRESULT OnMenuMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:3028
HRESULT FillArrangeAsMenu(HMENU hmenuArrange)
Definition: CDefView.cpp:1932
#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 2539 of file CDefView.cpp.

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

◆ OnMenuMessage()

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

Definition at line 3028 of file CDefView.cpp.

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

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

◆ OnNotify()

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

Definition at line 2660 of file CDefView.cpp.

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

◆ OnPrintClient()

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

Definition at line 1714 of file CDefView.cpp.

1715{
1716 HDC hDC = (HDC)wParam;
1717
1718 RECT rc;
1720
1722 {
1723 BITMAP bm;
1724 if (::GetObject(m_viewinfo_data.hbmBack, sizeof(BITMAP), &bm))
1725 {
1726 INT dx = -(::GetScrollPos(m_ListView, SB_HORZ) % bm.bmWidth);
1727 INT dy = -(::GetScrollPos(m_ListView, SB_VERT) % bm.bmHeight);
1728 DrawTileBitmap(hDC, &rc, m_viewinfo_data.hbmBack, bm.bmWidth, bm.bmHeight, dx, dy);
1729 }
1730 }
1731 else
1732 {
1734 }
1735
1736 bHandled = TRUE;
1737
1738 return TRUE;
1739}
static HDC hDC
Definition: 3dtext.c:33
static COLORREF GetViewColor(COLORREF Clr, UINT SysFallback)
Definition: CDefView.cpp:216
static VOID DrawTileBitmap(HDC hDC, LPCRECT prc, HBITMAP hbm, INT nWidth, INT nHeight, INT dx, INT dy)
Definition: CDefView.cpp:1693
DWORD WINAPI SHFillRectClr(HDC hDC, LPCRECT pRect, COLORREF cRef)
Definition: ordinal.c:2133
static HDC
Definition: imagelist.c:88
Definition: bl.h:1331
#define GetObject
Definition: wingdi.h: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 2519 of file CDefView.cpp.

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

Referenced by OnNotify().

◆ OnSettingChange()

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

Definition at line 3041 of file CDefView.cpp.

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

◆ OnShowWindow()

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

Definition at line 1643 of file CDefView.cpp.

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

◆ OnSize()

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

Definition at line 2420 of file CDefView.cpp.

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

◆ OnStateChange()

HRESULT CDefView::OnStateChange ( UINT  uFlags)

Definition at line 705 of file CDefView.cpp.

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

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

◆ OnSysColorChange()

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

Definition at line 1741 of file CDefView.cpp.

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

◆ OnUpdateStatusbar()

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

Definition at line 841 of file CDefView.cpp.

842{
845 return 0;
846}

◆ OpenSelectedItems()

HRESULT CDefView::OpenSelectedItems ( PCSTR  pszVerb = NULL)

Definition at line 2211 of file CDefView.cpp.

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

4702{
4703 TRACE("(%p)\n", this);
4704
4705 if (fEscapePressed)
4706 return DRAGDROP_S_CANCEL;
4707 else if (!(grfKeyState & MK_LBUTTON) && !(grfKeyState & MK_RBUTTON))
4708 return DRAGDROP_S_DROP;
4709 else
4710 return S_OK;
4711}
#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 4775 of file CDefView.cpp.

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

◆ QueryStatus()

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

Implements IOleCommandTarget.

Definition at line 4199 of file CDefView.cpp.

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

◆ QuerySupport()

HRESULT STDMETHODCALLTYPE CDefView::QuerySupport ( UINT support)
override

Definition at line 4187 of file CDefView.cpp.

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

◆ Rearrange()

HRESULT STDMETHODCALLTYPE CDefView::Rearrange ( LPARAM  sort)
override

Definition at line 3961 of file CDefView.cpp.

3962{
3963 _Sort(LOWORD(sort & SHCIDS_COLUMNMASK));
3964 return S_OK;
3965}

◆ Refresh()

HRESULT WINAPI CDefView::Refresh ( )
override

Implements IShellView.

Definition at line 3210 of file CDefView.cpp.

3211{
3212 TRACE("(%p)\n", this);
3213
3215
3217 FillList();
3218
3219 return S_OK;
3220}

Referenced by OnChangeNotify(), and OnCommand().

◆ RefreshGhostedState()

void CDefView::RefreshGhostedState ( )

Definition at line 3140 of file CDefView.cpp.

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

Referenced by SetClipboard().

◆ RefreshObject()

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

Definition at line 4048 of file CDefView.cpp.

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

◆ RemoveObject()

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

Definition at line 4005 of file CDefView.cpp.

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

◆ SaveViewState() [1/2]

HRESULT WINAPI CDefView::SaveViewState ( )
override

Implements IShellView.

Definition at line 3471 of file CDefView.cpp.

3472{
3474 return SaveViewState(NULL);
3475 return S_FALSE;
3476}

Referenced by Exec(), and SaveViewState().

◆ SaveViewState() [2/2]

HRESULT CDefView::SaveViewState ( IStream pStream)

Definition at line 3398 of file CDefView.cpp.

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

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

◆ SelectAndPositionItem() [1/2]

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

Definition at line 3942 of file CDefView.cpp.

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

Referenced by SelectAndPositionItem(), and SelectAndPositionItems().

◆ SelectAndPositionItem() [2/2]

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

Definition at line 3951 of file CDefView.cpp.

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

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

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

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

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

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

◆ SetAutomationObject()

HRESULT STDMETHODCALLTYPE CDefView::SetAutomationObject ( IDispatch disp)
override

Definition at line 4193 of file CDefView.cpp.

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

◆ SetCallback()

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

Definition at line 4169 of file CDefView.cpp.

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

◆ SetClipboard()

HRESULT STDMETHODCALLTYPE CDefView::SetClipboard ( BOOL  move)
override

Definition at line 4133 of file CDefView.cpp.

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

◆ SetCurrentViewMode()

HRESULT STDMETHODCALLTYPE CDefView::SetCurrentViewMode ( UINT  ViewMode)
override

Implements IFolderView.

Definition at line 3620 of file CDefView.cpp.

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

Referenced by OnCommand().

◆ SetItemPos()

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

Definition at line 4121 of file CDefView.cpp.

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

◆ SetObjectCount()

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

Definition at line 4036 of file CDefView.cpp.

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

◆ SetPoints()

HRESULT STDMETHODCALLTYPE CDefView::SetPoints ( IDataObject obj)
override

Definition at line 4157 of file CDefView.cpp.

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

◆ SetRedraw()

HRESULT STDMETHODCALLTYPE CDefView::SetRedraw ( BOOL  redraw)
override

Definition at line 4054 of file CDefView.cpp.

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

3166{
3167 if (m_isEditing)
3168 return S_FALSE;
3169
3170 if (lpmsg->message >= WM_KEYFIRST && lpmsg->message <= WM_KEYLAST)
3171 {
3172 if (::TranslateAcceleratorW(m_hWnd, m_hAccel, lpmsg) != 0)
3173 return S_OK;
3174
3175 TRACE("-- key=0x%04lx\n", lpmsg->wParam);
3176 }
3177
3178 return m_pShellBrowser ? m_pShellBrowser->TranslateAcceleratorSB(lpmsg, 0) : S_FALSE;
3179}
#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 3187 of file CDefView.cpp.

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

Referenced by DestroyViewWindow().

◆ Unfreeze()

HRESULT WINAPI CDefView::Unfreeze ( DWORD  dwFreeze)
override

Implements IViewObject.

Definition at line 4738 of file CDefView.cpp.

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

◆ UpdateFolderViewFlags()

void CDefView::UpdateFolderViewFlags ( )

◆ UpdateListColors()

void CDefView::UpdateListColors ( )

Definition at line 937 of file CDefView.cpp.

938{
940 {
941 /* Check if drop shadows option is enabled */
942 BOOL bDropShadow = FALSE;
943 DWORD cbDropShadow = sizeof(bDropShadow);
944
945 /*
946 * The desktop ListView always take the default desktop colours, by
947 * remaining transparent and letting user32/win32k paint itself the
948 * desktop background color, if any.
949 */
951
952 SHGetValueW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
953 L"ListviewShadow", NULL, &bDropShadow, &cbDropShadow);
954 if (bDropShadow)
955 {
956 /* Set the icon background transparent */
958 m_ListView.SetTextColor(RGB(255, 255, 255));
959 m_ListView.SetExtendedListViewStyle(LVS_EX_TRANSPARENTSHADOWTEXT, LVS_EX_TRANSPARENTSHADOWTEXT);
960 }
961 else
962 {
963 /* Set the icon background as the same colour as the desktop */
965 m_ListView.SetTextBkColor(crDesktop);
966 if (GetRValue(crDesktop) + GetGValue(crDesktop) + GetBValue(crDesktop) > 128 * 3)
967 m_ListView.SetTextColor(RGB(0, 0, 0));
968 else
969 m_ListView.SetTextColor(RGB(255, 255, 255));
970 m_ListView.SetExtendedListViewStyle(0, LVS_EX_TRANSPARENTSHADOWTEXT);
971 }
972 }
973 else
974 {
977
978 // Background is painted by the parent via WM_PRINTCLIENT
979 m_ListView.SetExtendedListViewStyle(LVS_EX_TRANSPARENTBKGND, LVS_EX_TRANSPARENTBKGND);
980 }
981}
BOOL SetTextBkColor(COLORREF cr)
Definition: rosctrls.h:32
BOOL SetTextColor(COLORREF cr)
Definition: rosctrls.h:42
BOOL SetBkColor(COLORREF cr)
Definition: rosctrls.h:37
DWORD WINAPI SHGetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData)
Definition: reg.c:1236
#define RGB(r, g, b)
Definition: precomp.h:71
#define GetBValue(quad)
Definition: precomp.h:75
#define GetGValue(quad)
Definition: precomp.h:74
#define GetRValue(quad)
Definition: precomp.h:73
#define CLR_NONE
Definition: commctrl.h:319
DWORD COLORREF
Definition: windef.h:94
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 4042 of file CDefView.cpp.

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

◆ UpdateStatusbar()

void CDefView::UpdateStatusbar ( )

Definition at line 743 of file CDefView.cpp.

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

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

◆ UpdateStatusbarLocation()

void CDefView::UpdateStatusbarLocation ( )

Definition at line 815 of file CDefView.cpp.

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

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

Referenced by GetWindowProc().

Member Data Documentation

◆ m_apidl

◆ m_bmenuBarInitialized

BOOL CDefView::m_bmenuBarInitialized
private

Definition at line 254 of file CDefView.cpp.

Referenced by DoActivate().

◆ m_Category

CLSID CDefView::m_Category
private

Definition at line 286 of file CDefView.cpp.

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

◆ m_cidl

◆ m_ClipboardChain

ClipboardViewerChain CDefView::m_ClipboardChain
private

Definition at line 246 of file CDefView.cpp.

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

◆ m_cScrollDelay

UINT CDefView::m_cScrollDelay
private

Definition at line 272 of file CDefView.cpp.

Referenced by drag_notify_subitem().

◆ m_Destroyed

BOOL CDefView::m_Destroyed
private

Definition at line 287 of file CDefView.cpp.

Referenced by OnDestroy().

◆ m_dwAdvf

DWORD CDefView::m_dwAdvf
private

Definition at line 265 of file CDefView.cpp.

Referenced by GetAdvise(), and SetAdvise().

◆ m_dwAspects

DWORD CDefView::m_dwAspects
private

Definition at line 264 of file CDefView.cpp.

Referenced by GetAdvise(), and SetAdvise().

◆ m_FolderSettings

◆ m_grfKeyState

DWORD CDefView::m_grfKeyState
private

Definition at line 275 of file CDefView.cpp.

Referenced by drag_notify_subitem(), and Drop().

◆ m_hAccel

HACCEL CDefView::m_hAccel
private

Definition at line 263 of file CDefView.cpp.

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

◆ m_HasCutItems

bool CDefView::m_HasCutItems
private

Definition at line 284 of file CDefView.cpp.

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

◆ m_hContextMenu

HMENU CDefView::m_hContextMenu
private

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

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

◆ m_hMyComputerIcon

HICON CDefView::m_hMyComputerIcon
private

Definition at line 290 of file CDefView.cpp.

Referenced by CDefView(), and UpdateStatusbarLocation().

◆ m_hNotify

ULONG CDefView::m_hNotify
private

Definition at line 262 of file CDefView.cpp.

Referenced by OnCreate(), and OnDestroy().

◆ m_hWndParent

HWND CDefView::m_hWndParent
private

Definition at line 248 of file CDefView.cpp.

Referenced by CreateViewWindow3(), and Exec().

◆ m_iDragOverItem

LONG CDefView::m_iDragOverItem
private

Definition at line 271 of file CDefView.cpp.

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

◆ m_isEditing

BOOL CDefView::m_isEditing
private

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

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

◆ m_ListView

◆ m_LoadColumnsList

HDPA CDefView::m_LoadColumnsList
private

Definition at line 259 of file CDefView.cpp.

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

◆ m_pAdvSink

CComPtr<IAdviseSink> CDefView::m_pAdvSink
private

Definition at line 266 of file CDefView.cpp.

Referenced by GetAdvise(), and SetAdvise().

◆ m_pCM

CComPtr<IContextMenu> CDefView::m_pCM
private

Definition at line 277 of file CDefView.cpp.

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

◆ m_pCommDlgBrowser

◆ m_pCurDataObject

CComPtr<IDataObject> CDefView::m_pCurDataObject
private

Definition at line 270 of file CDefView.cpp.

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

◆ m_pCurDropTarget

CComPtr<IDropTarget> CDefView::m_pCurDropTarget
private

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

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

◆ m_pFolderFilter

CComPtr<IFolderFilter> CDefView::m_pFolderFilter
private

Definition at line 244 of file CDefView.cpp.

Referenced by IncludeObject(), and SetCallback().

◆ m_pidlParent

PIDLIST_ABSOLUTE CDefView::m_pidlParent
private

Definition at line 258 of file CDefView.cpp.

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

◆ m_pSDParent

CComPtr<IShellDetails> CDefView::m_pSDParent
private

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

Referenced by _DoFolderViewCB(), and SetCallback().

◆ m_pShellFolderViewDual

CComPtr<IShellFolderViewDual> CDefView::m_pShellFolderViewDual
private

Definition at line 245 of file CDefView.cpp.

Referenced by GetItemObject().

◆ m_pSourceDataObject

CComPtr<IDataObject> CDefView::m_pSourceDataObject
private

Definition at line 268 of file CDefView.cpp.

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

◆ m_ptFirstMousePos

POINT CDefView::m_ptFirstMousePos
private

Definition at line 274 of file CDefView.cpp.

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

◆ m_ptLastMousePos

POINT CDefView::m_ptLastMousePos
private

Definition at line 273 of file CDefView.cpp.

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

◆ m_ScheduledStatusbarUpdate

bool CDefView::m_ScheduledStatusbarUpdate
private

Definition at line 283 of file CDefView.cpp.

Referenced by OnNotify(), and OnUpdateStatusbar().

◆ m_sortInfo

◆ m_SpecialFolder

signed char CDefView::m_SpecialFolder
private

Definition at line 281 of file CDefView.cpp.

Referenced by IsSpecialFolder(), and OnCreate().

◆ m_uState

UINT CDefView::m_uState
private

Definition at line 255 of file CDefView.cpp.

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

◆ m_viewinfo_data

SFVM_CUSTOMVIEWINFO_DATA CDefView::m_viewinfo_data
private

Definition at line 288 of file CDefView.cpp.

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


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