makeneo
-
29 oct. 2012 à 12:45
ToutEnMasm
Messages postés587Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention13 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;
}