privcpp.h
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 14k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. #ifndef pack2cpp_h__
  2. #define pack2cpp_h__
  3. #ifdef __cplusplus
  4. #undef DebugMsg
  5. #define DebugMsg TraceMsg
  6. ////////////////////////////////
  7. // Forward declarations
  8. //
  9. class CPackage_IOleObject;
  10. class CPackage_IViewObject2;
  11. class CPackage_IDataObject;
  12. class CPackage_IPersistStorage;
  13. class CPackage_IAdviseSink;
  14. class CPackage_IRunnableObject;
  15. class CPackage_IPersistFile;
  16. ////////////////////////////////
  17. // CPackage Definition
  18. //
  19. class CPackage : public IEnumOLEVERB
  20. {
  21. // CPackage interfaces
  22.     friend CPackage_IOleObject;
  23.     friend CPackage_IViewObject2;
  24.     friend CPackage_IDataObject;
  25.     friend CPackage_IPersistStorage;
  26.     friend CPackage_IAdviseSink;
  27.     friend CPackage_IRunnableObject;
  28.     friend CPackage_IPersistFile;
  29.     
  30.     friend DWORD CALLBACK MainWaitOnChildThreadProc(void *);   // used when we shellexec a package
  31.     
  32. public:
  33.     CPackage();                 // constructor
  34.    ~CPackage();                 // destructor
  35.    
  36.     HRESULT Init();             // used to initialze fields that could fail
  37.     BOOL        RunWizard();
  38.     // IUnknown methods...
  39.     STDMETHODIMP            QueryInterface(REFIID,void **);
  40.     STDMETHODIMP_(ULONG)    AddRef(void);
  41.     STDMETHODIMP_(ULONG)    Release(void);
  42.     // IEnumOLEVERB methods...
  43.     STDMETHODIMP            Next(ULONG celt, OLEVERB* rgVerbs, ULONG* pceltFetched);
  44.     STDMETHODIMP            Skip(ULONG celt);
  45.     STDMETHODIMP            Reset();
  46.     STDMETHODIMP            Clone(IEnumOLEVERB** ppEnum);
  47.     
  48. protected:
  49.     UINT        _cRef;          // package reference count
  50.     UINT        _cf;            // package clipboard format
  51.     LPIC _lpic; // icon for the packaged object
  52.     PANETYPE _panetype; // tells us whether we have a cmdlink or embed
  53.     // These are mutually exclusive, so should probably be made into a union,
  54.     // but that's a minor point.
  55.     LPEMBED     _pEmbed;        // embedded file structure
  56.     LPCML _pCml; // command line structure
  57.     BOOL        _fLoaded;       // true if data from persistent storage
  58.     
  59.     // IOleObject vars from SetHostNames
  60.     LPOLESTR    _lpszContainerApp;
  61.     LPOLESTR    _lpszContainerObj;
  62.     
  63.     BOOL        _fIsDirty;      // dirty flag used by IPersistStorage
  64.     DWORD       _dwCookie;      // connection value for AdviseSink
  65.         
  66.     // Package Storages and streams
  67.     IStorage*   _pIStorage;             // storage used to save the package
  68.     IStream*    _pstm;                  // stream used to save package
  69.     IStream*    _pstmFileContents;      // stream used to get file contents
  70.             
  71.     // CPackage Interfaces...
  72.     CPackage_IPersistStorage*   _pIPersistStorage;
  73.     CPackage_IDataObject*       _pIDataObject;
  74.     CPackage_IOleObject*        _pIOleObject;
  75.     CPackage_IViewObject2*      _pIViewObject2;
  76.     CPackage_IAdviseSink*       _pIAdviseSink;
  77.     CPackage_IRunnableObject*   _pIRunnableObject;
  78.     CPackage_IPersistFile*      _pIPersistFile;
  79.     
  80.     // Advise interfaces
  81.     LPDATAADVISEHOLDER          _pIDataAdviseHolder;
  82.     LPOLEADVISEHOLDER           _pIOleAdviseHolder;
  83.     LPOLECLIENTSITE             _pIOleClientSite;
  84.     
  85.     // to be able to send view change notifications we need these vars
  86.     IAdviseSink                     *_pViewSink;
  87.     DWORD                            _dwViewAspects;
  88.     DWORD                            _dwViewAdvf;
  89.     // IEnumOLEVERB variables:
  90.     ULONG       _cVerbs;
  91.     ULONG       _nCurVerb;
  92.     OLEVERB*    _pVerbs;
  93.     IContextMenu* _pcm;
  94.     // IEnumOLEVERB helper methods:
  95.     HRESULT InitVerbEnum(OLEVERB* pVerbs, ULONG cVerbs);
  96.     HRESULT GetContextMenu(IContextMenu** ppcm);
  97.     VOID ReleaseContextMenu();
  98.     // if fInitFile is TRUE, then we will totally initialize ourselves
  99.     // from the given filename.  In other words, all our structures will be
  100.     // initialized after calling this is fInitFile = TRUE.  On the other hand,
  101.     // if it's FALSE, then we'll just reinit our data and not update icon
  102.     // and filename information.
  103.     //
  104.     HRESULT EmbedInitFromFile(LPTSTR lpFileName, BOOL fInitFile);
  105.     HRESULT CmlInitFromFile(LPTSTR lpFilename, BOOL fUpdateIcon);
  106.     HRESULT InitFromPackInfo(LPPACKAGER_INFO lppi);
  107.     
  108.     HRESULT CreateTempFile();
  109.     HRESULT CreateTempFileName();
  110.     HRESULT IconRefresh();
  111.     void    DestroyIC();
  112.     
  113.     // Data Transfer functions...
  114.     HRESULT GetFileDescriptor(LPFORMATETC pFE, LPSTGMEDIUM pSTM);
  115.     HRESULT GetFileContents(LPFORMATETC pFE, LPSTGMEDIUM pSTM);
  116.     HRESULT GetMetafilePict(LPFORMATETC pFE, LPSTGMEDIUM pSTM);
  117.     HRESULT GetObjectDescriptor(LPFORMATETC pFE, LPSTGMEDIUM pSTM) ;
  118.     HRESULT CreateShortcutOnStream(IStream* pstm); 
  119.     // Packager Read/Write Functions...
  120.     HRESULT PackageReadFromStream(IStream* pstm);
  121.     HRESULT IconReadFromStream(IStream* pstm);
  122.     HRESULT EmbedReadFromStream(IStream* pstm);
  123.     HRESULT CmlReadFromStream(IStream* pstm);
  124.     HRESULT PackageWriteToStream(IStream* pstm);
  125.     HRESULT IconWriteToStream(IStream* pstm, DWORD *pdw);
  126.     HRESULT EmbedWriteToStream(IStream* pstm, DWORD *pdw);
  127.     HRESULT CmlWriteToStream(IStream* pstm, DWORD *pdw);
  128. };
  129. ////////////////////////////////////////////
  130. //
  131. // CPackage_IPersistStorage Interface
  132. //
  133. class CPackage_IPersistStorage : public IPersistStorage
  134. {
  135. public:
  136.     CPackage_IPersistStorage(CPackage *pPackage);
  137.    ~CPackage_IPersistStorage();
  138.     
  139.     // IUnknown Methods...
  140.     STDMETHODIMP         QueryInterface(REFIID,void **);
  141.     STDMETHODIMP_(ULONG) AddRef(void);
  142.     STDMETHODIMP_(ULONG) Release(void);
  143.     
  144.     // IPersistStorage Methods...
  145.     STDMETHODIMP        GetClassID(LPCLSID pClassID);
  146.     STDMETHODIMP        IsDirty(void);
  147.     STDMETHODIMP        InitNew(IStorage* pstg);
  148.     STDMETHODIMP        Load(IStorage* pstg);
  149.     STDMETHODIMP        Save(IStorage* pstg, BOOL fSameAsLoad);
  150.     STDMETHODIMP        SaveCompleted(IStorage* pstg);
  151.     STDMETHODIMP        HandsOffStorage(void);
  152.     
  153. protected:
  154.     UINT        _cRef;                  // interface ref count
  155.     CPackage*   _pPackage;              // back pointer to object
  156.     PSSTATE     _psState;               // persistent storage state
  157. };
  158. ////////////////////////////////////////////
  159. //
  160. // CPackage_IPersistFile Interface
  161. //
  162. class CPackage_IPersistFile : public IPersistFile
  163. {
  164. public:
  165.     CPackage_IPersistFile(CPackage *pPackage);
  166.    ~CPackage_IPersistFile();
  167.     
  168.     // IUnknown Methods...
  169.     STDMETHODIMP         QueryInterface(REFIID,void **);
  170.     STDMETHODIMP_(ULONG) AddRef(void);
  171.     STDMETHODIMP_(ULONG) Release(void);
  172.     
  173.     // IPersistStorage Methods...
  174.     STDMETHODIMP        GetClassID(LPCLSID pClassID);
  175.     STDMETHODIMP        IsDirty(void);
  176.     STDMETHODIMP        Load(LPCOLESTR pszFileName, DWORD dwdMode);
  177.     STDMETHODIMP        Save(LPCOLESTR pszFileName, BOOL fRemember);
  178.     STDMETHODIMP        SaveCompleted(LPCOLESTR pszFileName);
  179.     STDMETHODIMP        GetCurFile(LPOLESTR *ppszFileName);
  180.     
  181. protected:
  182.     UINT        _cRef;                  // interface ref count
  183.     CPackage*   _pPackage;              // back pointer to object
  184. };
  185. ////////////////////////////////////////////
  186. //
  187. // CPackage_IDataObject Interface
  188. //
  189. class CPackage_IDataObject : public IDataObject
  190. {
  191. public:
  192.     CPackage_IDataObject(CPackage *pPackage);
  193.    ~CPackage_IDataObject();
  194.     
  195.     // IUnknown Methods...
  196.     STDMETHODIMP         QueryInterface(REFIID,void **);
  197.     STDMETHODIMP_(ULONG) AddRef(void);
  198.     STDMETHODIMP_(ULONG) Release(void);
  199.     
  200.     // IDataObject Methods...
  201.     STDMETHODIMP GetData(LPFORMATETC pFEIn, LPSTGMEDIUM pSTM);
  202.     STDMETHODIMP GetDataHere(LPFORMATETC pFE, LPSTGMEDIUM pSTM);
  203.     STDMETHODIMP QueryGetData(LPFORMATETC pFE);
  204.     STDMETHODIMP GetCanonicalFormatEtc(LPFORMATETC pFEIn, LPFORMATETC pFEOut);
  205.     STDMETHODIMP SetData(LPFORMATETC pFE, LPSTGMEDIUM pSTM, BOOL fRelease);
  206.     STDMETHODIMP EnumFormatEtc(DWORD dwDirection, LPENUMFORMATETC *ppEnum);
  207.     STDMETHODIMP DAdvise(LPFORMATETC pFE, DWORD grfAdv, LPADVISESINK pAdvSink,
  208.                             DWORD *pdwConnection);
  209.     STDMETHODIMP DUnadvise(DWORD dwConnection);
  210.     STDMETHODIMP EnumDAdvise(LPENUMSTATDATA *ppEnum);
  211.     
  212. protected:
  213.     UINT        _cRef;
  214.     CPackage*   _pPackage;
  215. };
  216. ////////////////////////////////////////////
  217. //
  218. // CPackage_IOleObject Interface
  219. //
  220. class CPackage_IOleObject : public IOleObject
  221. {
  222.     
  223.     friend DWORD CALLBACK MainWaitOnChildThreadProc(void *);
  224.     
  225. public:
  226.     CPackage_IOleObject(CPackage *pPackage);
  227.    ~CPackage_IOleObject();
  228.     
  229.     // IUnknown Methods...
  230.     STDMETHODIMP         QueryInterface(REFIID,void **);
  231.     STDMETHODIMP_(ULONG) AddRef(void);
  232.     STDMETHODIMP_(ULONG) Release(void);
  233.     
  234.     
  235.     // IOleObject Methods...
  236.     STDMETHODIMP SetClientSite(LPOLECLIENTSITE pClientSite);
  237.     STDMETHODIMP GetClientSite(LPOLECLIENTSITE *ppClientSite);
  238.     STDMETHODIMP SetHostNames(LPCOLESTR szContainerApp, LPCOLESTR szContainerObj);
  239.     STDMETHODIMP Close(DWORD dwSaveOption);
  240.     STDMETHODIMP SetMoniker(DWORD dwWhichMoniker, LPMONIKER pmk);
  241.     STDMETHODIMP GetMoniker(DWORD dwAssign, DWORD dwWhichMonkier,LPMONIKER *ppmk);
  242.     STDMETHODIMP InitFromData(LPDATAOBJECT pDataObject, BOOL fCreation, 
  243.                                  DWORD dwReserved);
  244.     STDMETHODIMP GetClipboardData(DWORD dwReserved, LPDATAOBJECT *ppDataObject);
  245.     STDMETHODIMP DoVerb(LONG iVerb, LPMSG lpmsg, LPOLECLIENTSITE pActiveSite, 
  246.                            LONG lindex, HWND hwndParent, LPCRECT lprcPosRect);
  247.     STDMETHODIMP EnumVerbs(LPENUMOLEVERB *ppEnumOleVerb);
  248.     STDMETHODIMP Update(void);
  249.     STDMETHODIMP IsUpToDate(void);
  250.     STDMETHODIMP GetUserClassID(LPCLSID pClsid);
  251.     STDMETHODIMP GetUserType(DWORD dwFromOfType, LPOLESTR *pszUserType);
  252.     STDMETHODIMP SetExtent(DWORD dwDrawAspect, LPSIZEL psizel);
  253.     STDMETHODIMP GetExtent(DWORD dwDrawAspect, LPSIZEL psizel);
  254.     STDMETHODIMP Advise(LPADVISESINK pAdvSink, DWORD *pdwConnection);
  255.     STDMETHODIMP Unadvise(DWORD dwConnection);
  256.     STDMETHODIMP EnumAdvise(LPENUMSTATDATA *ppenumAdvise);
  257.     STDMETHODIMP GetMiscStatus(DWORD dwAspect, DWORD *pdwStatus);
  258.     STDMETHODIMP SetColorScheme(LPLOGPALETTE pLogpal);
  259.     
  260. protected:
  261.     UINT        _cRef;
  262.     CPackage*   _pPackage;
  263.     
  264. };
  265. ////////////////////////////////////////////
  266. //
  267. // CPackage_IViewObject2 Interface
  268. //
  269. class CPackage_IViewObject2 : public IViewObject2
  270. {
  271. public:
  272.     CPackage_IViewObject2(CPackage *pPackage);
  273.    ~CPackage_IViewObject2();
  274.     
  275.     // IUnknown Methods...
  276.     STDMETHODIMP         QueryInterface(REFIID,void **);
  277.     STDMETHODIMP_(ULONG) AddRef(void);
  278.     STDMETHODIMP_(ULONG) Release(void);
  279.     
  280.     // IViewObject2 Methods...
  281.     STDMETHODIMP Draw(DWORD dwDrawAspect, LONG lindex, void *pvAspect,
  282.                          DVTARGETDEVICE *ptd, HDC hdcTargetDev,
  283.                          HDC hdcDraw, LPCRECTL lprcBounds, LPCRECTL lprcWBounds,
  284.                          BOOL (CALLBACK *pfnContinue)(DWORD), DWORD dwContinue);
  285.     STDMETHODIMP GetColorSet(DWORD dwAspect, LONG lindex, void *pvAspect,
  286.                                 DVTARGETDEVICE *ptd, HDC hdcTargetDev,
  287.                                 LPLOGPALETTE *ppColorSet);
  288.     STDMETHODIMP Freeze(DWORD dwDrawAspect, LONG lindex, void * pvAspect, 
  289.                            DWORD *pdwFreeze);
  290.     STDMETHODIMP Unfreeze(DWORD dwFreeze);
  291.     STDMETHODIMP SetAdvise(DWORD dwAspects, DWORD dwAdvf,
  292.                               LPADVISESINK pAdvSink);
  293.     STDMETHODIMP GetAdvise(DWORD *pdwAspects, DWORD *pdwAdvf,
  294.                               LPADVISESINK *ppAdvSink);
  295.     STDMETHODIMP GetExtent(DWORD dwAspect, LONG lindex, DVTARGETDEVICE *ptd,
  296.                               LPSIZEL pszl);
  297.                            
  298. protected:
  299.     UINT                _cRef;
  300.     CPackage*           _pPackage;
  301.     BOOL                _fFrozen;
  302. };
  303. ////////////////////////////////////////////
  304. //
  305. // CPackage_IAdviseSink Interface
  306. //
  307. class CPackage_IAdviseSink : public IAdviseSink
  308. {
  309. public:
  310.     CPackage_IAdviseSink(CPackage *pPackage);
  311.    ~CPackage_IAdviseSink();
  312.     
  313.     // IUnknown Methods...
  314.     STDMETHODIMP         QueryInterface(REFIID,void **);
  315.     STDMETHODIMP_(ULONG) AddRef(void);
  316.     STDMETHODIMP_(ULONG) Release(void);
  317.     
  318.     // IAdviseSink Methods...
  319.     STDMETHODIMP_(void)  OnDataChange(LPFORMATETC, LPSTGMEDIUM);
  320.     STDMETHODIMP_(void)  OnViewChange(DWORD, LONG);
  321.     STDMETHODIMP_(void)  OnRename(LPMONIKER);
  322.     STDMETHODIMP_(void)  OnSave(void);
  323.     STDMETHODIMP_(void)  OnClose(void);
  324.                            
  325. protected:
  326.     UINT                _cRef;
  327.     CPackage*           _pPackage;
  328.     
  329. };
  330. ////////////////////////////////////////////
  331. //
  332. // CPackage_IRunnableObject Interface
  333. //
  334. class CPackage_IRunnableObject : public IRunnableObject
  335. {
  336. public:
  337.     CPackage_IRunnableObject(CPackage *pPackage);
  338.    ~CPackage_IRunnableObject();
  339.     
  340.     // IUnknown Methods...
  341.     STDMETHODIMP         QueryInterface(REFIID,void **);
  342.     STDMETHODIMP_(ULONG) AddRef(void);
  343.     STDMETHODIMP_(ULONG) Release(void);
  344.     
  345.     // IRunnable Object methods...
  346.     STDMETHODIMP        GetRunningClass(LPCLSID);
  347.     STDMETHODIMP        Run(LPBC);
  348.     STDMETHODIMP_(BOOL) IsRunning();
  349.     STDMETHODIMP        LockRunning(BOOL,BOOL);
  350.     STDMETHODIMP        SetContainedObject(BOOL);
  351.     
  352. protected:
  353.     UINT                _cRef;
  354.     CPackage*           _pPackage;
  355.     
  356. };
  357. ////////////////////////////////////////////
  358. //
  359. // Package Wizard and Edit Package Dialog Procs and functions
  360. //
  361. // Pages for Wizard
  362. BOOL APIENTRY PackWiz_CreatePackageDlgProc(HWND, UINT, WPARAM, LPARAM);
  363. BOOL APIENTRY PackWiz_SelectFileDlgProc(HWND, UINT, WPARAM, LPARAM);
  364. BOOL APIENTRY PackWiz_SelectIconDlgProc(HWND, UINT, WPARAM, LPARAM);
  365. BOOL APIENTRY PackWiz_SelectLabelDlgProc(HWND, UINT, WPARAM, LPARAM);
  366. // Edit dialog procs
  367. BOOL APIENTRY PackWiz_EditEmbedPackageDlgProc(HWND, UINT, WPARAM, LPARAM);
  368. BOOL APIENTRY PackWiz_EditCmdPackakgeDlgProc(HWND, UINT, WPARAM, LPARAM);
  369. // functions
  370. int PackWiz_CreateWizard(HWND,LPPACKAGER_INFO);
  371. int PackWiz_EditPackage(HWND,WORD,LPPACKAGER_INFO);
  372. VOID PackWiz_FillInPropertyPage(PROPSHEETPAGE *, INT, DLGPROC);
  373. #endif  // __cplusplus
  374. #endif