API win32

Résolu
rachid12450 Messages postés 13 Date d'inscription mardi 4 juillet 2006 Statut Membre Dernière intervention 4 mars 2009 - 24 nov. 2006 à 16:12
rachid12450 Messages postés 13 Date d'inscription mardi 4 juillet 2006 Statut Membre Dernière intervention 4 mars 2009 - 4 déc. 2006 à 11:41
Bonjour à tous
ma question:
y'a t-il un moyen de récupérer la hateur des étquettes d'un TAB_CONTROL
avec par exemple GetSystemMetrics() ou autre fonction
merçi d'avance
à bientôt

5 réponses

rachid12450 Messages postés 13 Date d'inscription mardi 4 juillet 2006 Statut Membre Dernière intervention 4 mars 2009
4 déc. 2006 à 11:41
Bonjour à tous,
je reviens sur cette question: "Peut on modifier la hauteur des onglets d'un TAB_CONTROL"
après une recherche personnelle avec l'aide de ce site fabuleux
la réponse est oui cette hauteur n'est pas constante, elle dépend de la hauteur tout bêtement de la hauteur de la font utilisée dans le TabControl
par exemple
hwndTabCtrl est le handle du TabControl
il suffit de:
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT)); pour initialiser à 0 la structure LOGFONT;
lf.lfHeight = 35;
lf.lfWeight = FW_BOLD; une constante définissant une certaine épaisseur de la font;
hfont = CreateFontIndirect(&lf);
hdc = GetDC(hwndTabCtrl);
SelectObject(hdc, hfont);

et le tour est joué: les dimensions des onglets du TabCtrl notamment leur hauteur  sont équivelentes aux dimensions du text écrit dans ces onglets avec la nouvelle font sélectionnée.

si on veut créer une fenêtre enfant dans le TabCtrl, il faut faire attention pour ne pas empiéter sur les onglets avec leur nouvelle taille
 
par exemple utiliser:
GetTextExtentPoint32(hdc, Buffer, 40, &size);
Buffer étant par exemple la string d'un onglet du TabCtrl
en créant la fenêtre enfant il faut respecter la hauteur de la font qui se retrouve dans size.cy par exemple on crée une fenêtre enfant sur l'ensemble de la surface du TabCtrl par:
CreateWindowEx(WS_EX_CLIENTEDGE, "Ma fenêtre enfant", "XXXXXXXXX", WS_CHILD | WS_VISIBLE | WS_HSCROLL,
rc.left+5, rc.top+5+size.cy, rc.right-10, rc.bottom-10-size.cy, hwndTabCtrl,NULL, hInst, NULL);
le "5" de chaque coté est pour respecter la bordure
le size.cy est pour respecter la hauteur des onglets

voilà
à très bientôt
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
24 nov. 2006 à 19:41
Cette taille n'est-elle pas constante?

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
rachid12450 Messages postés 13 Date d'inscription mardi 4 juillet 2006 Statut Membre Dernière intervention 4 mars 2009
27 nov. 2006 à 12:44
Bonjour
voilà j'apporte quelques précisions
je crée une fenêtre principale hwndMain
dans le WM_CREATE de cette fenêtre je crée un WC_TABCONTROL :GetClientRect(hwndMain, &rc);<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

 hwnd_TabCtrl =

CreateWindowEx(0, WC_TABCONTROL, "", WS_CHILD | WS_VISIBLE, 0, 0, rc.right, rc.bottom, hwndMain,(HMENU)IDHWNDTAB, hInst, NULL);

je crée une autre fenêtre dans la surface client du TABCONTROL            

GetClientRect(hwnd_TabCTRL, &rc);

 hwndTableau =

CreateWindowEx(WS_EX_CLIENTEDGE, "StructureTableau", "XXXXXXXXX", WS_CHILD | WS_VISIBLE | WS_HSCROLL,

rc.left, rc.top, rc.right, rc.bottom, hwnd_TabCtrl,NULL, hInst, NULL);

en utilsant par exemple des lignes du type:
sprintf(Buffer,"Largeur de la surface client %i", rc.right);
MessageBox(hwndMain, Buffer, "Message information", MB_OK) ;
j'arrive à constater un certain nombre de chose:
1) la surface client de la fenêtre principale et du tab_ctrl sont les mêmes ce qui me parait étrange
pour être concret:
hwnd_Main rc.left=0, rc.top=0, rc.right=996, rc.bottom=540.
Idem pour hwnd_TabCtrl.
2) la troisième fenêtre créée dans la surface client du Tab_Ctrl est par contre réduite:
hwnd_Tableau rc.left=0, rc.top=0, rc.right=992, rc.bottom=515.
mes questions sont:
 pourquoi la fenêtre principale et la fenêtre TabCtrl ont les mêmes dimensions de leurs surfaces client?
la différence entre 540 et 515 est ce que elle correspond à la hauteur des étiquettes du TabCtrl? si oui est ce que cette différence ne dépend pas de la résolution de l'écran?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
27 nov. 2006 à 13:37
Rien d'extraordinaire à ce que deux fenêtres fassent la même taille, je ne vois pas le problème
Pour vérifier simplement la taille des fenêtres, tu peux utiliser Spy++ ou ceci

La taille en pixels ne diffère pas selon la résolution. C'est juste qu'avec une petite résolution, tu verra ta fenêtre plus grande

_____________________________________
Un éditeur de ressources gratuit pour Windows
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rachid12450 Messages postés 13 Date d'inscription mardi 4 juillet 2006 Statut Membre Dernière intervention 4 mars 2009
27 nov. 2006 à 16:48
merçi pour le tuyau "Spy++" effectivement c'est très utile


mais je reviens quand même à ma question






j'ai toujours les trois fenêtres:
1) hwndMain fenêtre principale
2) hwnd_TabCtrl fenêtre enfant couvrant la surface client de la fenêtre principale
3) hwndTableau couvre la surface client de hwnd_TabCtrl

dans la procédure de la fenêtre principale je dois traîter un changement de dimension ou un déplacement de la fenêtre principale
je procède ainsi: case WM_SIZE:<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>










            GetClientRect(hwndMain, &rc);










            MoveWindow(hwnd_TabCtrl, rc.left, rc.top, rc.right, rc.bottom, TRUE);

























            GetClientRect(hwndTabCtrl, &rc);














//si je met:
      
      MoveWindow(hwndTableau, rc.left, rc.top, rc.right, rc.bottom, TRUE);//"les étiquettes" du Tab_Ctrl
//sont perdues









//par contre si je met :           













     
      MoveWindow(hwndTableau, rc.left+5, rc.top+25, rc.right-10, rc.bottom-30, TRUE);










     break;


//les étiquettes sont là 
//alors que la création du Tab_Ctrl s'est faite ainsi:





GetClientRect(hwndMain, &rc);






 hwnd_TabCtrl =



CreateWindowEx(0, WC_TABCONTROL, "", WS_CHILD | WS_VISIBLE, 0, 0, rc.right, rc.bottom, hwndMain,(HMENU)IDHWNDTAB, hInst, NULL);


je ne sais pas mais il y a quelques chose qui m'échappe
est ce que je dois utiliser le Spy++ pour déterminer les +5, +25, -10 et -30 utilisés dans
MoveWindow(hwndTableau, rc.left+5, rc.top+25, rc.right-10, rc.bottom-30, TRUE)?













 



 
0
Rejoignez-nous