能刪除或者釋放。
----6.由于OpenGL作圖時需要長時間占用DC,所以把作圖窗口類設成CS_OWNDC。MFC缺省的窗口類風格中沒有設這一屬性,程序中在主窗口C++
類的PreCreateWindow方法中自己注冊了一個窗口類,除了設定了CS_OWNDC屬性以外,還設定了CS_HREDRAW、CS_VREDRAW和CS_SAVEBITS。設定
CS_HREDRAW、CS_VREDRAW是為了讓窗口縮放時產(chǎn)生WM_PAINT消息,修正OpenGL視口和作圖尺寸;由于OpenGL作圖需要很多計算,設定CS_SAVEBITS是
為了在OpenGL窗口被遮蓋后顯現(xiàn)出來時,不產(chǎn)生WM_PAINT消息,用內(nèi)存存儲的圖象來填充,從而用空間消耗換取計算時間。
----7.本程序中沒有對OpenGL函數(shù)的出錯情況作出處理。OpenGL出錯后返回錯誤碼,不會拋出異常;而且在某一個函數(shù)出錯以后,后繼函數(shù)也一般
不會出現(xiàn)異常,只是返回錯誤碼,一不小心就可能忽略某些錯誤。而對每一個OpenGL函數(shù)都做出錯與否的判斷比較麻煩,所以編程序時對OpenGL的
函數(shù)應當非常小心。
----參考書籍:
----《OpenGLProgrammer'sGuide》SGIinc.
----《OpenGL三維圖形程序設計》廖朵朵、張華軍著,星球地圖出版社
----《VisualC++5.0聯(lián)機幫助》
----附程序:
----程序運行時必須確定OpenGL32.dll、glu.dll、glaux.dll在Windows的System目錄下。如果找不到這些文件,可以從Windows95OSR2的機器上面
將這些文件拷貝過來即可。OpenGL運行不需要注冊庫信息。在VC的STUDIO中運行程序時,工程文件中必須加入OpenGL.H、glu.h、glaux.h以及
OpenGL.lib、glu.lib、glaux.lib,這些文件由VC自帶。
----主窗口類定義(OpenGLWnd.h):
s#if !defined(AFX_OPENGLWND_H__3FB1AB28_0E70
_11D2_9ACA_48543300E17D__INCLUDED_)
#define AFX_OPENGLWND_H__3FB1AB28_0E70_11D2
_9ACA_48543300E17D__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include < afxwin.h >
#include "SimpleGLApp.h"
#include "resource.h"
// OpenGLWnd.h : header file
//
///////////////////////////////////////
//////////////////////////////////////
// COpenGLWnd frame
class COpenGLWnd : public CFrameWnd
{
DECLARE_DYNCREATE(COpenGLWnd)
public:
COpenGLWnd();
// protected constructor used by dynamic creation
protected:
HGLRC m_hrc;
CClientDC *m_pDC;
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(COpenGLWnd)
protected:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~COpenGLWnd();
// Generated message map functions
//{{AFX_MSG(COpenGLWnd)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnDestroy();
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnPaint();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
///////////////////////////////////////
//////////////////////////////////////
----6.由于OpenGL作圖時需要長時間占用DC,所以把作圖窗口類設成CS_OWNDC。MFC缺省的窗口類風格中沒有設這一屬性,程序中在主窗口C++
類的PreCreateWindow方法中自己注冊了一個窗口類,除了設定了CS_OWNDC屬性以外,還設定了CS_HREDRAW、CS_VREDRAW和CS_SAVEBITS。設定
CS_HREDRAW、CS_VREDRAW是為了讓窗口縮放時產(chǎn)生WM_PAINT消息,修正OpenGL視口和作圖尺寸;由于OpenGL作圖需要很多計算,設定CS_SAVEBITS是
為了在OpenGL窗口被遮蓋后顯現(xiàn)出來時,不產(chǎn)生WM_PAINT消息,用內(nèi)存存儲的圖象來填充,從而用空間消耗換取計算時間。
----7.本程序中沒有對OpenGL函數(shù)的出錯情況作出處理。OpenGL出錯后返回錯誤碼,不會拋出異常;而且在某一個函數(shù)出錯以后,后繼函數(shù)也一般
不會出現(xiàn)異常,只是返回錯誤碼,一不小心就可能忽略某些錯誤。而對每一個OpenGL函數(shù)都做出錯與否的判斷比較麻煩,所以編程序時對OpenGL的
函數(shù)應當非常小心。
----參考書籍:
----《OpenGLProgrammer'sGuide》SGIinc.
----《OpenGL三維圖形程序設計》廖朵朵、張華軍著,星球地圖出版社
----《VisualC++5.0聯(lián)機幫助》
----附程序:
----程序運行時必須確定OpenGL32.dll、glu.dll、glaux.dll在Windows的System目錄下。如果找不到這些文件,可以從Windows95OSR2的機器上面
將這些文件拷貝過來即可。OpenGL運行不需要注冊庫信息。在VC的STUDIO中運行程序時,工程文件中必須加入OpenGL.H、glu.h、glaux.h以及
OpenGL.lib、glu.lib、glaux.lib,這些文件由VC自帶。
----主窗口類定義(OpenGLWnd.h):
s#if !defined(AFX_OPENGLWND_H__3FB1AB28_0E70
_11D2_9ACA_48543300E17D__INCLUDED_)
#define AFX_OPENGLWND_H__3FB1AB28_0E70_11D2
_9ACA_48543300E17D__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include < afxwin.h >
#include "SimpleGLApp.h"
#include "resource.h"
// OpenGLWnd.h : header file
//
///////////////////////////////////////
//////////////////////////////////////
// COpenGLWnd frame
class COpenGLWnd : public CFrameWnd
{
DECLARE_DYNCREATE(COpenGLWnd)
public:
COpenGLWnd();
// protected constructor used by dynamic creation
protected:
HGLRC m_hrc;
CClientDC *m_pDC;
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(COpenGLWnd)
protected:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~COpenGLWnd();
// Generated message map functions
//{{AFX_MSG(COpenGLWnd)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnDestroy();
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnPaint();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
///////////////////////////////////////
//////////////////////////////////////