Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Control tab, erreur etrange

4 réponses
Avatar
DarK
Bonjour =E0 tous,

J'explique mon probleme :

J'ai cr=E9e un tab principal qui contient deux autres tab. Un dispose
d'un controle static que j'utilise pas encore mais il est pr=E9sent dans
la fen=EAtre, et l'autre contient un control edit qui servira comme bar
de recherche et un control listBox pour afficher les r=E9sultats de la
recherche.

Pour d=E9tecter le changement d'onglet, j'intercepte le message
WM_NOTIFY, je copie les valeurs de lParam dans une structure NMHDR et
ensuite je sais quel onglets(tabs) a =E9t=E9 s=E9lectionn=E9 gr=E2ce =E0 la=
valeur
de la variable nmhdr->code.

Seulement voil=E0 quand je clique dans ma barre de recherche OU dans mon
listBox et qu'apr=E8s je change d'onglets dans mon tab principal une
erreur se produit du genre "Ce programme a effectue une op=E9ration non
conforme et doit s'arreter".

J'insiste bien sur le fait que ce soit le tab qui contient la barre de
recherche et le listBox qui est concern=E9 par l'erreur, quand je clique
sur l'autre tab (celui qui contient le control static) et qu'apres je
change d'onglet dans le tab principal il n'y a aucun probl=E8me
apparament.

Mais ce qui est =E9trange c'est que le debugger de codeBlocks me dit que
l'erreur se produit a la ligne ou je test ma variable nmhdr->code pour
savoir si le tab qui contient le control static a =E9t=E9 selectionn=E9,
alors que ce tab l=E0 ne cause aucune erreur..

Et j'ai remarqu=E9 qu'en recopiant la valeur de lParam dans la structure
nmhdr il ny a plus aucune erreur..

Si quelqun pouvait me renseigner la dessus ... Merci

4 réponses

Avatar
alain
DarK wrote:
Bonjour à tous,

J'explique mon probleme :

J'ai crée un tab principal qui contient deux autres tab. Un dispose
d'un controle static que j'utilise pas encore mais il est présent dans
la fenêtre, et l'autre contient un control edit qui servira comme bar
de recherche et un control listBox pour afficher les résultats de la
recherche.

Pour détecter le changement d'onglet, j'intercepte le message
WM_NOTIFY, je copie les valeurs de lParam dans une structure NMHDR et
ensuite je sais quel onglets(tabs) a été sélectionné grâce à la valeur
de la variable nmhdr->code.



Tu "copies" ?
Normalement tu dois juste caster sur NMHDR*
et ensuite détecter TCN_SELCHANGE
Avatar
DarK
On 28 jan, 18:58, alain wrote:
DarK wrote:
> Bonjour à tous,

> J'explique mon probleme :

> J'ai crée un tab principal qui contient deux autres tab. Un dispose
> d'un controle static que j'utilise pas encore mais il est présent dan s
> la fenêtre, et l'autre contient un control edit qui servira comme bar
> de recherche et un control listBox pour afficher les résultats de la
> recherche.

> Pour détecter le changement d'onglet, j'intercepte le message
> WM_NOTIFY, je copie les valeurs de lParam dans une structure NMHDR et
> ensuite je sais quel onglets(tabs) a été sélectionné grâce à la valeur
> de la variable nmhdr->code.

Tu "copies" ?
Normalement tu dois juste caster sur NMHDR*
et ensuite détecter TCN_SELCHANGE



Quand je dis je copie, je fais :
nmhdr = (LPNMHDR)lParam

Et ensuite pour tester je fais :
if(nmhdr->code == tabX)

Est ce comme ça ?
Avatar
alain
DarK wrote:

Quand je dis je copie, je fais :
nmhdr = (LPNMHDR)lParam

Et ensuite pour tester je fais :
if(nmhdr->code == tabX)

Est ce comme ça ?



Oui, ça c'est bon.
Il doit y avoir un truc non initialisé ou un dépassement mémoire ailleurs..
Avatar
DarK
On 28 jan, 19:54, alain wrote:
DarK wrote:
> Quand je dis je copie, je fais :
> nmhdr = (LPNMHDR)lParam

> Et ensuite pour tester je fais :
> if(nmhdr->code == tabX)

> Est ce comme ça ?

Oui, ça c'est bon.
Il doit y avoir un truc non initialisé ou un dépassement mémoire ai lleurs..



Enfaite quand je remet nmhdr = (LPNMHDR) lParam avant chaque test il
n'y a pas de problème.

Mais j'aurais bien aimé comprendre pourquoi, enfin bon merci quand
même :)