Obtenir les coordonée de l'onglet d'un controle tab

Résolu
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 - 9 juil. 2007 à 15:29
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 - 9 juil. 2007 à 21:02
Bonjour,
Je cherche a faire un menu pour fermer les onglet d'un tab control, j'ai fait le menu le probleme c'est qu'il est utilisable sur toute la fenetre, je voudrais donc recuperer les coordonées de l'onglet pour voir si le pointeur de la souris et dessus.

Neo_Fr

14 réponses

Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
9 juil. 2007 à 16:52
En cherchant un peu, j'ai fini par trouver:
BOOL TabCtrl_GetItemRect(HWND hwnd, int iItem, RECT *prc);

Le probleme c'est que j'utilise un structure pour stoquer quelque infos dont le RECT de l'onglet, mais si il y a plusieurs onglets et que je ferme un du millieu tout les onglets a la droite de celui que je vient de fermer vont s'aligner a gauche et les coordonnées vont logiquement changer, il faut donc mettre a jour le RECT de chaque structure, mais comment retrouver toutes les structures que j'ai creer?
3
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
9 juil. 2007 à 20:00
Salut,

Une ou plusieur ca n'a pas d'importance, il faut juste que tu remplisses les bons champs avant de faire un TCM_INSERTITEM.

Quand tu ajoutes un item, les données sont recopiées a partir de ta
structure TCITEM, donc apres tu peux t'en reservir pour rajouter un
deuxieme item si tu le souhaite, ca ne pose pas de probleme.

Pour les index, tu peux eviter la variable globale et utiliser le
message TCM_GETITEMCOUNT, pour placer tes nouveaux tabs toujours à
droite.
3
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
9 juil. 2007 à 20:49
Salut,

Toutes les informations que tu donnes lors de l'ajout de l'item restent
associé au meme item pendant toute la durée de vie du tabcontrol, donc
pas besoin de faire ca. Il faut bien comprendre que l'index n'est
justement pas une information associée a un item, et donc il ne faut
pas le stocker pour s'en reservir plus tard.

Generalement dans tout les messages de notifications, TCN_ ou NM_, tu
aura accés a l'index du tab concerné et donc a partir de cet index tu
peux recuperer n'importe quelle donnée de ton item.
3
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
9 juil. 2007 à 19:21
Salut,

Lorsque tu ajoutes ton tab, tu peux utiliser le champ lParam de la
structure TCITEM pour y mettre ce que tu veux,  dans ton cas tu
peux y sauver un pointeur sur ta structure.

