2014-01-05 2 views
0

У меня небольшая проблема с полем сообщений C++. Я создавал приложение OpenGL, и я нашел там некоторые ошибки.Ошибка в Message Box

// OpenGL knihovny 
#pragma comment (lib,"opengl32.lib") 
#pragma comment (lib,"glu32.lib") 
#pragma comment (lib,"glaux.lib") 
#include <windows.h> // Hlavičkový soubor pro Windows 
#include <gl\gl.h> // Hlavičkový soubor pro OpenGL32 knihovnu 
#include <gl\glu.h> // Hlavičkový soubor pro Glu32 knihovnu 
#include <glaux.h> // Hlavičkový soubor pro Glaux knihovnu 
//Globální proměnné 
HDC hDC = NULL; // Privátní GDI Device Context 
HGLRC hRC = NULL; // Trvalý Rendering Context 
HWND hWnd = NULL; // Obsahuje Handle našeho okna 
HINSTANCE hInstance; // Obsahuje instanci aplikace 
bool keys[256]; // Pole pro ukládání vstupu z klávesnice 
bool active = TRUE; // Ponese informaci o tom, zda je okno aktivní 
bool fullscreen = TRUE; // Ponese informaci o tom, zda je program ve fullscreenu 

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // Deklarace procedury okna (funkční prototyp) 
GLvoid ReSizeGLScene(GLsizei width, GLsizei height) // Změna velikosti a inicializace OpenGL okna 
{ 
    if (height == 0) // Zabezpečení proti dělení nulou 
    { 
     height = 1; // Nastaví výšku na jedna 
    } 
    glViewport(0, 0, width, height); // Resetuje aktuální nastavení 
    glMatrixMode(GL_PROJECTION); // Zvolí projekční matici 
    glLoadIdentity(); // Reset matice 
    gluPerspective(45.0f, (GLfloat)width/(GLfloat)height, 0.1f, 100.0f); // Výpočet perspektivy 

    glMatrixMode(GL_MODELVIEW); // Zvolí matici Modelview 
    glLoadIdentity(); // Reset matice 
} 
int InitGL(GLvoid) // Všechno nastavení OpenGL 
{ 
    glShadeModel(GL_SMOOTH); // Povolí jemné stínování (smooth shading) 
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Nastaví barvu pozadí na černou 
    glClearDepth(1.0f); // Nastavení hloubkového bufferu 
    glEnable(GL_DEPTH_TEST); // Povolí hloubkové testování 
    glDepthFunc(GL_LEQUAL); // Typ hloubkového testování 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Nejlepší perspektivní korekce 
    return TRUE; // Inicializace proběhla v pořádku 
} 
int DrawGLScene(GLvoid)// Vykreslování 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Smaže obrazovku a hloubkový buffer 
    glLoadIdentity(); // Reset matice 

    // Sem můžete kreslit 

    return TRUE; // Vykreslení proběhlo v pořádku 
} 
GLvoid KillGLWindow(GLvoid) // Zavírání okna 
{ 
    if (fullscreen) // Jsme ve fullscreenu? 
    { 
     ChangeDisplaySettings(NULL, 0); // Přepnutí do systému 
     ShowCursor(TRUE); // Nastaví zobrazení kurzoru 
    } 
    if (hRC)// Máme rendering kontext? 
    { 
     if (!wglMakeCurrent(NULL, NULL)) // Jsme schopni oddělit kontexty? 
     { 
      MessageBox(NULL, "Release Of DC And RC Failed.", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION); 
     } 
     if (!wglDeleteContext(hRC)) // Jsme schopni smazat RC? 
     { 
      MessageBox(NULL, "Release Rendering Context Failed.", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION); 
     } 
     hRC = NULL; // Nastaví hRC na NULL 
    } 

Код не заполнен, но у меня проблемы с Message Boxes.

if (hRC)// Máme rendering kontext? 
{ 
    if (!wglMakeCurrent(NULL, NULL)) // Jsme schopni oddělit kontexty? 
    { 
     MessageBox(NULL, "Release Of DC And RC Failed.", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION); 
    } 
    if (!wglDeleteContext(hRC)) // Jsme schopni smazat RC? 
    { 
     MessageBox(NULL, "Release Rendering Context Failed.", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION); 
    } 
    hRC = NULL; // Nastaví hRC na NULL 
} 

У меня проблемы с ящиками сообщений. Msgstr "Невозможно выполнить команду« Сброс визуализации ».« Отключение DC и RC не удалось. »,« ОШИБКА SHUTDOWN »,« SHUTDOWN ERROR »- аргумент типа« const char * »несовместим с параметром типа« LPCWSTR » Большое спасибо за ответы. Aulipe

ответ

2

Добавить L префикс перед строковыми литералами.

MessageBox(NULL, L"Release Of DC And RC Failed.", L"SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION); 
-1

Попробуйте это:

MessageBox(NULL, (LPTSTR)"TEXT" , (LPTSTR)"TEXT", MB_OK); 
+0

Вы не можете преобразовать строку ANSI в Unicode путем кастинга. Он будет компилироваться, но это не сработает. –

0

Похоже, что вы собираете в режиме Unicode (который, вероятно, хорошая идея). Это означает, что функции Windows API ожидают широкие строки wchar_t (в формате Unicode UTF-16), а не строки ANSI char.

Вы можете создать широкий строковый литерал с помощью префикса L - например. L"Hello world".