|
Помогите разобраться с функцие CreateWindowEx()
На её последнем аргументе вылетает ошибка типа
error C2664: 'CreateWindowExA' : cannot convert parameter 3 from 'LPCWSTR' to 'LPCSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Понятно,что надо сделать явное преобразование с помощью reinterpret_cast ,но как именно,пытался,но ничего не получилось...
Код,где возникает ошибка я выделил коричневым цветом...
Подскажите...
#include <windows.h>
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>
HGLRC hRC=NULL;
HDC hDC=NULL;
HWND hWnd=NULL;
HINSTANCE hInstance;
bool keys[256];
bool active=true;
bool fullscreen=true;
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
GLvoid ReSizeGLScene( GLsizei width, GLsizei height )
{
if( height == 0 )
{
height = 1;
}
glViewport( 0, 0, width, height );
glMatrixMode(GL_PROJECTION);
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective( 45.0f, (GLfloat)width/(GLfloat)height, 0.1f, 100.0f );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
}
int InitGL( GLvoid )
{
glShadeModel( GL_SMOOTH );
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth( 1.0f );
glEnable( GL_DEPTH_TEST );
glDepthFunc( GL_LEQUAL );
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
return true;
}
int DrawGLScene( GLvoid )
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
return true;
}
GLvoid KillGLWindow( GLvoid )
{
if( fullscreen )
{
ChangeDisplaySettings( NULL, 0 );
ShowCursor( true );
}
if( hRC )
{
if( !wglMakeCurrent( NULL, NULL ) )
{
MessageBox( NULL, (LPCWSTR)"Release Of DC And RC Failed.", (LPCWSTR)"SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION );
}
if( !wglDeleteContext( hRC ) )
{
MessageBox( NULL, (LPCWSTR)"Release Rendering Context Failed.", (LPCWSTR)"SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION );
}
hRC = NULL;
}
if( hDC && !ReleaseDC( hWnd, hDC ) )
{
MessageBox( NULL, (LPCWSTR)"Release Device Context Failed.", (LPCWSTR)"SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION );
hDC=NULL;
}
if(hWnd && !DestroyWindow(hWnd))
{
MessageBox( NULL, (LPCWSTR)"Could Not Release hWnd.", (LPCWSTR)"SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION );
hWnd = NULL;
}
if( !UnregisterClass( (LPCWSTR)"OpenGL", hInstance ) )
{
MessageBox( NULL, (LPCWSTR)"Could Not Unregister Class.", (LPCWSTR)"SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);
hInstance = NULL;
}
}
BOOL CreateGLWindow( LPCWSTR title, int width, int height, int bits, bool fullscreenflag )
{
GLuint PixelFormat;
WNDCLASS wc;
DWORD dwExStyle;
DWORD dwStyle;
RECT WindowRect;
WindowRect.left=(long)0;
WindowRect.right=(long)width;
WindowRect.top=(long)0;
WindowRect.bottom=(long)height;
fullscreen=fullscreenflag;
hInstance = GetModuleHandle(NULL);
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
wc.lpfnWndProc = (WNDPROC) WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = NULL;
wc.lpszMenuName = NULL;
wc.lpszClassName = (LPCWSTR)"OpenGL";
if( !RegisterClass( &wc ) )
{
MessageBox( NULL, (LPCWSTR)"Failed To Register The Window Class.", (LPCWSTR)"ERROR", MB_OK | MB_ICONEXCLAMATION );
return false;
}
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 )
{
if( MessageBox( NULL, (LPCWSTR)"The Requested Fullscreen Mode Is Not Supported By\nYour Video Card. Use Windowed Mode Instead?",
(LPCWSTR)"NeHe GL", MB_YESNO | MB_ICONEXCLAMATION) == IDYES )
{
fullscreen = false;
}
else
{
MessageBox( NULL, (LPCWSTR)"Program Will Now Close.", (LPCWSTR)"ERROR", MB_OK | MB_ICONSTOP );
return 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 );
if( !( hWnd = CreateWindowEx( dwExStyle, _T("OpenGL"), title, WS_CLIPSIBLINGS | WS_CLIPCHILDREN | dwStyle, 0, 0, WindowRect.right-WindowRect.left, WindowRect.bottom-WindowRect.top, NULL, NULL, hInstance, NULL ) ) ) {
KillGLWindow();
MessageBox( NULL, (LPCWSTR)"Window Creation Error.", (LPCWSTR)"ERROR", MB_OK | MB_ICONEXCLAMATION );
return false;
}
static PIXELFORMATDESCRIPTOR pfd=
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW |
PFD_SUPPORT_OPENGL |
PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
bits,
0, 0, 0, 0, 0, 0,
0,
0,
0,
0, 0, 0, 0,
32,
0,
0,
PFD_MAIN_PLANE,
0,
0, 0, 0
};
if( !( hDC = GetDC( hWnd ) ) )
{
KillGLWindow();
MessageBox( NULL, (LPCWSTR)"Can't Create A GL Device Context.", (LPCWSTR)"ERROR", MB_OK | MB_ICONEXCLAMATION );
return false;
}
if( !( PixelFormat = ChoosePixelFormat( hDC, &pfd ) ) )
{
KillGLWindow();
MessageBox( NULL, (LPCWSTR)"Can't Find A Suitable PixelFormat.", (LPCWSTR)"ERROR", MB_OK | MB_ICONEXCLAMATION );
return false;
}
if( !SetPixelFormat( hDC, PixelFormat, &pfd ) )
{
KillGLWindow();
MessageBox( NULL, (LPCWSTR)"Can't Set The PixelFormat.", (LPCWSTR)"ERROR", MB_OK | MB_ICONEXCLAMATION );
return false;
}
if( !( hRC = wglCreateContext( hDC ) ) )
{
KillGLWindow();
MessageBox( NULL, (LPCWSTR)"Can't Create A GL Rendering Context.", (LPCWSTR)"ERROR", MB_OK | MB_ICONEXCLAMATION);
return false;
}
if( !wglMakeCurrent( hDC, hRC ) )
{
KillGLWindow();
MessageBox( NULL, (LPCWSTR)"Can't Activate The GL Rendering Context.", (LPCWSTR)"ERROR", MB_OK | MB_ICONEXCLAMATION );
return false;
}
ShowWindow( hWnd, SW_SHOW );
SetForegroundWindow( hWnd );
SetFocus( hWnd );
ReSizeGLScene( width, height );
if( !InitGL() )
{
KillGLWindow();
MessageBox( NULL, _T("Initialization Failed."), _T("ERROR"), MB_OK | MB_ICONEXCLAMATION );
return false;
}
return true;
}
|