www.pudn.com > OBJReadandRender.rar > MainFrm.cpp, change:2009-06-16,size:6970b


 
 
#include "stdafx.h" 
#include "mmsystem.h"		// for TIMEGETTIME 
#include "ToonTex.h" 
#include "MainFrm.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
/// Local Defines ///////////////////////////////////////////////////////////// 
#define OGLWIN_START_X	1			// STARTING X POSITION OF OPENGL WINDOW 
#define OGLWIN_START_Y	1			// STARTING Y POSITION OF OPENGL WINDOW 
#define OGLWIN_WIDTH	4			// WIDTH OF OPENGL WINDOW SUBTRACTED FROM MAX 
#define OGLWIN_BOTTOM	20			// BOTTOM BORDER OF OPENGL WINDOW 
/////////////////////////////////////////////////////////////////////////////// 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame 
 
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd) 
 
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) 
	//{{AFX_MSG_MAP(CMainFrame) 
	ON_WM_CREATE() 
	ON_WM_SIZE() 
	ON_WM_KEYUP() 
	ON_WM_KEYDOWN() 
	ON_WM_PAINT() 
	ON_COMMAND(ID_WHICHOGL, OnWhichogl) 
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen) 
	ON_COMMAND(ID_FILE_OPENOBJECTMESH, OnFileOpenObjectMesh) 
	ON_COMMAND(ID_CARTOON_ANTIALIAS, OnCartoonAntialias) 
	ON_UPDATE_COMMAND_UI(ID_CARTOON_ANTIALIAS, OnUpdateCartoonAntialias) 
	ON_COMMAND(ID_CARTOON_SETTINGS, OnCartoonSettings) 
	ON_COMMAND(ID_CARTOON_DRAWSILHOUETTE, OnCartoonDrawsilhouette) 
	ON_UPDATE_COMMAND_UI(ID_CARTOON_DRAWSILHOUETTE, OnUpdateCartoonDrawsilhouette) 
	ON_COMMAND(ID_CARTOON_USEMULTITEXTURE, OnCartoonUsemultitexture) 
	ON_UPDATE_COMMAND_UI(ID_CARTOON_USEMULTITEXTURE, OnUpdateCartoonUsemultitexture) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
static UINT indicators[] = 
{ 
	ID_SEPARATOR,           // status line indicator 
	ID_INDICATOR_CAPS, 
	ID_INDICATOR_NUM, 
	ID_INDICATOR_SCRL, 
}; 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame construction/destruction 
 
CMainFrame::CMainFrame() 
{ 
	m_Wireframe = TRUE; 
	m_HArrow = AfxGetApp()->LoadStandardCursor(IDC_ARROW);	 
 
} 
 
CMainFrame::~CMainFrame() 
{ 
} 
 
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
/// Local Variables /////////////////////////////////////////////////////////// 
	RECT rect; 
/////////////////////////////////////////////////////////////////////////////// 
	GetClientRect(&rect);  
 
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1) 
		return -1; 
	 
	if (!m_wndStatusBar.Create(this) || 
		!m_wndStatusBar.SetIndicators(indicators, 
		  sizeof(indicators)/sizeof(UINT))) 
	{ 
		TRACE0("Failed to create status bar\n"); 
		return -1;      // ´´½¨Ê§°Ü 
	} 
 
	m_OGLView.Create(NULL,"Render Window",WS_CHILD | WS_VISIBLE,  
		CRect(OGLWIN_START_X, OGLWIN_START_Y,rect.right - OGLWIN_WIDTH,rect.bottom - OGLWIN_BOTTOM),this,104); 
	m_OGLView.ShowWindow(TRUE); 
 
	m_OGLView.m_StatusBar = &m_wndStatusBar; 
 
	m_OGLView.Invalidate(TRUE); 
 
	return 0; 
} 
 
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	HICON hicon; 
	 
	hicon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 
 
	m_ClassName = AfxRegisterWndClass(NULL, 
		(HCURSOR)m_HArrow, (HBRUSH)::GetStockObject(DKGRAY_BRUSH), hicon); //m_HArrow 
	cs.lpszClass = m_ClassName; 
 
	return CFrameWnd::PreCreateWindow(cs); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame implementation 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame diagnostics 
 
#ifdef _DEBUG 
void CMainFrame::AssertValid() const 
{ 
	CFrameWnd::AssertValid(); 
} 
 
void CMainFrame::Dump(CDumpContext& dc) const 
{ 
	CFrameWnd::Dump(dc); 
} 
 
#endif 
	 
void CMainFrame::OnWhichogl() 
{ 
	m_OGLView.GetGLInfo(); 
} 
 
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)  
{ 
	 
	return CFrameWnd::OnCreateClient(lpcs, pContext); 
} 
 
 
void CMainFrame::OnPaint()  
{ 
	CPaintDC dc(this); // device context for painting 
	 
	m_OGLView.drawScene();	 
} 
 
void CMainFrame::OnSize(UINT nType, int cx, int cy)  
{ 
	// RESET THE m_OGLView WINDOW SIZE 
	m_OGLView.SetWindowPos( &wndTopMost, OGLWIN_START_X, OGLWIN_START_Y, cx - OGLWIN_WIDTH, cy - OGLWIN_BOTTOM, SWP_NOZORDER ); 
	// RESET THE ACTUAL OPENGL WINDOW SIZE 
	m_OGLView.resize(  cx - OGLWIN_WIDTH, cy - OGLWIN_BOTTOM); 
	CFrameWnd::OnSize(nType, cx, cy); 
} 
 
// HAVEN'T IMPLEMENTED ADDING A BONE 
#if 0 
void CMainFrame::OnAddBone()  
{ 
	m_HierWin.AddBone(); 
} 
#endif 
 
void CMainFrame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)  
{ 
	m_OGLView.HandleKeyDown(nChar); 
	CFrameWnd::OnKeyDown(nChar, nRepCnt, nFlags); 
} 
 
void CMainFrame::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)  
{ 
	CFrameWnd::OnKeyUp(nChar, nRepCnt, nFlags); 
	m_OGLView.HandleKeyUp(nChar); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// Hierarchy Manipulation Functions 
 
///////////////////////////////////////////////////////////////////////////// 
// View Manipulation Functions 
 
///////////////////////////////////////////////////////////////////////////// 
 
 
void CMainFrame::OnFileOpen()  
{ 
/// Local Variables /////////////////////////////////////////////////////////// 
	char BASED_CODE szFilter[] = "Shade Table (*.shd)|*.shd||";   
	CFileDialog	*dialog; 
	CString exten; 
/////////////////////////////////////////////////////////////////////////////// 
	dialog = new CFileDialog(TRUE,"shd",NULL, NULL,szFilter); 
	if (dialog->DoModal() == IDOK) 
	{ 
		exten = dialog->GetFileExt(); 
		exten.MakeUpper(); 
		m_OGLView.LoadShadeTexture((LPCSTR)dialog->GetPathName()); 
		m_OGLView.drawScene(); 
	} 
	delete dialog; 
	 
} 
 
void CMainFrame::OnFileOpenObjectMesh()  
{ 
/// Local Variables /////////////////////////////////////////////////////////// 
	char BASED_CODE szFilter[] = "Object Mesh OBJ (*.obj)|*.obj||";   
	CFileDialog	*dialog; 
	CString exten; 
/////////////////////////////////////////////////////////////////////////////// 
	dialog = new CFileDialog(TRUE,"dcm",NULL, NULL,szFilter); 
	if (dialog->DoModal() == IDOK) 
	{ 
		exten = dialog->GetFileExt(); 
		exten.MakeUpper(); 
		m_OGLView.LoadOBJModel(dialog->GetPathName()); 
		m_OGLView.drawScene(); 
	} 
	delete dialog; 
} 
 
void CMainFrame::OnCartoonAntialias()  
{ 
	m_OGLView.m_AntiAlias = !m_OGLView.m_AntiAlias; 
	m_OGLView.drawScene();	 
} 
 
void CMainFrame::OnUpdateCartoonAntialias(CCmdUI* pCmdUI)  
{ 
	pCmdUI->SetCheck( m_OGLView.m_AntiAlias ); 
} 
 
void CMainFrame::OnCartoonSettings()  
{ 
	m_OGLView.CartoonSettings(); 
} 
 
void CMainFrame::OnCartoonDrawsilhouette()  
{ 
	m_OGLView.m_Silhouette = !m_OGLView.m_Silhouette; 
	m_OGLView.drawScene();	 
} 
 
void CMainFrame::OnUpdateCartoonDrawsilhouette(CCmdUI* pCmdUI)  
{ 
	pCmdUI->SetCheck( m_OGLView.m_Silhouette ); 
} 
 
void CMainFrame::OnCartoonUsemultitexture()  
{ 
	m_OGLView.m_UseMultiTexture = !m_OGLView.m_UseMultiTexture; 
	m_OGLView.drawScene();	 
} 
 
void CMainFrame::OnUpdateCartoonUsemultitexture(CCmdUI* pCmdUI)  
{ 
	pCmdUI->SetCheck( m_OGLView.m_UseMultiTexture ); 
}