【问题标题】:Message Box error消息框错误
【发布时间】:2014-01-05 14:52:45
【问题描述】:

我在使用 C++ 消息框时遇到了一点问题。我正在创建 OpenGL 应用程序,但在那里发现了一些错误。

// 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
    }

代码未完成,但消息框有问题。

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
}

我遇到了消息框问题。 “发布渲染上下文失败。”、“DC 和 RC 发布失败。”、“SHUTDOWN ERROR”、“SHUTDOWN ERROR” - “const char*”类型的参数与“LPCWSTR”类型的参数不兼容 非常感谢您的回复。 奥利佩

【问题讨论】:

    标签: c++ visual-c++


    【解决方案1】:

    在字符串文字前添加L前缀。

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

    【讨论】:

      【解决方案2】:

      看起来您正在以 Unicode 模式编译(这可能是个好主意)。这意味着 Windows API 函数将需要 wchar_t(Unicode UTF-16 格式)的宽字符串,而不是 char 的 ANSI 字符串。

      您可以通过以 L 为前缀来创建宽字符串文字 - 例如L"Hello world".

      【讨论】:

        【解决方案3】:

        试试这个:

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

        【讨论】:

        • 您不能通过强制转换将 ANSI 字符串转换为 Unicode。它会编译,但不会工作。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-18
        • 1970-01-01
        相关资源
        最近更新 更多