Win Api en C :Un curseur trop lourd ? Pourquoi ?

Résolu
acryline Messages postés 33 Date d'inscription dimanche 14 mai 2006 Statut Membre Dernière intervention 16 décembre 2006 - 25 août 2006 à 07:55
acryline Messages postés 33 Date d'inscription dimanche 14 mai 2006 Statut Membre Dernière intervention 16 décembre 2006 - 25 août 2006 à 18:12
Bonjour,

    Je suis toujours dans ma petite application (voir un petit peu plus bas) et tout fonctionne bien, même quand je change de curseur. En général les curseurs que j'utilise font entre 1 et 7ko. Mais je viens de tester un curseur animé (ani) de 33 ko. Et là tout plante. Mon programme fonctionne un petit moment, et au fur et à mesure des sélections de boutons, menus, il se ralentit puis plante joyeusement....

Je pense à une surcharge de la mémoire c'est sûr, mais pourquoi avec ce surseur et pas avec les autres ?
Pour info, j'ai veillé à bien tout supprimer les HDC, HWND etc .. dont je n'avais plus besoin.
Votre avis ? Merci !

6 réponses

acryline Messages postés 33 Date d'inscription dimanche 14 mai 2006 Statut Membre Dernière intervention 16 décembre 2006
25 août 2006 à 16:07
J'ai trouvé ce qui ne marchait pas si ça interesse quelqu'un ?

J'ai un tableau de 70 boutons et comme j'avais modifié le curseur de l'application il fallait que je le fasse aussi de façon séparée pour les autres fénêtres donc pour les boutons et j'ai ecrit ceci :

        case WM_CHANGERCURSEUR:
        //Modifier le curseur.des boutons
       for (i=0;i<70;i++)
{
       SetClassLong(hBouton[i], //handle d'un bouton
                     GCL_HCURSOR,
                    (long int)LoadCursorFromFile (curseur));
}
        return 0;

Donc chaque fois qu'il fallait redessiner les boutons le programme passait sur la boucle... et c'etait fréquent !

J'ai essayé de ne définir que le bouton 0 et miracle ça marche le curseur s'affiche aussi sur tous les autres boutons.

ce qui donne :


     case WM_CHANGERCURSEUR:
        //Modifier le curseur.des boutons
        SetClassLong(hBouton[0], //handle d'un bouton
                     GCL_HCURSOR,
                    (long int)LoadCursorFromFile (curseur));
        return 0;


Je ne sais pas pourquoi mais ça marche !
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 août 2006 à 17:56
La classe BUTTON est unique donc normal qu'il en soit ainsi.

Faut aussi libérer la mémoire.
HCURSOR hAni;
....
if(hAni) {DestroyCursor(hAni); hAni = NULL;}
hAni = LoadCursorFromFile(curseur);
SetClassLong(hBouton[0], GCL_HCURSOR, (long) hAni);

ciao...
BruNews, MVP VC++
3
acryline Messages postés 33 Date d'inscription dimanche 14 mai 2006 Statut Membre Dernière intervention 16 décembre 2006
25 août 2006 à 08:24
Bon en fait ça me fait ça avec tous les curseurs mais avec les plus légers ça mets plus de temps...

Il doit y avoir une perte de mémoire qq part maizou ?? Le programme est très fluide au début et à force l'affichage prend de plus en plus de temps et au final ça plante.

Je viens d'utiliser Destroy curseur quand je change de curseur ce que je n'avais pas fait mais ça ne change rien .... si vous avez un conseil il est le bienvenu... sinon suite au prochain épisode je cherche la fuite !
0
acryline Messages postés 33 Date d'inscription dimanche 14 mai 2006 Statut Membre Dernière intervention 16 décembre 2006
25 août 2006 à 09:52
Bon j'ai mis les ZeroMemory partout ça n'a servit à rien...
J'ai regardé dans le gestionnaire des tâches de Windows.. Quand je démarre l'exécutable, il n'apparaît pas ans les appications mais dans les processus et la mémoire utilisée ne dépasse jamais 2200ko. (Le processeur monte à 40).
Mais toujours et encore si je clique plus de 40 fois sur un bouton, je perds ma souris (que pour l'application, heureusement ), la vitesse d'affichage augmente et enfin ça plante...
0

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

Posez votre question
acryline Messages postés 33 Date d'inscription dimanche 14 mai 2006 Statut Membre Dernière intervention 16 décembre 2006
25 août 2006 à 13:49
Bon voici mon code ici
Bon c'est pas joli comme ça devrait mais je 'nai pas envoyé les images. On peut mettre celles qu'on veut en fait mais il faut respecter les dossiers du début dans main.c et prendre les bonne extensions (cur, ani et bmp)
Voila si qq'un pouvait me répondre ça serait sympa.

Merci
0
acryline Messages postés 33 Date d'inscription dimanche 14 mai 2006 Statut Membre Dernière intervention 16 décembre 2006
25 août 2006 à 18:12
Oui mais on y pense pas tout de suite malheureusement .
0
Rejoignez-nous