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

Résolu
Messages postés
33
Date d'inscription
dimanche 14 mai 2006
Statut
Membre
Dernière intervention
16 décembre 2006
-
Messages postés
33
Date d'inscription
dimanche 14 mai 2006
Statut
Membre
Dernière intervention
16 décembre 2006
-
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

Messages postés
33
Date d'inscription
dimanche 14 mai 2006
Statut
Membre
Dernière intervention
16 décembre 2006

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 !
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
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++
Messages postés
33
Date d'inscription
dimanche 14 mai 2006
Statut
Membre
Dernière intervention
16 décembre 2006

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 !
Messages postés
33
Date d'inscription
dimanche 14 mai 2006
Statut
Membre
Dernière intervention
16 décembre 2006

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...
Messages postés
33
Date d'inscription
dimanche 14 mai 2006
Statut
Membre
Dernière intervention
16 décembre 2006

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
Messages postés
33
Date d'inscription
dimanche 14 mai 2006
Statut
Membre
Dernière intervention
16 décembre 2006

Oui mais on y pense pas tout de suite malheureusement .