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

Windows编程

开发平台:

Visual C++

  1. //+---------------------------------------------------------------------------
  2. //
  3. //  Microsoft Windows
  4. //  Copyright 1992 - 1997 Microsoft Corporation.
  5. //
  6. //  File:       plasma.h
  7. //
  8. //  Contents:   class definitions for the Plasma Fractal engine
  9. //
  10. //  Classes:    CPlasmaCF
  11. //              CPlasma
  12. //
  13. //  Functions:
  14. //
  15. //  History:    4-23-94   stevebl   Created
  16. //
  17. //----------------------------------------------------------------------------
  18. #ifndef __PLASMA_H__
  19. #define __PLASMA_H__
  20. #define PROPERTIES 100
  21. #define IDM_RANDOMNESS      1000
  22. #define IDM_ABOUT           1006
  23. #define IDS_ABOUT_TITLE     1100
  24. #define IDS_ABOUT_TEXT      1101
  25. #ifdef __cplusplus
  26. #include <frcngn.h>
  27. #include <frhost.h>
  28. #include <cdialog.h>
  29. //+---------------------------------------------------------------------------
  30. //
  31. //  Class:      CPlasmaCF
  32. //
  33. //  Purpose:    class factory for the Plasma engine
  34. //
  35. //  Interface:  CPlasmaCF      -- constructor
  36. //              ~CPlasmaCF     -- destructor
  37. //              QueryInterface -- requests an interface
  38. //              AddRef         -- increments refcount
  39. //              Release        -- decrements refcount
  40. //              CreateInstance -- creates a Mandelbrot engine
  41. //              LockServer     -- keeps cf around if released
  42. //
  43. //  History:    4-23-94   stevebl   Created
  44. //
  45. //----------------------------------------------------------------------------
  46. class CPlasmaCF : public IClassFactory
  47. {
  48. public:
  49.     CPlasmaCF();
  50.     ~CPlasmaCF();
  51.     HRESULT STDMETHODCALLTYPE QueryInterface(REFIID, LPVOID *);
  52.     ULONG STDMETHODCALLTYPE AddRef(void);
  53.     ULONG STDMETHODCALLTYPE Release(void);
  54.     HRESULT STDMETHODCALLTYPE CreateInstance(LPUNKNOWN, REFIID, LPVOID*);
  55.     HRESULT STDMETHODCALLTYPE LockServer(BOOL);
  56. protected:
  57.     ULONG _cRef;
  58. };
  59. //+---------------------------------------------------------------------------
  60. //
  61. //  Class:      CPlasma
  62. //
  63. //  Purpose:    implements the plasma engine
  64. //
  65. //  Interface:  QueryInterface     -- retrieves an interface
  66. //              AddRef             -- increments refcount
  67. //              Release            -- decrements refcount
  68. //              GetClassID         -- gets the CLSID
  69. //              IsDirty            -- tests if data should be saved
  70. //              Load               -- loads properties
  71. //              Save               -- saves properties
  72. //              GetSizeMax         -- returns max size of property stream
  73. //              Init               -- initializes engine
  74. //              SetDefaults        -- sets default property values
  75. //              SetProperties      -- displays the property dialog box
  76. //              GetExtent          -- gets size of the graph (in graph units)
  77. //              SetExtent          -- sets size of the graph (in graph units)
  78. //              SetGraphSize       -- sets size of the graph (in pixels)
  79. //              Start              -- starts the graph engine
  80. //              Stop               -- stops the graph engine
  81. //              DialogProc         -- dialog proc for the property dialog box
  82. //              Initialize         -- private initialization function
  83. //              GraphicsThread     -- graphics thread entry point
  84. //              Subdivide          -- graph routine for each quadrant
  85. //              CPlasma            -- constructor
  86. //              ~CPlasma           -- destructor
  87. //
  88. //  History:    4-23-94   stevebl   Created
  89. //
  90. //----------------------------------------------------------------------------
  91. class CPlasma : public IFractalEngine, IPersistStream, CHlprDialog
  92. {
  93. public:
  94.     // IUnknown methods
  95.     HRESULT STDMETHODCALLTYPE QueryInterface(REFIID, LPVOID *);
  96.     ULONG STDMETHODCALLTYPE AddRef(void);
  97.     ULONG STDMETHODCALLTYPE Release(void);
  98.     // IPersist methods
  99.     HRESULT STDMETHODCALLTYPE GetClassID(LPCLSID pclsid);
  100.     // IPersistStream methods
  101.     HRESULT STDMETHODCALLTYPE IsDirty(void);
  102.     HRESULT STDMETHODCALLTYPE Load(LPSTREAM pStm);
  103.     HRESULT STDMETHODCALLTYPE Save(LPSTREAM pStm, BOOL fClearDirty);
  104.     HRESULT STDMETHODCALLTYPE GetSizeMax(ULARGE_INTEGER * pcbSize);
  105.     // IFractalEngine methods
  106.     HRESULT STDMETHODCALLTYPE Init(IFractalHost *pfh);
  107.     HRESULT STDMETHODCALLTYPE SetDefaults(void);
  108.     HRESULT STDMETHODCALLTYPE SetProperties(HWND hwnd);
  109.     HRESULT STDMETHODCALLTYPE GetExtent(
  110.         double *pdLeft,
  111.         double *pdTop,
  112.         double *pdRight,
  113.         double *pdBottom);
  114.     HRESULT STDMETHODCALLTYPE SetExtent(
  115.         double dLeft,
  116.         double dTop,
  117.         double dRight,
  118.         double dBottom);
  119.     HRESULT STDMETHODCALLTYPE SetGraphSize(
  120.         unsigned int uWidth,
  121.         unsigned int uHeight);
  122.     HRESULT STDMETHODCALLTYPE Start(void);
  123.     HRESULT STDMETHODCALLTYPE Stop(void);
  124.     // Methods from CHlprDialog
  125.     BOOL DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
  126.     // Methods that aren't part of any interface
  127.     BOOL Initialize(void);
  128.     DWORD CPlasma::GraphicsThread(void);
  129.     void Subdivide(int xl, int yl, int xh, int yh);
  130.     CPlasma();
  131.     ~CPlasma();
  132. private:
  133.     ULONG _cRef;
  134.     HANDLE _hRestart, _hRunning, _hEngine;
  135.     DWORD _dwThreadId;
  136.     double _dRandomnessFactor;
  137.     unsigned _uWidth, _uHeight;
  138.     IFractalHost * _pfh;
  139.     BOOL _fDirty;
  140. };
  141. extern HINSTANCE ghinst;
  142. extern ULONG gcRef, gcLock;
  143. #endif //__cplusplus
  144. #endif //__PLASMA_H__