PATRON.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:12k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * PATRON.H
  3.  * Patron Chapter 21
  4.  *
  5.  * Single include file that pulls in everything needed for other
  6.  * source files in the application.
  7.  *
  8.  * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
  9.  *
  10.  * Kraig Brockschmidt, Microsoft
  11.  * Internet  :  kraigb@microsoft.com
  12.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  13.  */
  14. #ifndef _PATRON_H_
  15. #define _PATRON_H_
  16. #define INC_CLASSLIB
  17. #define INC_OLEUI
  18. //CHAPTER21MOD
  19. #define CHAPTER21
  20. //End CHAPTER21MOD
  21. #include <inole.h>
  22. #include "resource.h"
  23. //Get editor window information
  24. #include "pages.h"
  25. /*
  26.  * UINT value such that adding one produces zero.  Portable to Win32.
  27.  * This is used to represent a non-existent zero-based UINT value
  28.  */
  29. #define NOVALUE                     ((UINT)-1)
  30. //PATRON.CPP:  Frame object that creates a main window
  31. class CPatronFrame : public CFrame
  32.     {
  33.     //CHAPTER21MOD
  34.     //For access to m_pCL for document creation
  35.     friend class CLinkClassFactory;
  36.     //End CHAPTER21MOD
  37.     private:
  38.         BOOL            m_fInitialized;     //OleInitialize worked
  39.         LPCLASSFACTORY  m_pIClassDataTran;  //For locking.
  40.         //CHAPTER21MOD
  41.         PCDocument      m_pDocCreated;      //What class factory makes
  42.         BOOL            m_fEmbedding;       //-Embedding on command line?
  43.         DWORD           m_dwRegCO;          //From CoRegisterClassObject
  44.         LPCLASSFACTORY  m_pIClassFactory;
  45.         //End CHAPTER21MOD
  46.     protected:
  47.         //Overridable for creating a CPatronClient
  48.         virtual PCClient    CreateCClient(void);
  49.         virtual BOOL        FMessageHook(HWND, UINT, WPARAM, LPARAM
  50.                                 , LRESULT *);
  51.         //CHAPTER21MOD
  52.         virtual BOOL        PreShowInit(void);
  53.         //End CHAPTER21MOD
  54.         virtual BOOL        RegisterAllClasses(void);
  55.         virtual UINT        CreateToolbar(void);
  56.         virtual LRESULT     OnCommand(HWND, WPARAM, LPARAM);
  57.     public:
  58.         CPatronFrame(HINSTANCE, HINSTANCE, LPSTR, int);
  59.         virtual ~CPatronFrame(void);
  60.         //Overrides
  61.         virtual BOOL        Init(PFRAMEINIT);
  62.         virtual void        UpdateMenus(HMENU, UINT);
  63.         virtual void        UpdateToolbar(void);
  64.     };
  65. typedef CPatronFrame *PCPatronFrame;
  66. //CHAPTER21MOD
  67. //These are global for simplification of object implementation.
  68. extern ULONG g_cObj;
  69. extern ULONG g_cLock;
  70. extern HWND  g_hWnd;
  71. //Function for the object to notify on destruction.
  72. void ObjectDestroyed(void);
  73. //ICLASSF.CPP
  74. class CLinkClassFactory : public IClassFactory
  75.     {
  76.     protected:
  77.         ULONG           m_cRef;
  78.         PCPatronFrame   m_pFR;          //For document creation.
  79.     public:
  80.         CLinkClassFactory(PCPatronFrame);
  81.         ~CLinkClassFactory(void);
  82.         //IUnknown members
  83.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  84.         STDMETHODIMP_(ULONG) AddRef(void);
  85.         STDMETHODIMP_(ULONG) Release(void);
  86.         //IClassFactory members
  87.         STDMETHODIMP         CreateInstance(LPUNKNOWN, REFIID
  88.                                  , PPVOID);
  89.         STDMETHODIMP         LockServer(BOOL);
  90.     };
  91. typedef CLinkClassFactory *PCLinkClassFactory;
  92. //End CHAPTER21MOD
  93. //CLIENT.CPP
  94. /*
  95.  * The only reason we have a derived class here is to override
  96.  * CreateCDocument so we can create our own type as well as
  97.  * overriding NewDocument to perform one other piece of work once
  98.  * the document's been created.
  99.  */
  100. class CPatronClient : public CClient
  101.     {
  102.     protected:
  103.         //Overridable for creating a new CDocument
  104.         virtual PCDocument CreateCDocument(void);
  105.     public:
  106.         CPatronClient(HINSTANCE, PCFrame);
  107.         virtual ~CPatronClient(void);
  108.     };
  109. typedef CPatronClient *PCPatronClient;
  110. //DOCUMENT.CPP
  111. //Constant ID for the pages window that lives in a document window
  112. #define ID_PAGES            723
  113. //CHAPTER21MOD
  114. class CImpIPersistFile;
  115. typedef class CImpIPersistFile *PCImpIPersistFile;
  116. class CImpIOleItemContainer;
  117. typedef class CImpIOleItemContainer *PCImpIOleItemContainer;
  118. /*
  119.  * To support linking to embeddings, the document needs to have
  120.  * IPersistFile and IOleItemContainer interfaces, so we multiply
  121.  * inherit from IUnknown and provide two interface implementations.
  122.  */
  123. class CPatronDoc : public CDocument, public IUnknown
  124. //End CHAPTER21MOD
  125.     {
  126.     //These need access to FQueryPasteFromData, PasteFromData
  127.     friend class CDropTarget;
  128.     friend class CDropSource;
  129.     //CHAPTER21MOD
  130.     friend class CImpIPersistFile;
  131.     friend class CImpIOleItemContainer;
  132.     //End CHAPTER21MOD
  133.     protected:
  134.         LONG            m_lVer;         //Loaded data version
  135.         PCPages         m_pPG;          //Pages window in us
  136.         LPSTORAGE       m_pIStorage;    //Root storage for document
  137.         BOOL            m_fPrintSetup;
  138.         class CDropTarget *m_pDropTarget;   //Registered target
  139.         UINT            m_cfEmbeddedObject; //Clipboard formats
  140.         UINT            m_cfObjectDescriptor;
  141.         UINT            m_cfLinkSource;
  142.         UINT            m_cfLinkSrcDescriptor;
  143.         BOOL            m_fShowTypes;       //Show Objects active?
  144.         //CHAPTER21MOD
  145.         ULONG               m_cRef;
  146.         BOOL                m_fRename;          //Rename on Save?
  147.         DWORD               m_dwRegROT;
  148.         DWORD               m_dwRegROTWild;
  149.         PCImpIPersistFile       m_pImpIPersistFile;
  150.         PCImpIOleItemContainer  m_pImpIOleItemContainer;
  151.         //End CHAPTER21MOD
  152.     protected:
  153.         virtual BOOL    FMessageHook(HWND, UINT, WPARAM, LPARAM
  154.             , LRESULT *);
  155.         BOOL            FQueryPasteFromData(LPDATAOBJECT
  156.                             , LPFORMATETC, PTENANTTYPE);
  157.         BOOL            FQueryPasteLinkFromData(LPDATAOBJECT
  158.                             , LPFORMATETC, PTENANTTYPE);
  159.         BOOL            PasteFromData(LPDATAOBJECT, LPFORMATETC
  160.                             , TENANTTYPE, PPATRONOBJECT, DWORD
  161.                             , BOOL);
  162.     public:
  163.         CPatronDoc(HINSTANCE, PCFrame, PCDocumentAdviseSink);
  164.         virtual ~CPatronDoc(void);
  165.         //CHAPTER21MOD
  166.         //We now need our ubiquitous set of IUnknown members.
  167.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  168.         STDMETHODIMP_(ULONG) AddRef(void);
  169.         STDMETHODIMP_(ULONG) Release(void);
  170.         //End CHAPTER21MOD
  171.         virtual BOOL    Init(PDOCUMENTINIT);
  172.         virtual void    Clear(void);
  173.         //CHAPTER21MOD
  174.         virtual BOOL    FDirtySet(BOOL);
  175.         //End CHAPTER21MOD
  176.         virtual BOOL    FDirtyGet(void);
  177.         virtual void    Delete(void);
  178.         virtual BOOL    FQueryPrinterSetup(void);
  179.         virtual BOOL    FQueryObjectSelected(HMENU);
  180.         virtual UINT    Load(BOOL, LPTSTR);
  181.         virtual UINT    Save(UINT, LPTSTR);
  182.         virtual BOOL    Print(HWND);
  183.         virtual UINT    PrinterSetup(HWND, BOOL);
  184.         virtual BOOL    Clip(HWND, BOOL);
  185.         virtual BOOL    FQueryPaste(void);
  186.         virtual BOOL    Paste(HWND);
  187.         virtual BOOL    PasteSpecial(HWND);
  188.         virtual BOOL    FQueryEnableEditLinks(void);
  189.         virtual BOOL    EditLinks(HWND);
  190.         virtual BOOL    ShowOrQueryObjectTypes(BOOL, BOOL);
  191.         virtual UINT    NewPage(void);
  192.         virtual UINT    DeletePage(void);
  193.         virtual UINT    NextPage(void);
  194.         virtual UINT    PreviousPage(void);
  195.         virtual UINT    FirstPage(void);
  196.         virtual UINT    LastPage(void);
  197.         virtual void    Rename(LPTSTR);
  198.         virtual BOOL    InsertObject(HWND);
  199.         virtual void    ActivateObject(LONG);
  200.         virtual BOOL    ConvertObject(HWND);
  201.     };
  202. typedef CPatronDoc *PCPatronDoc;
  203. //Hook for Print Dialog to hide Setup... button
  204. UINT CALLBACK PrintDlgHook(HWND, UINT, WPARAM, LPARAM);
  205. //CHAPTER21MOD
  206. //IPersistFile implementation for CPatronDoc
  207. class CImpIPersistFile : public IPersistFile
  208.     {
  209.     protected:
  210.         ULONG               m_cRef;      //Interface reference count
  211.         PCPatronDoc         m_pDoc;      //Back pointer to the object
  212.         LPUNKNOWN           m_pUnkOuter; //Controlling unknown
  213.     public:
  214.         CImpIPersistFile(PCPatronDoc, LPUNKNOWN);
  215.         ~CImpIPersistFile(void);
  216.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  217.         STDMETHODIMP_(ULONG) AddRef(void);
  218.         STDMETHODIMP_(ULONG) Release(void);
  219.         STDMETHODIMP GetClassID(LPCLSID);
  220.         STDMETHODIMP IsDirty(void);
  221.         STDMETHODIMP Load(LPCOLESTR, DWORD);
  222.         STDMETHODIMP Save(LPCOLESTR, BOOL);
  223.         STDMETHODIMP SaveCompleted(LPCOLESTR);
  224.         STDMETHODIMP GetCurFile(LPOLESTR *);
  225.     };
  226. /*
  227.  * IOleItemContainer implementation for both CPatronDoc and CPage,
  228.  * therefore have two back pointers.
  229.  */
  230. class CImpIOleItemContainer : public IOleItemContainer
  231.     {
  232.     protected:
  233.         ULONG               m_cRef;
  234.         class CPage        *m_pPage;
  235.         PCPatronDoc         m_pDoc;      //Convenient naming & types
  236.         LPUNKNOWN           m_pUnkOuter;
  237.         BOOL                m_fDoc;      //Document or page?
  238.     private:
  239.         BOOL         TenantFromName(LPOLESTR, PCTenant *);
  240.     public:
  241.         CImpIOleItemContainer(LPVOID, LPUNKNOWN, BOOL);
  242.         ~CImpIOleItemContainer(void);
  243.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  244.         STDMETHODIMP_(ULONG) AddRef(void);
  245.         STDMETHODIMP_(ULONG) Release(void);
  246.         STDMETHODIMP ParseDisplayName(LPBC, LPOLESTR, ULONG *
  247.             , LPMONIKER *);
  248.         STDMETHODIMP EnumObjects(DWORD, LPENUMUNKNOWN *);
  249.         STDMETHODIMP LockContainer(BOOL);
  250.         STDMETHODIMP GetObject(LPOLESTR, DWORD, LPBINDCTX, REFIID
  251.             , PPVOID);
  252.         STDMETHODIMP GetObjectStorage(LPOLESTR, LPBINDCTX, REFIID
  253.             , PPVOID);
  254.         STDMETHODIMP IsRunning(LPOLESTR);
  255.     };
  256. //End CHAPTER21MOD
  257. //Drag-drop objects we need in the document
  258. class CDropTarget : public IDropTarget
  259.     {
  260.     protected:
  261.         ULONG               m_cRef;
  262.         PCPatronDoc         m_pDoc;
  263.         LPDATAOBJECT        m_pIDataObject;  //From DragEnter
  264.         BOOL                m_fPendingRepaint;
  265.         POINTL              m_ptPick;        //Pick-up offsets
  266.         POINTL              m_ptLast;        //Last drag point
  267.         SIZEL               m_szl;           //Object size
  268.         BOOL                m_fFeedback;     //Draw feedback?
  269.         FORMATETC           m_fe;            //Real dropping format
  270.     public:
  271.         CDropTarget(PCPatronDoc);
  272.         ~CDropTarget(void);
  273.         //IDropTarget interface members
  274.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  275.         STDMETHODIMP_(ULONG) AddRef(void);
  276.         STDMETHODIMP_(ULONG) Release(void);
  277.         STDMETHODIMP DragEnter(LPDATAOBJECT, DWORD, POINTL,LPDWORD);
  278.         STDMETHODIMP DragOver(DWORD, POINTL, LPDWORD);
  279.         STDMETHODIMP DragLeave(void);
  280.         STDMETHODIMP Drop(LPDATAOBJECT, DWORD, POINTL, LPDWORD);
  281.     };
  282. typedef CDropTarget *PCDropTarget;
  283. class CDropSource : public IDropSource
  284.     {
  285.     protected:
  286.         ULONG               m_cRef;
  287.     public:
  288.         CDropSource(void);
  289.         ~CDropSource(void);
  290.         //IDropSource interface members
  291.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  292.         STDMETHODIMP_(ULONG) AddRef(void);
  293.         STDMETHODIMP_(ULONG) Release(void);
  294.         STDMETHODIMP QueryContinueDrag(BOOL, DWORD);
  295.         STDMETHODIMP GiveFeedback(DWORD);
  296.     };
  297. typedef CDropSource *PCDropSource;
  298. #endif //_PATRON_H_