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

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * PATRON.H
  3.  * Patron Chapter 20
  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. //CHAPTER20MOD
  19. #define CHAPTER20
  20. //End CHAPTER20MOD
  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.     private:
  34.         BOOL            m_fInitialized;     //OleInitialize worked
  35.         LPCLASSFACTORY  m_pIClassDataTran;  //For locking.
  36.     protected:
  37.         //Overridable for creating a CPatronClient
  38.         virtual PCClient    CreateCClient(void);
  39.         virtual BOOL        FMessageHook(HWND, UINT, WPARAM, LPARAM
  40.                                 , LRESULT *);
  41.         virtual BOOL        RegisterAllClasses(void);
  42.         virtual UINT        CreateToolbar(void);
  43.         virtual LRESULT     OnCommand(HWND, WPARAM, LPARAM);
  44.     public:
  45.         CPatronFrame(HINSTANCE, HINSTANCE, LPSTR, int);
  46.         virtual ~CPatronFrame(void);
  47.         //Overrides
  48.         virtual BOOL        Init(PFRAMEINIT);
  49.         virtual void        UpdateMenus(HMENU, UINT);
  50.         virtual void        UpdateToolbar(void);
  51.     };
  52. typedef CPatronFrame *PCPatronFrame;
  53. //CLIENT.CPP
  54. /*
  55.  * The only reason we have a derived class here is to override
  56.  * CreateCDocument so we can create our own type as well as
  57.  * overriding NewDocument to perform one other piece of work once
  58.  * the document's been created.
  59.  */
  60. class CPatronClient : public CClient
  61.     {
  62.     protected:
  63.         //Overridable for creating a new CDocument
  64.         virtual PCDocument CreateCDocument(void);
  65.     public:
  66.         CPatronClient(HINSTANCE, PCFrame);
  67.         virtual ~CPatronClient(void);
  68.     };
  69. typedef CPatronClient *PCPatronClient;
  70. //DOCUMENT.CPP
  71. //Constant ID for the pages window that lives in a document window
  72. #define ID_PAGES            723
  73. class CPatronDoc : public CDocument
  74.     {
  75.     //These need access to FQueryPasteFromData, PasteFromData
  76.     friend class CDropTarget;
  77.     friend class CDropSource;
  78.     protected:
  79.         LONG            m_lVer;         //Loaded data version
  80.         PCPages         m_pPG;          //Pages window in us
  81.         LPSTORAGE       m_pIStorage;    //Root storage for document
  82.         BOOL            m_fPrintSetup;
  83.         class CDropTarget *m_pDropTarget;   //Registered target
  84.         UINT            m_cfEmbeddedObject; //Clipboard formats
  85.         UINT            m_cfObjectDescriptor;
  86.         //CHAPTER20MOD
  87.         UINT            m_cfLinkSource;
  88.         UINT            m_cfLinkSrcDescriptor;
  89.         BOOL            m_fShowTypes;       //Show Objects active?
  90.         //End CHAPTER20MOD
  91.     protected:
  92.         virtual BOOL    FMessageHook(HWND, UINT, WPARAM, LPARAM
  93.             , LRESULT *);
  94.         BOOL            FQueryPasteFromData(LPDATAOBJECT
  95.                             , LPFORMATETC, PTENANTTYPE);
  96.         //CHAPTER20MOD
  97.         BOOL            FQueryPasteLinkFromData(LPDATAOBJECT
  98.                             , LPFORMATETC, PTENANTTYPE);
  99.         //End CHAPTER20MOD
  100.         BOOL            PasteFromData(LPDATAOBJECT, LPFORMATETC
  101.                             , TENANTTYPE, PPATRONOBJECT, DWORD
  102.                             , BOOL);
  103.     public:
  104.         CPatronDoc(HINSTANCE, PCFrame, PCDocumentAdviseSink);
  105.         virtual ~CPatronDoc(void);
  106.         virtual BOOL    Init(PDOCUMENTINIT);
  107.         virtual void    Clear(void);
  108.         virtual BOOL    FDirtyGet(void);
  109.         virtual void    Delete(void);
  110.         virtual BOOL    FQueryPrinterSetup(void);
  111.         virtual BOOL    FQueryObjectSelected(HMENU);
  112.         virtual UINT    Load(BOOL, LPTSTR);
  113.         virtual UINT    Save(UINT, LPTSTR);
  114.         virtual BOOL    Print(HWND);
  115.         virtual UINT    PrinterSetup(HWND, BOOL);
  116.         virtual BOOL    Clip(HWND, BOOL);
  117.         virtual BOOL    FQueryPaste(void);
  118.         virtual BOOL    Paste(HWND);
  119.         virtual BOOL    PasteSpecial(HWND);
  120.         //CHAPTER20MOD
  121.         virtual BOOL    FQueryEnableEditLinks(void);
  122.         virtual BOOL    EditLinks(HWND);
  123.         virtual BOOL    ShowOrQueryObjectTypes(BOOL, BOOL);
  124.         //End CHAPTER20MOD
  125.         virtual UINT    NewPage(void);
  126.         virtual UINT    DeletePage(void);
  127.         virtual UINT    NextPage(void);
  128.         virtual UINT    PreviousPage(void);
  129.         virtual UINT    FirstPage(void);
  130.         virtual UINT    LastPage(void);
  131.         virtual void    Rename(LPTSTR);
  132.         virtual BOOL    InsertObject(HWND);
  133.         virtual void    ActivateObject(LONG);
  134.         virtual BOOL    ConvertObject(HWND);
  135.     };
  136. typedef CPatronDoc *PCPatronDoc;
  137. //Hook for Print Dialog to hide Setup... button
  138. UINT CALLBACK PrintDlgHook(HWND, UINT, WPARAM, LPARAM);
  139. //Drag-drop objects we need in the document
  140. class CDropTarget : public IDropTarget
  141.     {
  142.     protected:
  143.         ULONG               m_cRef;
  144.         PCPatronDoc         m_pDoc;
  145.         LPDATAOBJECT        m_pIDataObject;  //From DragEnter
  146.         BOOL                m_fPendingRepaint;
  147.         POINTL              m_ptPick;        //Pick-up offsets
  148.         POINTL              m_ptLast;        //Last drag point
  149.         SIZEL               m_szl;           //Object size
  150.         BOOL                m_fFeedback;     //Draw feedback?
  151.         FORMATETC           m_fe;            //Real dropping format
  152.     public:
  153.         CDropTarget(PCPatronDoc);
  154.         ~CDropTarget(void);
  155.         //IDropTarget interface members
  156.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  157.         STDMETHODIMP_(ULONG) AddRef(void);
  158.         STDMETHODIMP_(ULONG) Release(void);
  159.         STDMETHODIMP DragEnter(LPDATAOBJECT, DWORD, POINTL,LPDWORD);
  160.         STDMETHODIMP DragOver(DWORD, POINTL, LPDWORD);
  161.         STDMETHODIMP DragLeave(void);
  162.         STDMETHODIMP Drop(LPDATAOBJECT, DWORD, POINTL, LPDWORD);
  163.     };
  164. typedef CDropTarget *PCDropTarget;
  165. class CDropSource : public IDropSource
  166.     {
  167.     protected:
  168.         ULONG               m_cRef;
  169.     public:
  170.         CDropSource(void);
  171.         ~CDropSource(void);
  172.         //IDropSource interface members
  173.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  174.         STDMETHODIMP_(ULONG) AddRef(void);
  175.         STDMETHODIMP_(ULONG) Release(void);
  176.         STDMETHODIMP QueryContinueDrag(BOOL, DWORD);
  177.         STDMETHODIMP GiveFeedback(DWORD);
  178.     };
  179. typedef CDropSource *PCDropSource;
  180. #endif //_PATRON_H_