IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Rafraichissement de l'ecran ?


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 68
    Points : 56
    Points
    56
    Par défaut Rafraichissement de l'ecran ?
    Bonsoir
    Alors j'ai créé une dll pour mon programme qui affiche une image a l'ecran :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    EXPORT int APIENTRY_WinMain_bmp(char *filename, double Coordx, double Coordy)
    {
    HDC DeskTopDC = GetDC(HWND_DESKTOP);
    HBITMAP hBmp;
    hBmp=(HBITMAP)LoadImage (NULL,filename,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);    
    DrawState(DeskTopDC,NULL,NULL,(LPARAM)hBmp,0,Coordx,Coordy,600,600,DST_BITMAP); 
    DeleteObject(hBmp);
    }
    Mais quand je fait bouger l'image, ça gomme l'ecran en dessous.
    Y aurrait moyen de m'aider à faire un truc qui me permettrait de faire bouger l'image proprement svp ?
    Grand merci a vous
    Et si vous voulez voir les degats par vous meme :
    http://www.g-flash.gmzone.fr/GM%20ex...utside_dll.zip
    (lancez le .exe)

    Merci pour tte aide
    ++

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Pour commencer, il manque un ReleaseDC().

    Ensuite, tu devrais donner un autre nom à ta fonction, et prendre un LPCTSTR en paramètre au lieu d'un char* (ou au minimum, un const char *)

    Ensuite, si tu veux déplacer convenablement l'image, je pense que tu dois faire redessiner le deskop. Essaie avec un truc du genre:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    HWND hDeskWnd = GetDesktopWindow();
    InvalidateRect(hDeskWnd, NULL, FALSE);
    UpdateWindow(hDeskWnd);
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 68
    Points : 56
    Points
    56
    Par défaut
    Coucou
    Merci bien pour ces infos qui m'ont permis de mieu comprendre 2 ou 3 trucs déja

    Par contre, j'ai essayé de modifier ma fonction, et le fait de rafraichir tout l'ecran a chaque fois fait un truc pas tres joli du tout...

    Je vous laisse essayer l'exe pour voir le probleme :
    http://s154254984.onlinehome.fr/temp/Ext_Text_dll.zip

    Ma fonction est donc devenue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    EXPORT int draw_bmp(const char *filename, double Coordx, double Coordy)
    {
    HDC DeskTopDC = GetDC(HWND_DESKTOP);
    HBITMAP hBmp;
    
    hBmp=(HBITMAP)LoadImage (NULL,filename,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);    
    DrawState(DeskTopDC,NULL,NULL,(LPARAM)hBmp,0,Coordx,Coordy,600,600,DST_BITMAP); 
    DeleteObject(hBmp);
    ReleaseDC(HWND_DESKTOP,DeskTopDC);
    
    InvalidateRect(HWND_DESKTOP, NULL, FALSE);
    UpdateWindow(HWND_DESKTOP);
    }
    (Ben je suis debutant dc j'espere avoir changé correctement les modifs que tu m'a suggéré)

    Si vous savez comment je pourrais faire un truc un peu + propre, ce serait super sympa
    Merci bcp en tout cas, votre aide est super !
    Merci.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    HWND_DESKTOP ne marche que pour CreateWindow(), car c'est un bête #define sur NULL.
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /*
     * Special value for CreateWindow, et al.
     */
    #define HWND_DESKTOP        ((HWND)0)
    Donc, tu DOIS utiliser GetDesktopWindow() à la place, sinon, InvalidateRect() va rafraichir tout l'écran.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 68
    Points : 56
    Points
    56
    Par défaut
    Arf...
    J'ai vraiment du mal a trouver... Dslé d'insister encor...
    J'ai essayé de rajouter ce que tu m'a dit, mais l'effet désiré n'est jamais atteint...
    J'ai tenté divers trucs, sans succes non plus...

    Voici ma derniere tentative qui a mon avis doit etre la + proche du but :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    EXPORT int draw_bmp(const char *filename, double Coordx, double Coordy)
    {
    HWND hDeskWnd = GetDesktopWindow();
    HDC DeskTopDC = GetWindowDC(hDeskWnd);
    
    HBITMAP hBmp;
    hBmp=(HBITMAP)LoadImage (NULL,filename,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);    
    DrawState(DeskTopDC,NULL,NULL,(LPARAM)hBmp,0,Coordx,Coordy,600,600,DST_BITMAP); 
    DeleteObject(hBmp);
    
    ReleaseDC(hDeskWnd,DeskTopDC);
    InvalidateRect(hDeskWnd, 0, 0);
    UpdateWindow(hDeskWnd);
    }
    Mais avec ça, l'effet de gommage comme je l'expliquai dans les 1er messages est encor là... l'image laisse une trainée derriere elle...
    Je pense que la fin est proche... Un dernier p'tit coup de pouce pour me dire ce qui est incorrect dans mon code serait super top sympa.
    Encor merci pour tout...

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Essaie de redessiner le desktop AVANT de dessiner l'image par-dessus...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [C#] Rafraichissement ecran
    Par heavydrinker dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/09/2006, 11h59
  2. SDL_Surface et rafraichissement de l'ecran
    Par red210 dans le forum SDL
    Réponses: 2
    Dernier message: 23/05/2006, 09h34
  3. Rafraichissement d'ecran
    Par lanageuse56 dans le forum C
    Réponses: 2
    Dernier message: 03/04/2006, 11h45
  4. [c#] rafraichissement ecran
    Par albedo dans le forum C#
    Réponses: 3
    Dernier message: 08/11/2005, 09h53
  5. [TP]Optimiser le rafraîchissement de l'écran en mode texte?
    Par Ponytear dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 15/02/2004, 11h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo