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

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * COSMO.H
  3.  * Cosmo Chapter 18
  4.  *
  5.  * Single include file that pulls in everything needed for other
  6.  * source files in the Cosmo 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 _COSMO_H_
  15. #define _COSMO_H_
  16. #define INC_CLASSLIB
  17. //CHAPTER18MOD
  18. #define INC_OLE2UI
  19. #define CHAPTER18
  20. //End CHAPTER18MOD
  21. #include <inole.h>
  22. #include "resource.h"
  23. //Get the editor window information.
  24. #include "polyline.h"
  25. //COSMO.CPP:  Frame object that creates a main window
  26. class CCosmoFrame : public CFrame
  27.     {
  28.     //CHAPTER18MOD
  29.     friend class CFigureClassFactory;
  30.     friend class CFigure;   //For UI purposes.
  31.     //End CHAPTER18MOD
  32.     private:
  33.         HBITMAP         m_hBmpLines[5];     //Menu item bitmaps
  34.         UINT            m_uIDCurLine;       //Current line selection
  35.         BOOL            m_fInitialized;     //Did OleInitalize work?
  36.         LPCLASSFACTORY  m_pIClassDataTran;  //For locking
  37.         //CHAPTER18MOD
  38.         BOOL            m_fEmbedding;       //-Embedding found?
  39.         DWORD           m_dwRegCO;          //Registration key
  40.         LPCLASSFACTORY  m_pIClassFactory;
  41.         //End CHAPTER18MOD
  42.     protected:
  43.         //Overridable for creating a CClient for this frame
  44.         virtual PCClient  CreateCClient(void);
  45.         virtual BOOL      RegisterAllClasses(void);
  46.         virtual BOOL      PreShowInit(void);
  47.         virtual UINT      CreateToolbar(void);
  48.         virtual LRESULT   OnCommand(HWND, WPARAM, LPARAM);
  49.         virtual void      OnDocumentDataChange(PCDocument);
  50.         virtual void      OnDocumentActivate(PCDocument);
  51.         //New for this class
  52.         virtual void      CreateLineMenu(void);
  53.     public:
  54.         CCosmoFrame(HINSTANCE, HINSTANCE, LPSTR, int);
  55.         virtual ~CCosmoFrame(void);
  56.         //Overrides
  57.         virtual BOOL      Init(PFRAMEINIT);
  58.         virtual void      UpdateMenus(HMENU, UINT);
  59.         virtual void      UpdateToolbar(void);
  60.         //New for this class
  61.         virtual void      CheckLineSelection(UINT);
  62.         //CHAPTER18MOD
  63.         virtual void      UpdateEmbeddingUI(BOOL, PCDocument
  64.                               , LPCTSTR, LPCTSTR);
  65.         //End CHAPTER18MOD
  66.     };
  67. typedef CCosmoFrame *PCCosmoFrame;
  68. //CLIENT.CPP
  69. /*
  70.  * The only reason we have a derived class here is to override
  71.  * CreateCDocument so we can create our own type as well as
  72.  * overriding NewDocument to perform one other piece of work once
  73.  * the document's been created.
  74.  */
  75. class CCosmoClient : public CClient
  76.     {
  77.     protected:
  78.         //Overridable for creating a new CDocument
  79.         virtual PCDocument CreateCDocument(void);
  80.     public:
  81.         CCosmoClient(HINSTANCE, PCFrame);
  82.         virtual ~CCosmoClient(void);
  83.         virtual PCDocument NewDocument(BOOL);
  84.     };
  85. typedef CCosmoClient *PCCosmoClient;
  86. //DOCUMENT.CPP
  87. //Constant ID for the window polyline that lives in a document
  88. #define ID_POLYLINE         10
  89. class CCosmoDoc : public CDocument
  90.     {
  91.     friend class CPolylineAdviseSink;
  92.     //These need access to FQueryPasteFromData, PasteFromData
  93.     friend class CDropTarget;
  94.     friend class CDropSource;
  95.     //CHAPTER18MOD
  96.     friend class CFigureClassFactory;
  97.     friend class CFigure;
  98.     //End CHAPTER18MOD
  99.     protected:
  100.         UINT                    m_uPrevSize;    //Last WM_SIZE wParam
  101.         LONG                    m_lVer;         //Loaded Polyline ver
  102.         PCPolyline              m_pPL;          //Polyline window here
  103.         PCPolylineAdviseSink    m_pPLAdv;       //Advises from Polyline
  104.         class CDropTarget      *m_pDropTarget;  //Registered target
  105.         BOOL                    m_fDragSource;  //Source==target?
  106.         //CHAPTER18MOD
  107.         UINT                    m_cfEmbedSource;
  108.         UINT                    m_cfObjectDescriptor;
  109.         class CFigure          *m_pFigure;      //The object in us.
  110.         //End CHAPTER18MOD
  111.     protected:
  112.         virtual BOOL     FMessageHook(HWND, UINT, WPARAM, LPARAM
  113.             , LRESULT *);
  114.         void             DropSelectTargetWindow(void);
  115.     public:
  116.         CCosmoDoc(HINSTANCE, PCFrame, PCDocumentAdviseSink);
  117.         virtual ~CCosmoDoc(void);
  118.         virtual BOOL     Init(PDOCUMENTINIT);
  119.         virtual void     Clear(void);
  120.         //CHAPTER18MOD
  121.         virtual BOOL     FDirtySet(BOOL);
  122.         virtual BOOL     FDirtyGet(void);
  123.         //End CHAPTER18MOD
  124.         virtual UINT     Load(BOOL, LPTSTR);
  125.         virtual UINT     Save(UINT, LPTSTR);
  126.         virtual void     Undo(void);
  127.         virtual BOOL     Clip(HWND, BOOL);
  128.         virtual HGLOBAL  RenderFormat(UINT);
  129.         //CHAPTER18MOD
  130.         virtual BOOL     RenderMedium(UINT, LPSTGMEDIUM);
  131.         //End CHAPTER18MOD
  132.         virtual BOOL     FQueryPaste(void);
  133.         virtual BOOL     Paste(HWND);
  134.         //CHAPTER18MOD
  135.         //These were protected.  Now for IOleObject, should be public.
  136.         virtual BOOL     FQueryPasteFromData(LPDATAOBJECT);
  137.         virtual BOOL     PasteFromData(LPDATAOBJECT);
  138.         LPDATAOBJECT     TransferObjectCreate(BOOL);
  139.         //End CHAPTER18MOD
  140.         virtual COLORREF ColorSet(UINT, COLORREF);
  141.         virtual COLORREF ColorGet(UINT);
  142.         virtual UINT     LineStyleSet(UINT);
  143.         virtual UINT     LineStyleGet(void);
  144.     };
  145. typedef CCosmoDoc *PCCosmoDoc;
  146. //These color indices wrap the polyline definitions
  147. #define DOCCOLOR_BACKGROUND             POLYLINECOLOR_BACKGROUND
  148. #define DOCCOLOR_LINE                   POLYLINECOLOR_LINE
  149. //Drag-drop interfaces we need in the document
  150. class CDropTarget : public IDropTarget
  151.     {
  152.     protected:
  153.         ULONG               m_cRef;
  154.         PCCosmoDoc          m_pDoc;
  155.         LPDATAOBJECT        m_pIDataObject;     //From DragEnter
  156.     public:
  157.         CDropTarget(PCCosmoDoc);
  158.         ~CDropTarget(void);
  159.         //IDropTarget interface members
  160.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  161.         STDMETHODIMP_(ULONG) AddRef(void);
  162.         STDMETHODIMP_(ULONG) Release(void);
  163.         STDMETHODIMP DragEnter(LPDATAOBJECT, DWORD, POINTL, LPDWORD);
  164.         STDMETHODIMP DragOver(DWORD, POINTL, LPDWORD);
  165.         STDMETHODIMP DragLeave(void);
  166.         STDMETHODIMP Drop(LPDATAOBJECT, DWORD, POINTL, LPDWORD);
  167.     };
  168. typedef CDropTarget *PCDropTarget;
  169. class CDropSource : public IDropSource
  170.     {
  171.     protected:
  172.         ULONG               m_cRef;
  173.         PCCosmoDoc          m_pDoc;
  174.     public:
  175.         CDropSource(PCCosmoDoc);
  176.         ~CDropSource(void);
  177.         //IDropSource interface members
  178.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  179.         STDMETHODIMP_(ULONG) AddRef(void);
  180.         STDMETHODIMP_(ULONG) Release(void);
  181.         STDMETHODIMP QueryContinueDrag(BOOL, DWORD);
  182.         STDMETHODIMP GiveFeedback(DWORD);
  183.     };
  184. typedef CDropSource *PCDropSource;
  185. //CHAPTER18MOD
  186. //Include classes necessary to become an OLE Document server.
  187. #include "cosmole.h"
  188. //End CHAPTER18MOD
  189. #endif //_COSMO_H_