Précédent   Forum du club des développeurs et IT Pro > Général Développement > Programmation système > Windows
Windows Forum d'entraide sur la programmation Windows. Tutoriel API Windows
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/10/2012, 13h51   #1
makeneo
Invité de passage
 
makeneo makeneo
Inscription : juin 2010
Messages : 7
Détails du profil
Informations personnelles :
Nom : makeneo makeneo

Informations forums :
Inscription : juin 2010
Messages : 7
Points : 0
Points : 0
Par défaut application windows gui et alphabet n'ko

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. Résultat, le site http://kanjamadi.com/ s'affiche correctement.
J'ai écrit donc une simple application graphique (bouton, menu ...) en c++. Malheureusement, j'obtiens des carrés à la place des caractères. Quelqu'un peut-il m'expliquer comment faire pour créer une application avec cet alphabet ?
Cordialement

Voici quelques mots pour tester :
ߞߎ߲߬ߠߊ߬ߛߌ߮
ߞߎ߲߬ߠߊ߬ߦߋߙߋ߲
ߝߢߐߘߊ߫
ߡߐ߬ߟߐ߲߬ߡߊ
makeneo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2012, 15h55   #2
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 495
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 495
Points : 32 286
Points : 32 286
Envoyer un message via MSN à Médinoc
Tu peux forcer les boîtes de dialogue et les boutons à utiliser la police DejaVuSans, mais pour les menus, je ne vois pas de solution simple et qui n'affecte pas l'environnement extérieur (en gros, qui ne nécessite pas de régler dans Windows pour que les menus utilisent cette police).

Dans ce cas, il te faudra passer par la solution compliquer: Faire les menus toi-même ou passer par une bibliothèque qui les fait et qui permet de spécifier la police.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2012, 20h33   #3
makeneo
Invité de passage
 
makeneo makeneo
Inscription : juin 2010
Messages : 7
Détails du profil
Informations personnelles :
Nom : makeneo makeneo

Informations forums :
Inscription : juin 2010
Messages : 7
Points : 0
Points : 0
Par défaut ...

> "Tu peux forcer les boîtes de dialogue et les boutons à utiliser la police DejaVuSans"

Pouvez-vous me donner un bout de code qui fonctionne pour que je puisse le tester ?
Cordialement
makeneo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2012, 21h06   #4
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 495
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 495
Points : 32 286
Points : 32 286
Envoyer un message via MSN à Médinoc
Je n'en ai pas sous la main, mais tu peux tester en envoyant un message WM_SETFONT aux contrôles en question (pour les vraies boîtes de dialogue, il y a un procédé différent qui affecte peut-être toute la boîte en un coup, mais je n'en ai pas les subtilités en tête.

Pour pouvoir utiliser WM_SETFONT, tu devras d'abord charger la police en mémoire avec CreateFont().
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2012, 12h23   #5
makeneo
Invité de passage
 
makeneo makeneo
Inscription : juin 2010
Messages : 7
Détails du profil
Informations personnelles :
Nom : makeneo makeneo

Informations forums :
Inscription : juin 2010
Messages : 7
Points : 0
Points : 0
Par défaut ...

Salut
J'ai suivi vos conseils et j'ai modifié le code source. Il vous faudra créer un répertoire fonts dans lequel il y aura la police DejaVuSans.ttf (http://dejavu-fonts.org/wiki/Download).
A la place des carrés, j'obtiens maintenant des caractères "bizarre"
Donc voici le code si il ya des corrections à faire :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// g++ -o test test.c -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;
}
makeneo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2012, 20h27   #6
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 495
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 495
Points : 32 286
Points : 32 286
Envoyer un message via MSN à Médinoc
Attention, UNICODE et _UNICODE doivent être définis avant d'inclure windows.h.
Préférablement en ligne de commande.

Je n'ai pas vraiment regardé plus loin parce que c'est un peu un deal-breaker.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h20.


 
 
 
 
Partenaires

Hébergement Web