// File OGLView.h
class COpenGLView : public CView
{
COpenGLCtrl & m_OpenGLCtrl; // The 3D control
public:
// ClassWizard generated virtual function overrides
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
virtual BOOL
OnCmdMsg(UINT nID, int nCode, void* pExtra,
AFX_CMDHANDLERINFO* pHandlerInfo);
protected:
// Must pass COpenGLCtrl to constructor
COpenGLView(COpenGLCtrl & OpenGLCtrl);
// Message Map functions
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
//... Message map ...
};
// File OGLView.cpp
#include "stdafx.h"
#include "OGLView.h"
#include "OGLCtrl.h"
COpenGLView::COpenGLView(COpenGLCtrl & OpenGLCtrl)
:m_OpenGLCtrl(OpenGLCtrl) // Pass OpenGLCtrl to view
{
}
BOOL COpenGLView::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
return CView::PreCreateWindow(cs);
}
void COpenGLView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// Fill entire window with OpenGLCtrl
if (cx && cy && m_OpenGLCtrl.m_hWnd)
m_OpenGLCtrl.MoveWindow(0,0,cx,cy,TRUE);
}
BOOL
COpenGLView::OnCmdMsg(UINT nID, int nCode, void* pExtra,
AFX_CMDHANDLERINFO* pHandlerInfo)
{
// Let OpenGL control handle command messages first
if (m_OpenGLCtrl.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
return TRUE;
else
return CView::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
int COpenGLView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
CRect Rect;
GetClientRect(&Rect);
// Create the OpenGL control
if(!m_OpenGLCtrl.Create("MyOpenGL","",
WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
Rect,this,1,NULL))
{
TRACE0("Failed creating COpenGLCtrl window in COpenGLView\n");
return -1;
}
return 0;
}
//End of File