bitbuck1.cpp
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 4k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. #include "shellprv.h"
  2. extern "C" {
  3. #include <shellp.h>
  4. #include "idlcomm.h"
  5. #include "pidl.h"
  6. #include "fstreex.h"
  7. #include "views.h"
  8. #include "ids.h"
  9. #include "shitemid.h"
  10. #include "bitbuck.h"
  11. void SHChangeNotifyDeregisterWindow(HWND hwnd);
  12. } ;
  13. #include "sfviewp.h"
  14. #include "shguidp.h"
  15. class CBitBucketSFVCB : public CBaseShellFolderViewCB
  16. {
  17. public:
  18.     CBitBucketSFVCB(IShellFolder* psf, CBitBucket* pBBFolder)
  19.         : CBaseShellFolderViewCB(psf, NULL, 0), m_pBBFolder(pBBFolder)
  20.     { 
  21.         memset(&m_fssci, 0, sizeof(m_fssci));
  22.     }
  23.     STDMETHODIMP RealMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
  24. private:
  25.     CBitBucket* m_pBBFolder;
  26.     FSSELCHANGEINFO m_fssci;
  27. private:
  28.     HRESULT OnMergeMenu(DWORD pv, QCMINFO*lP)
  29.     {
  30.         CDefFolderMenu_MergeMenu(HINST_THISDLL, 0, POPUP_BITBUCKET_POPUPMERGE, lP);
  31.         return S_OK;
  32.     }
  33.     HRESULT OnInitMenuPopup(DWORD pv, UINT wPl, UINT wPh, HMENU lP)
  34.     {
  35.         EnableMenuItem(lP, wPl + FSIDM_PURGEALL, IsRecycleBinEmpty() ? (MF_GRAYED | MF_BYCOMMAND) : MF_BYCOMMAND);
  36.         return S_OK;
  37.     }
  38.     HRESULT OnInvokeCommand(DWORD pv, UINT wP)
  39.     {
  40.         switch(wP)
  41.         {
  42.         case FSIDM_PURGEALL:
  43.             BBPurgeAll(m_pBBFolder, m_hwndMain, 0);
  44.             break;
  45.         case FSIDM_SORTBYNAME:
  46.         case FSIDM_SORTBYORIGIN:
  47.         case FSIDM_SORTBYDELETEDDATE:
  48.         case FSIDM_SORTBYTYPE:
  49.         case FSIDM_SORTBYSIZE:
  50.             BBSort(m_hwndMain, wP);
  51.             break;
  52.         }
  53.         return S_OK;
  54.     }
  55.     HRESULT OnGetHelpText(DWORD pv, UINT wPl, UINT wPh, LPTSTR psz)
  56.     {
  57.         LoadString(HINST_THISDLL, LOWORD(wPl) + IDS_MH_FSIDM_FIRST, psz, wPh);
  58.         return S_OK;
  59.     }
  60.     HRESULT OnGetCCHMax(DWORD pv, LPCITEMIDLIST wP, UINT *lP)
  61.     {
  62.         return S_OK;
  63.     }
  64.     HRESULT OnSelChange(DWORD pv, UINT wPl, UINT wPh, SFVM_SELCHANGE_DATA*lP)
  65.     {
  66.         FSOnSelChange(NULL, lP, &m_fssci);
  67.         return S_OK;
  68.     }
  69.     HRESULT OnFSNotify(DWORD pv, LPCITEMIDLIST *ppidl, LPARAM lP)
  70.     {
  71.         return BBHandleFSNotify(m_hwndMain, (LONG)lP, ppidl[0], ppidl[1]);
  72.     }
  73.     HRESULT OnUpdateStatusBar(DWORD pv, BOOL wP)
  74.     {
  75.         return FSUpdateStatusBar(_punkSite, &m_fssci);
  76.     }
  77.     HRESULT OnWindowCreated(DWORD pv, HWND wP)
  78.     {
  79.         BBInitializeViewWindow(wP);
  80.         m_fssci.idDrive = -1;   // no drive specific stuff
  81.         InitializeStatus(_punkSite);
  82.         return S_OK;
  83.     }
  84.     HRESULT OnInsertDeleteItem(int iMul, LPCITEMIDLIST pidl)
  85.     {
  86.         FSOnInsertDeleteItem(NULL, &m_fssci, pidl, iMul);
  87.         return S_OK;
  88.     }
  89.     HRESULT OnWindowDestroy(DWORD pv, HWND hwnd)
  90.     {
  91.         SHChangeNotifyDeregisterWindow(hwnd);
  92.         return S_OK;
  93.     }
  94.     HRESULT OnSize(DWORD pv, UINT cx, UINT cy)
  95.     {
  96.         ResizeStatus(_punkSite, cx);
  97.         return S_OK;
  98.     }
  99.     HRESULT OnDEFVIEWMODE(DWORD pv, FOLDERVIEWMODE*lP)
  100.     {
  101.         *lP = FVM_DETAILS;
  102.         return S_OK;
  103.     }
  104. };
  105. STDMETHODIMP CBitBucketSFVCB::RealMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
  106. {
  107.     switch (uMsg)
  108.     {
  109.     HANDLE_MSG(0, SFVM_MERGEMENU, OnMergeMenu);
  110.     HANDLE_MSG(0, SFVM_INITMENUPOPUP, OnInitMenuPopup);
  111.     HANDLE_MSG(0, SFVM_INVOKECOMMAND, OnInvokeCommand);
  112.     HANDLE_MSG(0, SFVM_GETHELPTEXT, OnGetHelpText);
  113.     HANDLE_MSG(0, SFVM_GETCCHMAX, OnGetCCHMax);
  114.     HANDLE_MSG(0, SFVM_SELCHANGE, OnSelChange);
  115.     HANDLE_MSG(0, SFVM_FSNOTIFY, OnFSNotify);
  116.     HANDLE_MSG(0, SFVM_UPDATESTATUSBAR, OnUpdateStatusBar);
  117.     HANDLE_MSG(0, SFVM_WINDOWCREATED, OnWindowCreated);
  118.     HANDLE_MSG(1 , SFVM_INSERTITEM, OnInsertDeleteItem);
  119.     HANDLE_MSG(-1, SFVM_DELETEITEM, OnInsertDeleteItem);
  120.     HANDLE_MSG(0, SFVM_WINDOWDESTROY, OnWindowDestroy);
  121.     HANDLE_MSG(0, SFVM_DEFVIEWMODE, OnDEFVIEWMODE);
  122.     HANDLE_MSG(0, SFVM_SIZE, OnSize);
  123.     default:
  124.         return E_FAIL;
  125.     }
  126.     return NOERROR;
  127. }
  128. IShellFolderViewCB* BitBucket_CreateSFVCB(IShellFolder* psf, CBitBucket* pBBFolder)
  129. {
  130.     return new CBitBucketSFVCB(psf, pBBFolder);
  131. }