3 votes

J'utilise CreateWindowExA pour créer une fenêtre. Pourquoi le texte de l'en-tête de ma fenêtre s'affiche-t-il comme s'il était en codage multi-octets ?

J'ai ce programme :

#include <Windows.h>

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
        case WM_CLOSE:
            PostQuitMessage(0);
            break;

        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
    }

    return 0;
}

int main()
{
    WNDCLASSA wnd_class = { 0 }; 
    wnd_class.lpfnWndProc = WndProc;
    wnd_class.hInstance = GetModuleHandle(NULL);
    wnd_class.lpszClassName = "actwnd";

    RegisterClassA(&wnd_class);

    HWND main_wnd = CreateWindowA(wnd_class.lpszClassName, "Program activation", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, 640, 480, NULL, 0, wnd_class.hInstance, NULL);

    MSG msg = { 0 };
    while(GetMessage(&msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

Je ne comprends pas pourquoi la légende de la fenêtre s'affiche incorrectement :

enter image description here

Il semble que pour une raison inconnue pour moi, quelque chose pense toujours que c'est un codage unicode à deux octets...

L'encodage du fichier des options d'enregistrement avancées est fixé à un seul octet - win 1251.

Je veux utiliser exactement les versions ANSI et l'en-tête de ma fenêtre ne contient que des caractères ANSI.

8voto

David Heffernan Points 292687

La procédure de votre fenêtre doit appeler DefWindowProcA .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X