Code:
#define WIN32_LEAN_AND_MEAN
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "glaux.lib")
#pragma comment(linker, "/subsystem:windows")
#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glaux.h>
float angle = 0.0f;
HDC g_HDC;
BOOL fullScreen = FALSE;
static char szAppName[] = TEXT ("Hello ") ;
HINSTANCE hInstance;
void SetupPixelFormat(HDC hdc)
{
int npixelformat;
static PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW |
PFD_SUPPORT_OPENGL |
PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
32,
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);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
GLushort StipplePattern = 0xF000;
GLboolean b;
BOOL done;
HWND hwnd ;
MSG msg ;
WNDCLASSEX wndclass ;
//--------------------------------
DWORD dwExStyle;
DWORD dwStyle;
RECT windowRect;
// temp var's
int width = 800;
int height = 600;
int bits = 32;
fullScreen = TRUE;
windowRect.left=(long)0;
windowRect.right=(long)width;
windowRect.top=(long)0;
windowRect.bottom=(long)height;
//--------------------------------------------
wndclass.cbSize = sizeof(WNDCLASSEX);
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = NULL;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&wndclass);
//------------------------------------------------------------
if (fullScreen)
{
DEVMODE dmScreenSettings;
memset(&dmScreenSettings,0,sizeof(dmScreenSettings));
dmScreenSettings.dmSize = sizeof(dmScreenSettings);
dmScreenSettings.dmPelsWidth = width;
dmScreenSettings.dmPelsHeight = height;
dmScreenSettings.dmBitsPerPel = bits;
dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
if (ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
{
// setting display mode failed, switch to windowed
MessageBox(NULL, "Display mode failed", NULL, MB_OK);
fullScreen=FALSE;
}
}
if (fullScreen)
{
dwExStyle=WS_EX_APPWINDOW;
dwStyle=WS_POPUP;
ShowCursor(FALSE);
}
else
{
dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
dwStyle=WS_OVERLAPPEDWINDOW;
}
AdjustWindowRectEx(&windowRect, dwStyle, FALSE, dwExStyle); // Adjust Window To True Requested Size
//------------------------------------------------------------------------------------------------
hwnd = CreateWindowEx(dwExStyle, // extended style
szAppName, // class name
"hello sara", // app name
dwStyle | WS_CLIPCHILDREN |
WS_CLIPSIBLINGS,
0, 0,
windowRect.right - windowRect.left,
windowRect.bottom - windowRect.top,
NULL,
NULL,
hInstance,
NULL);
if(!hwnd)
return 0;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
SetFocus(hwnd);
done = FALSE;
while(!done)
{
PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE);
if(msg.message == WM_QUIT)
{
done = TRUE;
break;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
angle = angle + 0.7f;
if(angle >= 360.0f)
angle = 0.0f;
glTranslatef(0.0f, 0.0f, -5.0f);
glColor3f(1.0f, 0.0f, 1.0f);
glPolygonMode(GL_FRONT, GL_LINE);
glBegin(GL_TRIANGLES);
glEdgeFlag(GL_TRUE);
glVertex3f(0.0f, 1.0f, 0.0f);
glEdgeFlag(GL_FALSE);
glVertex3f(-1.0f, 0.0f, 0.0f);
glEdgeFlag(GL_TRUE);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(0.0f, -1.0f, 0.0f);
glEdgeFlag(GL_FALSE);
glVertex3f(1.0f, 0.0f, 0.0f);
glEdgeFlag(GL_TRUE);
glVertex3f(-1.0f, 0.0f, 0.0f);
glEnd();
SwapBuffers(g_HDC);
}
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HGLRC hRC;
static HDC hdc;
char hello[] = "HELLO SARA";
int width, height;
switch(message){
case WM_CREATE:
hdc = GetDC(hwnd);
g_HDC = hdc;
SetupPixelFormat(hdc);
hRC = wglCreateContext(hdc);
wglMakeCurrent(hdc ,hRC);
return 0;
break;
case WM_KEYDOWN:
if(wParam == VK_ESCAPE)
SendMessage(hwnd, WM_CLOSE, 0, 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(45.0f, (GLfloat)width / (GLfloat)height, 1.0f, 1000.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
return 0;
break;
case WM_DESTROY:
wglMakeCurrent(hdc, NULL);
wglDeleteContext(hRC);
if (fullScreen)
{
ChangeDisplaySettings(NULL,0);
ShowCursor(TRUE);
}
UnregisterClass(szAppName, hInstance);
PostQuitMessage(0);
break;
default:
break;
}
return (DefWindowProc(hwnd, message, wParam, lParam));
}