各位专家:
     请问我下面的代码为什么会有问题,错在if(!RegisterClassEx(&windowClass))这一行,说是内存不能读,我是照某本教材抄的,在线等,谢谢!我是在vc的win32 application中调试的。
#define WIN32_LEAN_AND_MEAN
#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<gl/gl.h>
#include<gl/glaux.h>
#include<gl/glu.h>HDC gHDC;
void SetupPixelFormat(HDC hDC){
int nPixelFormat;
static PIXELFORMATDESCRIPTOR pfd={
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW|
PFD_SUPPORT_OPENGL|
PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
16,
0,0,0,0,0,0,
0,
0,
0,
0,0,0,0,
16,
0,
0,
PFD_MAIN_PLANE,
0,
0,0,0};
nPixelFormat=ChoosePixelFormat(hDC,&pfd);
SetPixelFormat(hDC,nPixelFormat,&pfd);
}LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
static HGLRC hRC;
static HDC hDC;
int width,height; switch(message)
{
case WM_CREATE:
hDC=GetDC(hwnd);
gHDC=hDC;
SetupPixelFormat(hDC);
hRC=wglCreateContext(hDC);
wglMakeCurrent(hDC,hRC);
return 0;
break;
case WM_CLOSE:
wglMakeCurrent(hDC,NULL);
wglDeleteContext(hRC);
PostQuitMessage(0);
return 0;
break;
case WM_SIZE:
height=HIWORD(lParam);
width=LOWORD(lParam);
if(height==0)
{
height=1;
}
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); gluPerspective(54.0f,(GLfloat)width/(GLfloat)height,1.0f,1000.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
return 0;
break;
default:
break;
}
return (DefWindowProc(hwnd,message,wParam,lParam));
}int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd){
WNDCLASSEX windowClass;
HWND hwnd;
MSG msg;
BOOL  done;
DWORD dwExStyle;
DWORD dwStyle; windowClass.cbSize=sizeof(WNDCLASSEX);
windowClass.style=CS_HREDRAW|CS_VREDRAW;
windowClass.lpfnWndProc=WndProc;
windowClass.cbClsExtra=0;
windowClass.cbWndExtra=0;
windowClass.hInstance=hInstance;
windowClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
windowClass.hCursor=LoadCursor(NULL,IDC_ARROW);
windowClass.hbrBackground=NULL;
windowClass.lpszClassName="MyClass";
windowClass.hIconSm=LoadIcon(NULL,IDI_WINLOGO); if(!RegisterClassEx(&windowClass))
return 0;
dwExStyle=WS_EX_APPWINDOW|WS_EX_WINDOWEDGE;
dwStyle=WS_OVERLAPPEDWINDOW;
hwnd=CreateWindowEx(NULL,
"MyClass",
"Windows下的OpenGL编程",
dwStyle|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,
0,0,
400,400,
NULL,
NULL,
hInstance,
NULL);
if(!hwnd)
return 0;
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hwnd);
done=FALSE; while(!done)
{
PeekMessage(&msg,hwnd,NULL,NULL,PM_REMOVE);
if(msg.message==WM_QUIT)
{
done=TRUE;
}
else
{
glClearColor(1.0f,1.0f,1.0f,0.0f);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(-0.7f,-0.5f,-1.0f);
glColor3f(0.0f,0.0f,0.0f);
glBegin(GL_TRIANGLES);
glVertex3f(0.2f,0.2f,-1.0f);
glVertex3f(0.8f,0.2f,-1.0f);
glVertex3f(0.2f,0.8f,-1.0f);
glEnd();
glFlush();
SwapBuffers(gHDC);
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}