Salut.
C'est super : ACTION .... REACTION. Merci pour la rapidité de tes réponses qui confirme ce que je pense sur ce forum : EXCELLENT !
Eu .... comment je fais pour créer une FONT en GLOBAL afin de l'utiliser partout dans mon projet.
Salut.
C'est super : ACTION .... REACTION. Merci pour la rapidité de tes réponses qui confirme ce que je pense sur ce forum : EXCELLENT !
Eu .... comment je fais pour créer une FONT en GLOBAL afin de l'utiliser partout dans mon projet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 LOGFONT lf; memset(&lf, 0, sizeof(LOGFONT)); strcpy(lf.lfFaceName, "Arial"); int PointSize=12;// 12 points de hauteur HDC hDC=::CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL);// dc d'ecran lf.lfHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);// hauteur en point ::DeleteDC(hDC); HFONT hFont=::CreateFontIndirect(&lf);![]()
Ce qui est affirmé sans preuve peut être nié sans preuve Euclide.
Les conversions numériques en C,C++,C++/CLI
DLL d'extensions : écriture d'un plug-in de classe
Démarrer avec les MFC 2/2
Création d'un ActiveX MFC
Intégration d'une imprimante PDF pour éditions automatisées
Migrer du code de Visual C++ 6.0 vers Visual C++ 2005
Démarrer avec les MFC sous Visual C++1/2
la Faq Visual C++ 500 Q/R,Mon blog
Aide en Ligne MFC
Cours et tutoriels C++ - FAQ C++ - Forum C++.
J'ai trouvé. Pour ceux que ca interesse :
Dans un fichier de type H écrire :
Et dans le fichier principale telle que Main.cpp tu déclare une variable identique à MaFont en extern et tu initialise ta font :
Code : Sélectionner tout - Visualiser dans une fenêtre à part HFONT MaFont
Es-ce que je me trompe?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 extern HFONT MaFont .... MaFont = CreateFont(Taille,0,0,0,GRAS,ITALIC,SOULIGNE,BARRE,ANSI_CHARSET,OUT_TT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,FF_DONTCARE|DEFAULT_PITCH,"Arial")
createfont ou createfondindirect sont deux méthodes pour créer une fonte, createfont reprend individuellement les éléments d'une LOGFONT.
pour ta vairiable globale:
dans un .h ex :MyInc.h
dans un seul .cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #ifdef GLOBAL_DEC HFONT hGlobalFont; #else extern HFONT hGlobalFont; #endif
pour les autres .cpp il suffit de faire un include "MyInc.h"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #define GLOBAL_DEC 1 include "MyInc.h"
![]()
Ce qui est affirmé sans preuve peut être nié sans preuve Euclide.
Les conversions numériques en C,C++,C++/CLI
DLL d'extensions : écriture d'un plug-in de classe
Démarrer avec les MFC 2/2
Création d'un ActiveX MFC
Intégration d'une imprimante PDF pour éditions automatisées
Migrer du code de Visual C++ 6.0 vers Visual C++ 2005
Démarrer avec les MFC sous Visual C++1/2
la Faq Visual C++ 500 Q/R,Mon blog
Aide en Ligne MFC
Cours et tutoriels C++ - FAQ C++ - Forum C++.
OK.
Mais les fonctions GetTextExtentPoint32 et SetWindowPos utilisent-elles la même unités de mesure.
Car si je prend un exemple, je créer un static avec une FONT dont les caractéristiques sont : TAILLE = 20, Gras, Italique, Arial.
Et je souhaite connaitre la taille réelle de mon texte avec GetTextExtentPoint32 et ensuite redimensionner le static avec SetWindowPos.
Es-ce ca va marché car la taille du texte est lié à la résolution de l'écran et l'autre pas.
J'espère que tu auras réussit à me comprendre.
non pas vraiment ,Envoyé par Mirsa
c'est quoi l'autre ?
on travaille en pixels c'est tout, on a récuperé la taille du texte en pixels et on adapte la taille du controle en consequence .![]()
Ce qui est affirmé sans preuve peut être nié sans preuve Euclide.
Les conversions numériques en C,C++,C++/CLI
DLL d'extensions : écriture d'un plug-in de classe
Démarrer avec les MFC 2/2
Création d'un ActiveX MFC
Intégration d'une imprimante PDF pour éditions automatisées
Migrer du code de Visual C++ 6.0 vers Visual C++ 2005
Démarrer avec les MFC sous Visual C++1/2
la Faq Visual C++ 500 Q/R,Mon blog
Aide en Ligne MFC
Cours et tutoriels C++ - FAQ C++ - Forum C++.
L'exemple sera bien mieux que les mots.
Alors je créer un STATIC avec une font puis je la redimensionne :
Ensuite je créer un autre STATIC avec une autre FONT puis je la redimensionne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 MaFont1 = CreateFont(50,0,0,0,FALSE,TRUE,TRUE,FALSE,ANSI_CHARSET,OUT_TT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,FF_DONTCARE|DEFAULT_PITCH,"Arial"); hWin = CreateWindowEx(ExFlags, pClass, pName, WS_CLIPCHILDREN | WS_CHILD | WS_VISIBLE | Flags,x, y, w, h, hDlg, NULL, WINMAIN_hInst, NULL); SendMessage(Hwnd_Static,WM_SETFONT,(UINT)MaFont1,TRUE); hGdiOld = SelectObject(GetDC(Hwnd_Static),MaFont1); GetTextExtentPoint32(GetDC(Hwnd_Static),pName,strlen,pName),&size); SetWindowPos(Hwnd_Static,NULL,0,0,size.cx,size.cy,SWP_NOMOVE|SWP_NOZORDER); SelectObject(GetDC(GetDlgItem(hDlg,Id)),hGdiOld); ReleaseDC(GetDlgItem(hDlg,Id),GetDC(GetDlgItem(hDlg,Id)));
Dans les deux cas, on s'apercoit à l'écran que le "rectangle" de chaque STATIC n'est pas bien redimensionner (surtout pour MaFont1) donc je ne peux pas placer le second STATIC pile poils après le premier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 MaFont 2= CreateFont(15,0,0,0,TRUE,TRUE,TRUE,FALSE,ANSI_CHARSET,OUT_TT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,FF_DONTCARE|DEFAULT_PITCH,"Arial"); hWin = CreateWindowEx(ExFlags, pClass, pName, WS_CLIPCHILDREN | WS_CHILD | WS_VISIBLE | Flags,x, y, w, h, hDlg, NULL, WINMAIN_hInst, NULL); SendMessage(Hwnd_Static,WM_SETFONT,(UINT)MaFont2,TRUE); hGdiOld = SelectObject(GetDC(Hwnd_Static),MaFont2); GetTextExtentPoint32(GetDC(Hwnd_Static),pName,strlen,pName),&size); SetWindowPos(Hwnd_Static,NULL,0,0,size.cx,size.cy,SWP_NOMOVE|SWP_NOZORDER); SelectObject(GetDC(GetDlgItem(hDlg,Id)),hGdiOld); ReleaseDC(GetDlgItem(hDlg,Id),GetDC(GetDlgItem(hDlg,Id)));
Il se peut .... voir même quasi sur ... que je me suis planter dans mon code.
J'ai fais des tests avec deux static dont chacun utilise une FONT différentes (MaFont1 => TAILLE=20 et MaFont2 => TAILLE=15).
Ca me donne ca :
On voit que le texte est tronquer et que le rectangle de mon STATIC n'est pas redimensionner.
re,
ce n'est pas tout a fais ce que je t'avais dis ...
le premier static tu le redimensionne en fonction de son contenu.
le deuxieme il faudra le deplacer en fonction du premier static
pour calculer les coordonnées il faut recuperer l'emplacement windows du premier et coler le second a coté ...
ps: tu m'as fait un gros massacre à la hache dans ton code avec GetDC....
a tester j'ai ecris sans pouvoir tester, il y avait pleins d'erreurs dans ton code ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 void SetStatic(HWND hWin,HFONT hFont) { SendMessage(hWin,WM_SETFONT,(UINT)hFont,TRUE); HDC hDC=GetDC(hWin); hGdiOld = SelectObject(hDC,hFont); SIZE size; char szName[255]; GetWindowText(hWnd, szName,sizeof(szName)); GetTextExtentPoint32(hDC,szName,strlen(szName),&size); SetWindowPos(hWin,NULL,0,0,size.cx,size.cy,SWP_NOMOVE|SWP_NOZORDER); SelectObject(hDC,hGdiOld); ReleaseDC(hWin,hDC); } HFONT MaFont1 = CreateFont(50,0,0,0,FALSE,TRUE,TRUE,FALSE,ANSI_CHARSET,OUT_TT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,FF_DONTCARE|DEFAULT_PITCH,"Arial"); HWND hWin = CreateWindowEx(ExFlags, pClass, pName, WS_CLIPCHILDREN | WS_CHILD | WS_VISIBLE | Flags,x, y, w, h, hDlg, NULL, WINMAIN_hInst, NULL); SetStatic(hWin,MaFont1); HFONT MaFont2= CreateFont(15,0,0,0,TRUE,TRUE,TRUE,FALSE,ANSI_CHARSET,OUT_TT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,FF_DONTCARE|DEFAULT_PITCH,"Arial"); HWND hWin1 = CreateWindowEx(ExFlags, pClass, pName, WS_CLIPCHILDREN | WS_CHILD | WS_VISIBLE | Flags,x, y, w, h, hDlg, NULL, WINMAIN_hInst, NULL); SetStatic(hWin1,MaFont2); RECT Rect; ::GetClientRect(hWin,&Rect); // 1 static coord screen POINT pt; pt.x=Rect.left; pt.y=Rect.top; ::ScreenToClient(hDlg,&pt); // conversion en coord cliente pt.x+=(Rect.right-Rect.left); // x= fin du premier static. position x += largeur du static. ::GetClientRect(hWin1,&Rect); //2 static coord screen POINT pt2; pt2.x=Rect.left; pt2.y=Rect.top; // y = hauteur actuelle du static. ::ScreenToClient(hDlg,&pt2); // conversion en coord cliente SetWindowPos(hWin1,NULL,pt.x,pt2.y,0,0,SWP_NOSIZE|SWP_NOZORDER); // deplacement uniquement pas la taille.
![]()
Ce qui est affirmé sans preuve peut être nié sans preuve Euclide.
Les conversions numériques en C,C++,C++/CLI
DLL d'extensions : écriture d'un plug-in de classe
Démarrer avec les MFC 2/2
Création d'un ActiveX MFC
Intégration d'une imprimante PDF pour éditions automatisées
Migrer du code de Visual C++ 6.0 vers Visual C++ 2005
Démarrer avec les MFC sous Visual C++1/2
la Faq Visual C++ 500 Q/R,Mon blog
Aide en Ligne MFC
Cours et tutoriels C++ - FAQ C++ - Forum C++.
Bonjour,
Euh à propos de ce code :
Il n'y a pas un binzzz ? Car si je lit l'aide MSDN, la fonction GetClientRect permet de réccupérer les dimension du rectangle client et non la poisition de cet élément à l'écran.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ::GetClientRect(hWin,&Rect);
Je pense que c'est GetWindowRect qu'il faut utilisé.
Tu crois pas ?
P.S. : merci pour ton aide
oui effectivement je me suis planté ,c'est bien GetWindowRect qu'il faut utiliser.
Ce qui est affirmé sans preuve peut être nié sans preuve Euclide.
Les conversions numériques en C,C++,C++/CLI
DLL d'extensions : écriture d'un plug-in de classe
Démarrer avec les MFC 2/2
Création d'un ActiveX MFC
Intégration d'une imprimante PDF pour éditions automatisées
Migrer du code de Visual C++ 6.0 vers Visual C++ 2005
Démarrer avec les MFC sous Visual C++1/2
la Faq Visual C++ 500 Q/R,Mon blog
Aide en Ligne MFC
Cours et tutoriels C++ - FAQ C++ - Forum C++.
Ou bien, si on cherche la position du rectangle client à l'écran et non celle du rectangle complet, on peut utiliser GetClientRect() et MapWindowPoints()...
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.
Partager