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

Windows编程

开发平台:

Visual C++

  1. // AtlGLWorldImpl.h : Declaration of the CAtlGLWorld
  2. //
  3. // This is a part of the Active Template Library.
  4. // Copyright (C) 1996-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Active Template Library Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Active Template Library product.
  12. #ifndef __ATLGLWORLD_H_
  13. #define __ATLGLWORLD_H_
  14. #include "resource.h"       // main symbols
  15. // STL Headers
  16. #include <new.h>
  17. #include <algorithm>
  18. #include <xmemory>
  19. #include <list>
  20. #include "TanType.h"
  21. #include "util.h"
  22. #include "CGL.h"
  23. #include "AtlGLWorld.h"
  24. ///////////////////////////////////////////////////////////
  25. //
  26. //  Structures
  27. //
  28. typedef struct tagTangramPoint3d
  29. {
  30. double x ;
  31. double y ;
  32. double z ;
  33. } TangramPoint3d ;
  34. /////////////////////////////////////////////////////////////////////////////
  35. // CAtlGLWorld
  36. class ATL_NO_VTABLE CAtlGLWorld :
  37. public CComObjectRootEx<CComSingleThreadModel>,
  38. public CComCoClass<CAtlGLWorld, &CLSID_AtlTangramGLWorld>,
  39. public IAtlTangramGLWorld
  40. {
  41. public:
  42. CAtlGLWorld()
  43. :   m_pCanvas(NULL),
  44. m_pCanvasUnknown(NULL),
  45. m_pGL(NULL),
  46. m_hdc(NULL),
  47. m_hMainWnd(NULL),
  48. m_bPicking(FALSE)
  49. {
  50. m_ptLowerLeft.x = m_ptLowerLeft.y = 0.0 ;
  51. m_ptUpperRight.x = m_ptUpperRight.y = 0.0;
  52. }
  53. ~CAtlGLWorld() ;
  54. void FinalRelease()
  55. {
  56. TCHAR buf[128];
  57. wsprintf(buf,_T("GLWorld: m_dwRef = %dn"), m_dwRef);
  58. ATLTRACE(buf);
  59. // Release the ICanvas interface on the aggregated object.
  60. if (m_pCanvas != NULL)
  61. {
  62. // Add a reference back to the outer object.
  63. GetControllingUnknown()->AddRef() ;
  64. // Remove the reference on the inner and outer objects.
  65. m_pCanvas->Release() ;
  66. m_pCanvas = NULL ;
  67. }
  68. wsprintf(buf,_T("GLWorld: m_dwRef = %dn"), m_dwRef);
  69. ATLTRACE(buf);
  70. // Release our hold on the inner object.
  71. if (m_pCanvasUnknown != NULL)
  72. {
  73. m_pCanvasUnknown->Release() ;
  74. m_pCanvasUnknown = NULL ;
  75. }
  76. wsprintf(buf,_T("GLWorld: m_dwRef = %dn"), m_dwRef);
  77. ATLTRACE(buf);
  78. }
  79. DECLARE_REGISTRY_RESOURCEID(IDR_ATLGLWORLD)
  80. BEGIN_COM_MAP(CAtlGLWorld)
  81. COM_INTERFACE_ENTRY(IAtlTangramGLWorld)
  82. COM_INTERFACE_ENTRY(IAtlTangramWorld)
  83. COM_INTERFACE_ENTRY_AGGREGATE(IID_IAtlTangramCanvas, m_pCanvasUnknown )
  84. END_COM_MAP()
  85. // Special Registration
  86. static void SpecialReg(BOOL bRegister) ;
  87. private:
  88. // Declare the delegating IUnknown.
  89. DECLARE_GET_CONTROLLING_UNKNOWN()
  90. // IAtlTangramWorld Members
  91. virtual HRESULT __stdcall Initialize(HWND hwnd, double logicalCX, double logicalCY) ;
  92. virtual HRESULT __stdcall DeviceToModel(POINT ptIN, TangramPoint2d* pptOut) ;
  93. virtual HRESULT __stdcall VisualFromPoint(  POINT pt,
  94. REFIID iid,
  95. IUnknown** ppIAtlTangramVisual) ;
  96. virtual HRESULT __stdcall CreateVisualForModel(IATLTangramModel* pModel) ;
  97. virtual HRESULT __stdcall SelectVisual(IAtlTangramVisual* pSelectedVisual, BOOL bSelect) ;
  98. virtual HRESULT __stdcall Animate() ;
  99. // ITangramGLWorld
  100. virtual HRESULT __stdcall ModelToDevice(TangramPoint2d ptIn, TangramPoint2d* pptOut);
  101. public:
  102. // OpenGL Support Functions
  103. BOOL GLResize(int cx, int cy) ;
  104. BOOL GLSetup() ;
  105. BOOL GLRender() ;
  106. private:
  107. // Member Variables
  108. #pragma warning(disable:4786)
  109. typedef std::list<IAtlTangramGLVisual*> CVisualList;
  110. CVisualList m_VisualList ;
  111. #pragma warning(default:4786)
  112. // World Members
  113. HDC m_hdc ;
  114. // Aggregated Canvas Component
  115. IAtlTangramCanvas* m_pCanvas ;
  116. IUnknown* m_pCanvasUnknown ;
  117. // Handle to the main window.
  118. HWND m_hMainWnd ;
  119. // OpenGL Support Code
  120. CGL* m_pGL ;
  121. // OpenGL Picking Support
  122. BOOL m_bPicking ;
  123. int Pick(POINT pt) ;
  124. // Coordinates of lowerleft and upper right of the window.
  125. TangramPoint3d m_ptLowerLeft ;
  126. TangramPoint3d m_ptUpperRight ;
  127. };
  128. #endif //__ATLGLWORLD_H_