Earlier I wrote programms on Delphi with OpenGL, but now I want to start write on C++. I now C++ rather well. But with OpenGL I didn’t work. And today I want to write my first C++ and OpenGL programm. But it is not work:(
Help me please. Beforehand thanks you.
This is code
// win.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include <windows.h>
#include <GL\GL.h>
HWND Handle;
HDC dc;
HGLRC hlr;
void Init_start_resize(int width, int height){
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1,1,-1,1,3,10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void DoExit(void){
PostQuitMessage(0);
}
void SetDCPixelFormar(HDC hd){
PIXELFORMATDESCRIPTOR pfd;
int nPixelFormat;
pfd.nSize=sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion=1;
pfd.dwFlags=PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER;
pfd.iPixelType=PFD_TYPE_RGBA;
pfd.cColorBits=32;
pfd.cRedBits=8;
pfd.cRedShift=16;
pfd.cGreenBits=8;
pfd.cGreenShift=16;
pfd.cBlueBits=8;
pfd.cBlueShift=0;
pfd.cAlphaBits=0;
pfd.cAlphaShift=0;
pfd.cAccumBits=64;
pfd.cAccumRedBits=16;
pfd.cAccumGreenBits=16;
pfd.cAccumBlueBits=16;
pfd.cAccumAlphaBits=0;
pfd.cDepthBits=32;
pfd.cStencilBits=8;
pfd.cAuxBuffers=0;
pfd.iLayerType=PFD_MAIN_PLANE;
pfd.bReserved=0;
pfd.dwLayerMask=0;
pfd.dwVisibleMask=0;
pfd.dwDamageMask=0;
nPixelFormat=ChoosePixelFormat(hd,&pfd);
SetPixelFormat(hd,nPixelFormat,&pfd);
}
LRESULT CALLBACK WindowProc(HWND hwn, UINT msg, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT MyPaint;
switch(msg){
case WM_CREATE:
dc=GetDC(hwn);
SetDCPixelFormar(dc);
hlr=wglCreateContext(dc);
glEnable(GL_DEPTH_TEST);
ReleaseDC(hwn,dc);
break;
case WM_DESTROY:
wglDeleteContext(hlr);
DeleteDC(dc);
DoExit();
break;
case WM_PAINT:
dc=BeginPaint(hwn,&MyPaint);
wglMakeCurrent(dc,hlr);
glClearColor(1.0,1.0,1.0,1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslated(0.0,0.0,-5.0);
glEnable(GL_POINT_SMOOTH);
glPointSize(15);
glColor3d(0.7,0.0,0.0);
glBegin(GL_POINTS);
glVertex3d(0.0,0.0,0.0);
glEnd();
glPopMatrix();
SwapBuffers(dc);
EndPaint(hwn,&MyPaint);
wglMakeCurrent(NULL,NULL);
ReleaseDC(hwn,dc);
break;
case WM_KEYDOWN:
if(wParam==VK_ESCAPE){
DoExit();
}
break;
case WM_SIZE:
Init_start_resize(LOWORD(lParam),HIWORD(lParam));
break;
default:
return DefWindowProc(hwn,msg,wParam,lParam);
}
return 0;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WNDCLASS WindowClass;
MSG msg;
WindowClass.style=CS_HREDRAW | CS_VREDRAW;
WindowClass.hInstance=hInstance;
WindowClass.lpszClassName="main";
WindowClass.lpfnWndProc=WindowProc;
WindowClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WindowClass.hIcon=NULL;
WindowClass.cbClsExtra = 0;
WindowClass.cbWndExtra = 0;
WindowClass.lpszMenuName = NULL;
WindowClass.hbrBackground = (HBRUSH)GetStockObject(NULL_BRUSH);
RegisterClass(&WindowClass);
Handle=CreateWindowEx(WS_EX_TOPMOST,"main","",WS_POPUP | WS_VISIBLE | WS_MAXIMIZE,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
ShowWindow(Handle,SW_SHOW);
UpdateWindow(Handle);
while(GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}