3dFrame.cpp
上传用户:shxiangxiu
上传日期:2007-01-03
资源大小:1101k
文件大小:2k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // 3dFrame.cpp
  2. //
  3. // Copyright (c) Craig Fahrnbach 1997, 1998
  4. //
  5. // This program is freely distributable without licensing fees  and is
  6. // provided without guarantee or warrantee expressed or  implied. This
  7. // program is -not- in the public domain.
  8. //
  9. // This file should be included in your application's main
  10. // include file so that it is available to all modules that
  11. // need access the the OpenGL 3D classes
  12. //
  13. #include "stdafx.h"
  14. #include "3dPlus.h"
  15. #ifdef _DEBUG
  16. #define new DEBUG_NEW
  17. #undef THIS_FILE
  18. static char THIS_FILE[] = __FILE__;
  19. #endif
  20. //////////////////////////////////////////////////////////////////
  21. // C3dFrame
  22. IMPLEMENT_DYNAMIC(C3dFrame, CObject)
  23. /////////////////////////////////////////////////////////////////////////////
  24. // C3dFrame construction
  25. C3dFrame::C3dFrame()
  26. {
  27. // Assign Default values to member attributes
  28. m_hWnd = NULL;
  29. m_hDC  = NULL;
  30. m_hRC  = NULL;
  31. }
  32. /////////////////////////////////////////////////////////////////////////////
  33. // C3dFrame Destructor
  34. C3dFrame::~C3dFrame()
  35. {
  36. if(m_hRC)
  37. // Clean up rendering context stuff
  38. wglDeleteContext(m_hRC);
  39. }
  40. /////////////////////////////////////////////////////////////////////////////
  41. // C3dFrame Procedures
  42. BOOL C3dFrame::Create(DWORD dwFlags, CWnd* pParent)
  43. {
  44. // Ensure we have a valid window
  45. ASSERT(pParent);
  46. m_hWnd = pParent->m_hWnd;
  47. m_hDC  = ::GetDC(pParent->m_hWnd);
  48. // Set an appropriate pixel format supported by a device context
  49. // to a given pixel format specification.
  50. if(!the3dEngine.SetWindowPixelFormat(m_hDC, dwFlags))
  51. return FALSE;
  52. // Create the rendering context
  53. m_hRC = wglCreateContext(m_hDC);
  54. if (!m_hRC)
  55. return FALSE;
  56. return TRUE;
  57. }
  58. BOOL C3dFrame::Enable(BOOL bEnable)
  59. {
  60. if(bEnable)
  61. {
  62. // Make the rendering context current
  63. if(!wglMakeCurrent(m_hDC, m_hRC))
  64. {
  65. LPVOID lpMsgBuf;
  66.  
  67. FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
  68.   NULL,
  69.   GetLastError(),
  70.   MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
  71.   (LPTSTR) &lpMsgBuf,
  72.   0,
  73.   NULL);
  74. // Display the string.
  75. MessageBox( NULL, (LPTSTR)lpMsgBuf, "GetLastError", MB_OK|MB_ICONINFORMATION );
  76. // Free the buffer.
  77. LocalFree( lpMsgBuf );
  78. TRACE("C3dFrame::EnableFrame - wglMakeCurrent failedn");
  79. return FALSE;
  80. }
  81. }
  82. else
  83. // Release the rendering context to allow other
  84. // rendering contexts to co-exist
  85. wglMakeCurrent(NULL, NULL);
  86. return TRUE;
  87. }