Cela dit je trouve de sauver une copie du rectangle n'est pas une très
bonne idée, il vaut mieux le demander a chaque fois que tu en a besoins.
<link href="../../../css/ie4.css" type="text/css" rel="stylesheet" /><!-- @ --><link href="../../../css/inetsdk.css" type="text/css" rel="stylesheet" /><!-- @ --><style type="text/css"><![CDATA[
PRE.clsCode { font-size:110%; }
PRE.clsSyntax { font-size:100%; }
TD DIV.clsBeta { display:none;}

A:link { color:#0000ff; text-decoration:underline;}
A:visited { color:#0000ff; text-decoration:underline;}
A:hover { color:#3366ff; text-decoration:underline;}
MSHelp\:link {
color:#0000ff;
text-decoration:underline;
cursor:hand;
hoverColor:#3366ff;
filterString: ;}
]]></style><link href="ms-help://Hx/HxRuntime/HxLink.css" type="text/css" rel="stylesheet" />

<xml id="_topicdata" pagetype="struct" proj="platsdk" name="TCITEM" pubpath="/platform/commctls/tab/structures/tcitem.htm"><!-- topic data --><root></root></xml>

<xml xmlns=""><mshelp:keyword index="A" term="_win32_TCITEM"></mshelp:keyword><mshelp:keyword index="A" term="_win32_TCITEM_cpp"></mshelp:keyword><mshelp:toctitle title="TCITEM Structure"></mshelp:toctitle><mshelp:rltitle title="TCITEM Structure ()"></mshelp:rltitle><mshelp:keyword index="F" term="TCITEM"></mshelp:keyword><mshelp:keyword index="K" term="TCITEM"></mshelp:keyword><mshelp:attr name="TopicType" value="kbRef"></mshelp:attr><mshelp:attr name="Locale" value="kbEnglish"></mshelp:attr><mshelp:attr name="DevLang" value="C++"></mshelp:attr><mshelp:attr name="Technology" value="Controls"></mshelp:attr><mshelp:attr name="TechnologyVers" value="kbControls"></mshelp:attr><mshelp:attr name="DocSet" value="WCSDK"></mshelp:attr><mshelp:attr name="DocSet" value="LHSDK"></mshelp:attr><mshelp:attr name="DocSet" value="PSDK"></mshelp:attr><mshelp:attr name="TargetOS" value="Windows"></mshelp:attr><mshelp:attr name="TopicType" value="apiref"></mshelp:attr><mshelp:attr name="APIName" value="TCITEM"></mshelp:attr><mshelp:attr name="APIType" value="COM"></mshelp:attr><mshelp:attr name="TopicType" value="kbSyntax"></mshelp:attr></xml>
<dd><dl><dt>
</dd></dl>
0

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

Posez votre question
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
9 juil. 2007 à 19:27
Mais a chaque fois que je vais ajouter un tab le pointeur de ma nouvelle structure va écraser l'ancien?
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
9 juil. 2007 à 19:38
Salut,

Ah non, tout ce que tu met dans la structure TCITEM c'est valable pour chaque item, pas pour tout le tabcontrol.

Apres pour récuperer ton pointeur a partir d'un index d'un item tu peux utiliser TCM_GETITEM.
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
9 juil. 2007 à 19:46
Il faut donc creer une seule structure TCITEM pour tout le controle et non pas a chaque tab?

Comment gerer les index du control?
Pour l'instant j'utilise un variable global que j'incremente a chaque nouveaux tab et que j'affecte au nouvel index.
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
9 juil. 2007 à 20:09
OK, merci de tes réponsses je vais pouvoir partir en vacances tranquille =)
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
9 juil. 2007 à 20:15
Une derniere question:
Si j'ai par exemple 10tabs et que je ferme le 5eme, si j'en ouvre une autre TCM_GETITEMCOUNT me renverra 9 et je ne pourrais pa prendre cet index qui est deja attribuer, alors comment faire?
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
9 juil. 2007 à 20:24
Salut,

Les index vont toujours de 0 à itemcount - 1 (et c'est valable pour tout les controles).

Autrement dit si tu as 10 item, ils auront les index 0 a 9. Si tu
fermes le tab n°5,  tout les index des tabs apres 5 sont
décrementés, le tab d'index 6 devient celui d'index 5, le tab d'index 7
devient celui d'index 6, etc.

Un index n'est pas un identifiant permanent, il faut donc pas supposer
qu'il restera toujours associé au même item pendant toute la durée de
vie du tabcontrol.
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
9 juil. 2007 à 20:39
Existe t-il un evenment associé a la fermeture d'une tab?; car si les index se decrementes tt seul quand je vais vouloir recuperer le pointeur de l'index 7 je vais tomber sur celui du 6 il faut donc que je mette a jour les pointeurs?
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
9 juil. 2007 à 20:55
ok merci pour ces precisions, une derniere question qui n'as rien a voir est-ce que realloc efface le contenu du tableau apres l'avoir agrandi?
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
9 juil. 2007 à 21:00
non.

Prend un peu l'habitude de chercher dans la doc, tu aurais trouvé la reponse avant même d'avoir fini de taper ton post...
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
9 juil. 2007 à 21:02
ok merci.
0
Rejoignez-nous