#define WIN32_LEAN_AND_MEAN
#define WIN32_EXTRA_LEAN
#include "stdafx.h"
#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include "CGfxOpenGL.h"
bool exiting = false;
long windowWidth = 800;
long windowHeight = 600;
long windowBits = 32;
bool fullscreen = false;
HDC hDC;
CGfxOpenGL *g_glRender = NULL;
void SetupPixelFormat(HDC hDC)
{
int pixelFormat;
PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR), // size
1, // version
PFD_SUPPORT_OPENGL | // OpenGL window
PFD_DRAW_TO_WINDOW | // render to window
PFD_DOUBLEBUFFER, // support double-buffering
PFD_TYPE_RGBA, // color type
32, // prefered color depth
0, 0, 0, 0, 0, 0, // color bits (ignored)
0, // no alpha buffer
0, // alpha bits (ignored)
0, // no accumulation buffer
0, 0, 0, 0, // accum bits (ignored)
16, // depth buffer
0, // no stencil buffer
0, // no auxiliary buffers
PFD_MAIN_PLANE, // main layer
0, // reserved
0, 0, 0, // no layer, visible, damage masks
};
pixelFormat = ChoosePixelFormat(hDC, &pfd);
SetPixelFormat(hDC, pixelFormat, &pfd);
}
LRESULT CALLBACK MainWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static HDC hDC;
static HGLRC hRC;
int height, width;
// dispatch messages
switch (uMsg)
{
case WM_CREATE: // window creation
hDC = GetDC(hWnd);
SetupPixelFormat(hDC);
//SetupPalette();
hRC = wglCreateContext(hDC);
wglMakeCurrent(hDC, hRC);
break;
case WM_DESTROY: // window destroy
case WM_QUIT:
case WM_CLOSE: // windows is closing
// deselect rendering context and delete it
wglMakeCurrent(hDC, NULL);
wglDeleteContext(hRC);
// send WM_QUIT to message queue
PostQuitMessage(0);
break;
case WM_SIZE:
height = HIWORD(lParam); // retrieve width and height
width = LOWORD(lParam);
g_glRender->SetupProjection(width, height);
break;
case WM_ACTIVATEAPP: // activate app
break;
case WM_PAINT: // paint
PAINTSTRUCT ps;
BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
break;
case WM_LBUTTONDOWN: // left mouse button
break;
case WM_RBUTTONDOWN: // right mouse button
break;
case WM_MOUSEMOVE: // mouse movement
break;
case WM_LBUTTONUP: // left button release
break;
case WM_RBUTTONUP: // right button release
break;
case WM_KEYUP:
break;
case WM_KEYDOWN:
int fwKeys;
LPARAM keyData;
fwKeys = (int)wParam; // virtual-key code
keyData = lParam; // key data
switch(fwKeys)
{
case VK_ESCAPE:
PostQuitMessage(0);
break;
default:
break;
}
break;
default:
break;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
WNDCLASSEX windowClass; // window class
HWND hwnd; // window handle
MSG msg; // message
DWORD dwExstyle; // Window Extended style
DWORD dwstyle; // Window style
RECT windowRect;
g_glRender = new CGfxOpenGL;
windowRect.left=(long)0; // Set Left Value To 0
windowRect.right=(long)windowWidth; // Set Right Value To Requested Width
windowRect.top=(long)0; // Set Top Value To 0
windowRect.bottom=(long)windowHeight; // Set Bottom Value To Requested Height
// fill out the window class structure
windowClass.cbSize = sizeof(WNDCLASSEX);
windowClass.style = CS_HREDRAW | CS_VREDRAW;
windowClass.lpfnWndProc = MainWindowProc;
windowClass.cbClsExtra = 0;
windowClass.cbWndExtra = 0;
windowClass.hInstance = hInstance;
windowClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); // default icon
windowClass.hCursor = LoadCursor(NULL, IDC_ARROW); // default arrow
windowClass.hbrBackground = NULL; // don't need background
windowClass.lpszMenuName = NULL; // no menu
windowClass.lpszClassName = "GLClass";
windowClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO); // windows logo small icon
// register the windows class
if (!RegisterClassEx(&windowClass))
return 0;
if (fullscreen) // fullscreen?
{
DEVMODE dmScreenSettings; // device mode
memset(&dmScreenSettings,0,sizeof(dmScreenSettings));
dmScreenSettings.dmSize = sizeof(dmScreenSettings);
dmScreenSettings.dmPelsWidth = windowWidth; // screen width
dmScreenSettings.dmPelsHeight = windowHeight; // screen height
dmScreenSettings.dmBitsPerPel = windowBits; // bits per pixel
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) // Are We Still In Fullscreen Mode?
{
dwExstyle=WS_EX_APPWINDOW; // Window Extended style
dwstyle=WS_POPUP; // Windows style
ShowCursor(FALSE); // Hide Mouse Pointer
}
else
{
dwExstyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; // Window Extended style
dwstyle=WS_OVERLAPPEDWINDOW; // Windows style
}
AdjustWindowRectEx(&windowRect, dwstyle, FALSE, dwExstyle); // Adjust Window To True Requested Size
// class registered, so now create our window
hwnd = CreateWindowEx(NULL, // extended style
"GLClass", // class name
"BOGLGP - Chapter 2 - OpenGL Application", // app name
dwstyle | WS_CLIPCHILDREN |
WS_CLIPSIBLINGS,
0, 0, // x,y coordinate
windowRect.right - windowRect.left,
windowRect.bottom - windowRect.top, // width, height
NULL, // handle to parent
NULL, // handle to menu
hInstance, // application instance
NULL); // no extra params
hDC = GetDC(hwnd);
// check if window creation failed (hwnd would equal NULL)
if (!hwnd)
return 0;
ShowWindow(hwnd, SW_SHOW); // display the window
UpdateWindow(hwnd); // update the window
g_glRender->Init();
while (!exiting)
{
g_glRender->Prepare(0.0f);
g_glRender->Render();
SwapBuffers(hDC);
while (PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE))
{
if (!GetMessage (&msg, NULL, 0, 0))
{
exiting = true;
break;
}
TranslateMessage (&msg);
DispatchMessage (&msg);
}
}
delete g_glRender;
if (fullscreen)
{
ChangeDisplaySettings(NULL,0); // If So Switch Back To The Desktop
ShowCursor(TRUE); // Show Mouse Pointer
}
return (int)msg.wParam;
}
Getting started with OpenGL in C++
So, I recently decided to open up Beginning OpenGL Game Programming yesterday in order to learn OpenGL. After reading the first few dozen pages, I tried to compile the first sample program from the book using Visual C++ 2005. However, I got a few compile errors. I have everything linked correctly, and since I copied-and-pasted the code, there shouldn't be any errors in the code.
------ Build started: Project: test2, Configuration: Debug Win32 ------
Compiling...
test2.cpp
c:\documents and settings\jennifer\my documents\visual studio 2005\projects\test2\test2\test2.cpp(166) : error C2440: '=' : cannot convert from 'const char [8]' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
c:\documents and settings\jennifer\my documents\visual studio 2005\projects\test2\test2\test2.cpp(187) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [20]' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
c:\documents and settings\jennifer\my documents\visual studio 2005\projects\test2\test2\test2.cpp(218) : error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'const char [8]' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Build log was saved at "file://c:\Documents and Settings\Jennifer\My Documents\Visual Studio 2005\Projects\test2\test2\Debug\BuildLog.htm"
test2 - 3 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Help is appreciated.
[Edited by - Mr Pastry on October 19, 2006 1:43:07 PM]
Project -> Properties... -> Character Set : change to "Use Multi-Byte Character Set"
Compile again...
[and please use source tags]
Compile again...
[and please use source tags]
Quote:Original post by Kambiz
Project -> Properties... -> Character Set : change to "Use Multi-Byte Character Set"
Compile again...
[and please use source tags]
I don't see "Character Set" anywhere.
Alternatively you can add a L before your string :
MessageBox(NULL, L"Display mode failed", NULL, MB_OK);
------ Build started: Project: test3, Configuration: Debug Win32 ------
Compiling...
test3.cpp
Compiling manifest to resources...
Linking...
test3.obj : error LNK2019: unresolved external symbol __imp__SetPixelFormat@12 referenced in function "void __cdecl SetupPixelFormat(struct HDC__ *)" (?SetupPixelFormat@@YAXPAUHDC__@@@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__ChoosePixelFormat@8 referenced in function "void __cdecl SetupPixelFormat(struct HDC__ *)" (?SetupPixelFormat@@YAXPAUHDC__@@@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__DefWindowProcA@16 referenced in function "long __stdcall MainWindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWindowProc@@YGJPAUHWND__@@IIJ@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__EndPaint@8 referenced in function "long __stdcall MainWindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWindowProc@@YGJPAUHWND__@@IIJ@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__BeginPaint@8 referenced in function "long __stdcall MainWindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWindowProc@@YGJPAUHWND__@@IIJ@Z)
test3.obj : error LNK2019: unresolved external symbol "public: void __thiscall CGfxOpenGL::SetupProjection(int,int)" (?SetupProjection@CGfxOpenGL@@QAEXHH@Z) referenced in function "long __stdcall MainWindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWindowProc@@YGJPAUHWND__@@IIJ@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__PostQuitMessage@4 referenced in function "long __stdcall MainWindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWindowProc@@YGJPAUHWND__@@IIJ@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__wglDeleteContext@4 referenced in function "long __stdcall MainWindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWindowProc@@YGJPAUHWND__@@IIJ@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__wglMakeCurrent@8 referenced in function "long __stdcall MainWindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWindowProc@@YGJPAUHWND__@@IIJ@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__wglCreateContext@4 referenced in function "long __stdcall MainWindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWindowProc@@YGJPAUHWND__@@IIJ@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__GetDC@4 referenced in function "long __stdcall MainWindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWindowProc@@YGJPAUHWND__@@IIJ@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__DispatchMessageA@4 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__TranslateMessage@4 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__GetMessageA@16 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__PeekMessageA@20 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__SwapBuffers@4 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol "public: void __thiscall CGfxOpenGL::Render(void)" (?Render@CGfxOpenGL@@QAEXXZ) referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol "public: void __thiscall CGfxOpenGL::Prepare(float)" (?Prepare@CGfxOpenGL@@QAEXM@Z) referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol "public: bool __thiscall CGfxOpenGL::Init(void)" (?Init@CGfxOpenGL@@QAE_NXZ) referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__UpdateWindow@4 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__ShowWindow@8 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__CreateWindowExA@48 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__AdjustWindowRectEx@16 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__ShowCursor@4 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__MessageBoxA@16 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__ChangeDisplaySettingsA@8 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__RegisterClassExA@4 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__LoadCursorA@8 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__LoadIconA@8 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol "public: __thiscall CGfxOpenGL::CGfxOpenGL(void)" (??0CGfxOpenGL@@QAE@XZ) referenced in function _WinMain@16
MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
C:\Documents and Settings\Jennifer\My Documents\Visual Studio 2005\Projects\test3\Debug\test3.exe : fatal error LNK1120: 31 unresolved externals
Build log was saved at "file://c:\Documents and Settings\Jennifer\My Documents\Visual Studio 2005\Projects\test3\test3\Debug\BuildLog.htm"
test3 - 32 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Compiling...
test3.cpp
Compiling manifest to resources...
Linking...
test3.obj : error LNK2019: unresolved external symbol __imp__SetPixelFormat@12 referenced in function "void __cdecl SetupPixelFormat(struct HDC__ *)" (?SetupPixelFormat@@YAXPAUHDC__@@@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__ChoosePixelFormat@8 referenced in function "void __cdecl SetupPixelFormat(struct HDC__ *)" (?SetupPixelFormat@@YAXPAUHDC__@@@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__DefWindowProcA@16 referenced in function "long __stdcall MainWindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWindowProc@@YGJPAUHWND__@@IIJ@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__EndPaint@8 referenced in function "long __stdcall MainWindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWindowProc@@YGJPAUHWND__@@IIJ@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__BeginPaint@8 referenced in function "long __stdcall MainWindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWindowProc@@YGJPAUHWND__@@IIJ@Z)
test3.obj : error LNK2019: unresolved external symbol "public: void __thiscall CGfxOpenGL::SetupProjection(int,int)" (?SetupProjection@CGfxOpenGL@@QAEXHH@Z) referenced in function "long __stdcall MainWindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWindowProc@@YGJPAUHWND__@@IIJ@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__PostQuitMessage@4 referenced in function "long __stdcall MainWindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWindowProc@@YGJPAUHWND__@@IIJ@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__wglDeleteContext@4 referenced in function "long __stdcall MainWindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWindowProc@@YGJPAUHWND__@@IIJ@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__wglMakeCurrent@8 referenced in function "long __stdcall MainWindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWindowProc@@YGJPAUHWND__@@IIJ@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__wglCreateContext@4 referenced in function "long __stdcall MainWindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWindowProc@@YGJPAUHWND__@@IIJ@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__GetDC@4 referenced in function "long __stdcall MainWindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWindowProc@@YGJPAUHWND__@@IIJ@Z)
test3.obj : error LNK2019: unresolved external symbol __imp__DispatchMessageA@4 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__TranslateMessage@4 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__GetMessageA@16 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__PeekMessageA@20 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__SwapBuffers@4 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol "public: void __thiscall CGfxOpenGL::Render(void)" (?Render@CGfxOpenGL@@QAEXXZ) referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol "public: void __thiscall CGfxOpenGL::Prepare(float)" (?Prepare@CGfxOpenGL@@QAEXM@Z) referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol "public: bool __thiscall CGfxOpenGL::Init(void)" (?Init@CGfxOpenGL@@QAE_NXZ) referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__UpdateWindow@4 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__ShowWindow@8 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__CreateWindowExA@48 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__AdjustWindowRectEx@16 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__ShowCursor@4 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__MessageBoxA@16 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__ChangeDisplaySettingsA@8 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__RegisterClassExA@4 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__LoadCursorA@8 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol __imp__LoadIconA@8 referenced in function _WinMain@16
test3.obj : error LNK2019: unresolved external symbol "public: __thiscall CGfxOpenGL::CGfxOpenGL(void)" (??0CGfxOpenGL@@QAE@XZ) referenced in function _WinMain@16
MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
C:\Documents and Settings\Jennifer\My Documents\Visual Studio 2005\Projects\test3\Debug\test3.exe : fatal error LNK1120: 31 unresolved externals
Build log was saved at "file://c:\Documents and Settings\Jennifer\My Documents\Visual Studio 2005\Projects\test3\test3\Debug\BuildLog.htm"
test3 - 32 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
If you're having trouble linking, then it's because you haven't included your libraries. You can do this under your project options, or with a pragma directive. Are you familiar with those?
First of all I think your project is not a Win32 Application project because of linking errors like this:
unresolved external symbol __imp__CreateWindowExA@48 referenced in function _WinMain@16
To fix this you have to link to the User32.lib library but in a Win32 project this is done automatically so create a new project : File -> New -> Project... -> VC++ -> Win32 -> Win32 Project , Click next in the Wizard Then choose “Windows application”, check Empty project and click on Finish. After that copy your files to the project directory and add them to your project.
(Right click on your project name in the Solution Explorer -> Add.. -> Existing Items...)
After that add this line to your source (to the fist line for example):
#pragma comment(lib,"OpenGL32.lib")
Compile...
unresolved external symbol __imp__CreateWindowExA@48 referenced in function _WinMain@16
To fix this you have to link to the User32.lib library but in a Win32 project this is done automatically so create a new project : File -> New -> Project... -> VC++ -> Win32 -> Win32 Project , Click next in the Wizard Then choose “Windows application”, check Empty project and click on Finish. After that copy your files to the project directory and add them to your project.
(Right click on your project name in the Solution Explorer -> Add.. -> Existing Items...)
After that add this line to your source (to the fist line for example):
#pragma comment(lib,"OpenGL32.lib")
Compile...
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement