View.h
上传用户:hy_wanghao
上传日期:2007-01-08
资源大小:279k
文件大小:7k
源码类别:

Shell编程

开发平台:

Visual C++

  1. // View.h : Declaration of the CView
  2. //
  3. // Written by Bjarke Viksoe (bjarke@viksoe.dk)
  4. // Copyright (c) 2001 Bjarke Viksoe.
  5. //
  6. // This code may be used in compiled form in any way you desire. This
  7. // file may be redistributed by any means PROVIDING it is 
  8. // not sold for profit without the authors written consent, and 
  9. // providing that this notice and the authors name is included. 
  10. //
  11. // This file is provided "as is" with no expressed or implied warranty.
  12. // The author accepts no liability if it causes any damage to you or your
  13. // computer whatsoever. It's free, so don't hassle me about it.
  14. //
  15. // Beware of bugs.
  16. #ifndef __VIEW_H_
  17. #define __VIEW_H_
  18. #include "resource.h"       // main symbols
  19. #include "Folder.h"
  20. /////////////////////////////////////////////////////////////////////////////
  21. // CView
  22. class ATL_NO_VTABLE CView : 
  23.    public CComObjectRootEx<CComSingleThreadModel>,
  24.    public CComCoClass<CView, &CLSID_View>,
  25.    public IShellViewImpl<CView>
  26. {
  27. public:
  28.    HRESULT FinalConstruct();
  29.    void FinalRelease();
  30. DECLARE_NOT_AGGREGATABLE(CView)
  31. DECLARE_PROTECT_FINAL_CONSTRUCT()
  32. BEGIN_COM_MAP(CView)
  33.    COM_INTERFACE_ENTRY_IID(IID_IShellView,IShellView)
  34.    COM_INTERFACE_ENTRY_IID(IID_IShellView2,IShellView2)
  35.    COM_INTERFACE_ENTRY(IOleWindow)
  36. END_COM_MAP()
  37. BEGIN_MSG_MAP(CView)
  38.    MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu)
  39.    MESSAGE_HANDLER(WM_MENUSELECT, OnMenuSelect)
  40.    NOTIFY_CODE_HANDLER(LVN_GETDISPINFO, OnNotifyDispInfo)
  41.    NOTIFY_CODE_HANDLER(LVN_ITEMACTIVATE, OnItemActivated)
  42.    NOTIFY_CODE_HANDLER(LVN_DELETEITEM, OnDeleteItem)
  43.    NOTIFY_CODE_HANDLER(HDN_ITEMCLICK, OnHeaderClick)
  44.    NOTIFY_CODE_HANDLER(LVN_BEGINLABELEDIT, OnLabelEditBegin)
  45.    NOTIFY_CODE_HANDLER(LVN_ENDLABELEDIT, OnLabelEditEnd)   
  46.    NOTIFY_CODE_HANDLER(LVN_BEGINDRAG, OnBeginDrag)
  47.    NOTIFY_CODE_HANDLER(LVN_BEGINRDRAG, OnBeginDrag)
  48.    NOTIFY_CODE_HANDLER(LVN_ITEMCHANGED, OnItemChanged)
  49.    COMMAND_ID_HANDLER(ID_GO_UP, OnGoUp)
  50.    COMMAND_ID_HANDLER(ID_NEWITEM_FOLDER, OnNewFolder)
  51.    COMMAND_ID_HANDLER(ID_FILE_OPEN, OnFileOpen)
  52.    COMMAND_ID_HANDLER(ID_FILE_RENAME, OnFileRename)
  53.    COMMAND_ID_HANDLER(ID_FILE_UNDELETE, OnFileUndelete)
  54.    COMMAND_ID_HANDLER(ID_EDIT_DELETE, OnFileDelete)
  55.    COMMAND_ID_HANDLER(ID_EDIT_PROPERTIES, OnFileProperties)
  56.    COMMAND_ID_HANDLER(ID_EDIT_COPY, OnCopy)
  57.    COMMAND_ID_HANDLER(ID_EDIT_CUT, OnCut)
  58.    COMMAND_ID_HANDLER(ID_EDIT_PASTE, OnPaste)
  59.    COMMAND_ID_HANDLER(ID_EDIT_SELECTALL, OnSelectAll)
  60.    COMMAND_ID_HANDLER(ID_EDIT_INVERTSEL, OnInvertSelection)
  61.    COMMAND_ID_HANDLER(ID_VIEW_REFRESH, OnRefresh)
  62.    COMMAND_ID_HANDLER(ID_VIEW_DELETEDFILES, OnViewDeletedFiles)
  63.    COMMAND_ID_HANDLER(ID_VIEW_REPORT, OnViewChange)
  64.    COMMAND_ID_HANDLER(ID_VIEW_SMALLICONS, OnViewChange)
  65.    COMMAND_ID_HANDLER(ID_VIEW_LARGEICONS, OnViewChange)
  66.    COMMAND_ID_HANDLER(ID_VIEW_LIST, OnViewChange)
  67.    COMMAND_ID_HANDLER(ID_VIEW_CHANGE, OnViewChange)
  68.    COMMAND_ID_HANDLER(ID_HELP_HELPTOPICS, OnShowHelp)
  69.    CHAIN_MSG_MAP(IShellViewImpl<CView>)
  70. END_MSG_MAP()
  71. // CView
  72. public:
  73.    static HRESULT WINAPI UpdateRegistry(BOOL bRegister)
  74.    {
  75.       CComBSTR bstrDescription;
  76.       CComBSTR bstrCLSID(CLSID_View);
  77.       bstrDescription.LoadString(IDS_DESCRIPTION);
  78.       _ATL_REGMAP_ENTRY rm[] = { 
  79.          { OLESTR("DESCRIPTION"), bstrDescription },
  80.          { OLESTR("CLSID"), bstrCLSID },
  81.          { NULL,NULL } };
  82.       return _Module.UpdateRegistryFromResource(IDR_VIEW, bRegister, rm);
  83.    }
  84. // IShellView
  85. public:
  86.    STDMETHOD(CreateViewWindow)(
  87.       IShellView *lpPrevView,
  88.       LPCFOLDERSETTINGS lpfs, 
  89.       IShellBrowser *psb,
  90.       RECT *prcView, 
  91.       HWND  *phWnd);
  92.    STDMETHOD(DestroyViewWindow)(void);
  93.    STDMETHOD(TranslateAccelerator)(LPMSG lpmsg);
  94.    STDMETHOD(GetItemObject)(UINT uItem, REFIID riid, LPVOID *ppRetVal);
  95. // Implementation
  96. public:
  97.    HRESULT _Init(CFolder *pFolder);
  98.    BOOL _InitListView();
  99.    BOOL _FillListView();
  100.    static int CALLBACK _ListViewSortFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort); 
  101.    //
  102.    BOOL _MergeToolbar(UINT uState);
  103.    BOOL _UpdateToolbar();
  104.    BOOL _MergeMenus(UINT uState);
  105.    BOOL _UpdateMenu(HMENU hMenu);
  106. private:
  107.    HRESULT _DoCopyOperation(bool bDragDrop, bool bCut);
  108.    BOOL _HasClipDataReady();
  109.    // Message handlers
  110.    LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  111.    LRESULT OnViewRefresh(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  112.    LRESULT OnMenuSelect(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  113.    //
  114.    LRESULT OnNotifyDispInfo(UINT CtlID, LPNMHDR lpnmh, BOOL &bHandled);
  115.    LRESULT OnHeaderClick(UINT CtlID, LPNMHDR lpnmh, BOOL &bHandled);
  116.    LRESULT OnItemActivated(UINT CtlID, LPNMHDR lpnmh, BOOL &bHandled);
  117.    LRESULT OnDeleteItem(UINT CtlID, LPNMHDR lpnmh, BOOL &bHandled);
  118.    LRESULT OnLabelEditBegin(UINT CtlID, LPNMHDR lpnmh, BOOL &bHandled);
  119.    LRESULT OnLabelEditEnd(UINT CtlID, LPNMHDR lpnmh, BOOL &bHandled);
  120.    LRESULT OnBeginDrag(UINT CtlID, LPNMHDR lpnmh, BOOL &bHandled);
  121.    LRESULT OnItemChanged(UINT CtlID, LPNMHDR lpnmh, BOOL &bHandled);
  122.    //
  123.    LRESULT OnNewFolder(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  124.    LRESULT OnGoUp(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  125.    LRESULT OnFileOpen(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  126.    LRESULT OnFileRename(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  127.    LRESULT OnFileDelete(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  128.    LRESULT OnFileUndelete(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  129.    LRESULT OnFileProperties(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  130.    LRESULT OnViewChange(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  131.    LRESULT OnViewDeletedFiles(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  132.    LRESULT OnRefresh(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  133.    LRESULT OnCopy(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  134.    LRESULT OnCut(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  135.    LRESULT OnPaste(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  136.    LRESULT OnSelectAll(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  137.    LRESULT OnInvertSelection(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  138.    LRESULT OnShowHelp(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  139. // Attributes
  140. protected:
  141.    CFolder *m_pFolder;
  142.    HMENU m_hMenu;
  143.    HACCEL m_hAccels;
  144.    bool m_bInEdit;
  145.    bool m_bShowDeletedFiles;
  146. };
  147. #endif //__VIEW_H_