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

Windows编程

开发平台:

Visual C++

  1. //+---------------------------------------------------------------------------
  2. //
  3. //  Microsoft Windows
  4. //  Copyright 1992 - 1997 Microsoft Corporation.
  5. //
  6. //  File:       mandel.h
  7. //
  8. //  Contents:   class definitions for the Mandelbrot Fractal engine
  9. //
  10. //  Classes:    CMandelbrotCF
  11. //              CMandelbrot
  12. //
  13. //  Functions:
  14. //
  15. //  History:    4-14-94   stevebl   Created
  16. //
  17. //----------------------------------------------------------------------------
  18. #ifndef __MANDEL_H__
  19. #define __MANDEL_H__
  20. #define PROPERTIES 100
  21. #define IDC_LOWREAL         1001
  22. #define IDC_LOWIMAGINARY    1002
  23. #define IDC_HIGHREAL        1003
  24. #define IDC_HIGHIMAGINARY   1004
  25. #define IDC_LIMIT           1005
  26. #define IDC_ABOUT           1006
  27. #define IDC_USEBOUNDINGBOXES 1007
  28. #define IDS_ABOUT_TITLE     1100
  29. #define IDS_ABOUT_TEXT      1101
  30. #ifdef __cplusplus
  31. #include <frcngn.h>
  32. #include <frhost.h>
  33. #include <qudcln.h>
  34. #include <qudngn.h>
  35. #include <cdialog.h>
  36. //+---------------------------------------------------------------------------
  37. //
  38. //  Class:      CMandelbrotCF
  39. //
  40. //  Purpose:    class factory for the Mandelbrot engine
  41. //
  42. //  Interface:  CMandelbrotCF  -- constructor
  43. //              ~CMandelbrotCF -- destrctor
  44. //              QueryInterface -- requests an interface
  45. //              AddRef         -- increments refcount
  46. //              Release        -- decrements refcount
  47. //              CreateInstance -- creates a Mandelbrot engine
  48. //              LockServer     -- keeps cf around if released
  49. //
  50. //  History:    4-14-94   stevebl   Created
  51. //
  52. //----------------------------------------------------------------------------
  53. class CMandelbrotCF : public IClassFactory
  54. {
  55. public:
  56.     CMandelbrotCF();
  57.     ~CMandelbrotCF();
  58.     HRESULT STDMETHODCALLTYPE QueryInterface(REFIID, LPVOID *);
  59.     ULONG STDMETHODCALLTYPE AddRef(void);
  60.     ULONG STDMETHODCALLTYPE Release(void);
  61.     HRESULT STDMETHODCALLTYPE CreateInstance(LPUNKNOWN, REFIID, LPVOID*);
  62.     HRESULT STDMETHODCALLTYPE LockServer(BOOL);
  63. protected:
  64.     ULONG _cRef;
  65. };
  66. //+---------------------------------------------------------------------------
  67. //
  68. //  Class:      CMandelbrot
  69. //
  70. //  Purpose:    implements the Mandlebrot engine
  71. //
  72. //  Interface:  QueryInterface     -- retrieves an interface
  73. //              AddRef             -- increments refcount
  74. //              Release            -- decrements refcount
  75. //              GetClassID         -- gets the CLSID
  76. //              IsDirty            -- tests if data should be saved
  77. //              Load               -- loads properties
  78. //              Save               -- saves properties
  79. //              GetSizeMax         -- returns max size of property stream
  80. //              Init               -- initializes engine
  81. //              SetDefaults        -- sets default property values
  82. //              SetProperties      -- displays the property dialog box
  83. //              GetExtent          -- gets size of the graph (in graph units)
  84. //              SetExtent          -- sets size of the graph (in graph units)
  85. //              SetGraphSize       -- sets size of the graph (in pixels)
  86. //              Start              -- starts the graph engine
  87. //              Stop               -- stops the graph engine
  88. //              ComputePoint       -- returns the graph color at a given point
  89. //              DoneDrawingGraph   -- called when the graph engine is finished
  90. //              DialogProc         -- dialog proc for the property dialog box
  91. //              Initialize         -- private initialization function
  92. //              CMandelbrot        -- constructor
  93. //              ~CMandelbrot       -- destructor
  94. //
  95. //  History:    4-14-94   stevebl   Created
  96. //              7-07-94   stevebl   changed definition of ComputePoint
  97. //
  98. //----------------------------------------------------------------------------
  99. class CMandelbrot : public IFractalEngine, IPersistStream, IQuadrantClient, CHlprDialog
  100. {
  101. public:
  102.     // IUnknown methods
  103.     HRESULT STDMETHODCALLTYPE QueryInterface(REFIID, LPVOID *);
  104.     ULONG STDMETHODCALLTYPE AddRef(void);
  105.     ULONG STDMETHODCALLTYPE Release(void);
  106.     // IPersist methods
  107.     HRESULT STDMETHODCALLTYPE GetClassID(LPCLSID pclsid);
  108.     // IPersistStream methods
  109.     HRESULT STDMETHODCALLTYPE IsDirty(void);
  110.     HRESULT STDMETHODCALLTYPE Load(LPSTREAM pStm);
  111.     HRESULT STDMETHODCALLTYPE Save(LPSTREAM pStm, BOOL fClearDirty);
  112.     HRESULT STDMETHODCALLTYPE GetSizeMax(ULARGE_INTEGER * pcbSize);
  113.     // IFractalEngine methods
  114.     HRESULT STDMETHODCALLTYPE Init(IFractalHost *pfh);
  115.     HRESULT STDMETHODCALLTYPE SetDefaults(void);
  116.     HRESULT STDMETHODCALLTYPE SetProperties(HWND hwnd);
  117.     HRESULT STDMETHODCALLTYPE GetExtent(
  118.         double *pdLeft,
  119.         double *pdTop,
  120.         double *pdRight,
  121.         double *pdBottom);
  122.     HRESULT STDMETHODCALLTYPE SetExtent(
  123.         double dLeft,
  124.         double dTop,
  125.         double dRight,
  126.         double dBottom);
  127.     HRESULT STDMETHODCALLTYPE SetGraphSize(
  128.         unsigned int uWidth,
  129.         unsigned int uHeight);
  130.     HRESULT STDMETHODCALLTYPE Start(void);
  131.     HRESULT STDMETHODCALLTYPE Stop(void);
  132.     // IQuadrantClient methods
  133.     HRESULT STDMETHODCALLTYPE ComputePoint(
  134.         unsigned * puColor,
  135.         int x,
  136.         int y);
  137.     HRESULT STDMETHODCALLTYPE DoneDrawingGraph(void);
  138.     // Methods from CHlprDialog
  139.     BOOL DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
  140.     // Methods that aren't part of any interface
  141.     BOOL Initialize(void);
  142.     CMandelbrot();
  143.     ~CMandelbrot();
  144. private:
  145.     ULONG _cRef;
  146.     double _dLeft, _dTop, _dRight, _dBottom;
  147.     unsigned _uWidth, _uHeight;
  148.     BOOL _fRunning;
  149.     IFractalHost * _pfh;
  150.     IQuadrantEngine * _pqe;
  151.     unsigned _uLimit;
  152.     BOOL _fDirty;
  153.     BOOL _fUseBoundingBoxes;
  154. };
  155. extern HINSTANCE ghinst;
  156. extern ULONG gcRef, gcLock;
  157. #endif //__cplusplus
  158. #endif //__MANDEL_H__