Unicode gui winapi

makeneo - 29 oct. 2012 à 12:45
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 - 29 oct. 2012 à 14:32
Salut
Je dois écrire une application graphique en utilisant l'alphabet n'ko (http://en.wikipedia.org/wiki/N%27ko). Je travaille sous Windows Xp avec mingw.
Aucune police Windows Xp ne supporte cet alphabet. Par conséquent, j'ai installé la police DejaVuSans (http://dejavu-fonts.org/wiki/Download). Résultat, le site http://kanjamadi.com/ s'affiche correctement.
J'ai écrit donc une simple application graphique en c++. Malheureusement, les caractères affichés ne sont pas corrects. Quelqu'un peut-il m'expliquer comment faire pour créer une application avec cet alphabet ?
Cordialement
Voici le code :
// g++ -o test test.cpp -lgdi32
#include <windows.h>

#define UNICODE 
#define _UNICODE
HINSTANCE instance;
#define ID_PUSHBUTTON_1     110
HFONT hfont;

VOID RemplieFenetrePrincipale(HWND fenetrePrincipale)
{

        HWND hControle;
        // On le remplit avec un premier push button tout bête
        hControle=CreateWindow(
            TEXT("BUTTON"),
            TEXT("\u07d2\u07de\u07cf"),
            WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
            10,10,
            100,20,
            fenetrePrincipale,
            (HMENU)ID_PUSHBUTTON_1,
            instance,
            NULL);
AddFontResource (TEXT("onts\\DejaVuSans.ttf"));    // modifier le chemin 
SendMessage(   HWND_BROADCAST,   WM_FONTCHANGE, 0, 0 );

hfont = CreateFont(0, 0, 0, 0, 0, 0, 0, 0, 
SYMBOL_CHARSET, 
OUT_DEFAULT_PRECIS, 
CLIP_DEFAULT_PRECIS, 
DEFAULT_QUALITY, 
DEFAULT_PITCH | FF_DECORATIVE, 
TEXT("DejaVuSans"));	   
SendMessage (hControle, WM_SETFONT, (WPARAM)hfont, TRUE);

}


VOID NotificationControle(HWND fenetrePrincipale,UINT message, WPARAM wParam, LPARAM lParam)
{
    UINT iId=LOWORD(wParam);
    HWND hCtl=(HWND)lParam;

    switch(iId)
    {
        case ID_PUSHBUTTON_1:
            MessageBox(fenetrePrincipale,TEXT("Vous avez appuyé sur le premier bouton"),TEXT(""),MB_OK);
            break;
    }
}

LRESULT CALLBACK procedureFenetrePrincipale(HWND fenetrePrincipale, UINT message, WPARAM wParam, LPARAM lParam)
{
    static HWND boutons[2] = {NULL};

    switch (message)
    {
        case WM_CREATE:
            RemplieFenetrePrincipale(fenetrePrincipale);
            return 0;
        case WM_COMMAND:
            NotificationControle(fenetrePrincipale,message,wParam,lParam);
            return 0;
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
        default:
            return DefWindowProc(fenetrePrincipale,message,wParam,lParam);
    }
}


int WINAPI WinMain (HINSTANCE cetteInstance, HINSTANCE precedenteInstance,
             LPSTR lignesDeCommande, int modeDAffichage)
{
    HWND fenetrePrincipale;
    MSG message;
    WNDCLASS classeFenetre;

    instance = cetteInstance;

    classeFenetre.style = 0;
    classeFenetre.lpfnWndProc = procedureFenetrePrincipale;
    classeFenetre.cbClsExtra = 0;
    classeFenetre.cbWndExtra = 0;
    classeFenetre.hInstance = NULL;
    classeFenetre.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    classeFenetre.hCursor = LoadCursor(NULL, IDC_ARROW);
    classeFenetre.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE);
    classeFenetre.lpszMenuName = NULL;
    classeFenetre.lpszClassName = TEXT("classeF");

// On prévoit quand même le cas où ça échoue
    if(!RegisterClass(&classeFenetre))
        return FALSE;

    fenetrePrincipale=CreateWindow(
        TEXT("classeF"),
        TEXT("Ma premiere fenetre winAPI !"),
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,CW_USEDEFAULT,
        130,80,
        NULL,
        NULL,
        cetteInstance,
        NULL);

    if (!fenetrePrincipale)
        return FALSE;

    ShowWindow(fenetrePrincipale,modeDAffichage);
    UpdateWindow(fenetrePrincipale);

    while(GetMessage(&message,NULL,0,0))
    {
        TranslateMessage(&message);
        DispatchMessage(&message);
    }

    return message.wParam;
}

1 réponse

ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
29 oct. 2012 à 14:32
Le texte du bouton a la creation:
TEXT("\u07d2\u07de\u07cf")
Semble étrange.
Creer le bouton.
WM_SETFONT au bouton.
Envoyer le texte du bouton.
0
Rejoignez-nous