begin process at 2010 02 10 01:22:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

[api] Image qui s'efface


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[api] Image qui s'efface

samedi 5 novembre 2005 à 19:55:45 | [api] Image qui s'efface

hoGan

Bonjour, voilà ce que je voudrais faire:
lorsque j'appuie sur un bouton, faire apparaître une image, et faire en sorte que celle-ci ne disparaisse pas dès que j'abaisse la fenêtre ! Est-ce que je me fais bien comprendre? :P

Alors, je sais que  l'image ne disparaît pas si on l'affiche quand on reçoit le message WM_PAINT, mais je ne vois pas comment coupler WM_PAINT et WM_COMMAND (rappelez-vous, je veux cliquer sur un bouton avant)

Une recherche sur ce forum m'a indiqué ceci, un message de "BruNews" qui date de deux ans, mais c'est du charabia total ^^ :
" avant creation et affichage du dialoxbox, tu copies l'image dans un memDC et c'est dedans que tu crees l'image resultante. Traite affichage de fenetre par un simple BitBlt depuis memDC vers DC de fenetre, sera hyper rapide."
Qui peut traduire?

Merci

dimanche 6 novembre 2005 à 00:27:13 | Re : [api] Image qui s'efface

chris91

salut, traduction : c'est la technique du back buffer

quand une zone non visible est de nouveau visible, un message WM_PAINT est envoyé pour redessiner cette zone.

deux choix :

1- toutes les opérations dans WM_PAINT et si c'est long, l'affichage est pas top

2- création et dessin d'un back buffer, qui est un DC mémoire, en dehors du message WM_PAINT et WM_PAINT intégre uniquement un BitBlt du DCmem vers DC

pour l'histoire de l'image et du bouton, back buffer ou pas, c'est une variable BOOL qu'il faut, soit static dans WndProc, soit globale

static BOOL bButton;

avec WM_COMMAND : si bButton égal TRUE, bButton = FALSE
                  sinon bButton = TRUE
                  on met à jour l'affichage

avec WM_PAINT : si bButton égal TRUE création d'un DCmem pour copie du bmp ou
                BitBlt d'un DCmem éxistant vers DC si technique back buffer

pour le back buffer, un peu de code ici :
http://www.cppfrance.com/forum.v2.aspx?ID=592514
et mon source :
http://www.cppfrance.com/code.aspx?ID=34308
bye.
dimanche 6 novembre 2005 à 13:07:51 | Re : [api] Image qui s'efface

hoGan

Salut
est-ce que tu pourrais un peu détailler l'utilisation des hdc, hdcMem? Juste expliquer le principe en français, pas forcément refaire tout le code.
Parce que j'ai été voir les liens indiqués et ai essayé de les adapter à ce que je voulais faire, sans résultat :::

dimanche 6 novembre 2005 à 18:39:46 | Re : [api] Image qui s'efface

chris91

salut,
c'est plus un problème de bmp et de bouton ça...

DC = Device Context

définition traduite de MSDN:
"Un contexte de périphérique est une structure qui définit un jeu d'objets graphiques et leurs attributs associés".

si on souhaite dessiner un bmp sur la fenêtre de l'application:
1- on obtiens un handle du DC de la fenêtre de l'application
2- on obtiens un handle de DC compatible avec le DC précédent
3- on sélectionne l'objet BITMAP dans le DC compatible
4- BitBlt entre le DC compatible et le DC de la fenêtre de l'application
5- destruction de l'objet BITMAP et fermeture des DCs

dans le technique du back buffer, on commence de la même manière, sauf que l'on ne fais pas de BitBlt et on ferme uniquement le DC de la fenêtre de l'application.

donc il nous reste un DC avec un bmp sélectionné... c'est notre DCmem, notre back buffer, et il est possible d'en avoir plusieurs.

ensuite, dans WM_PAINT avec BeginPaint on obtiens un handle (hDc) du DC de la fenêtre de l'application, donc forcément compatible avec notre ou nos DCmems.

1- si l'application a une image de fond, BitBlt du hDcBackPicture vers hDc,
2- si bButton est TRUE BitBlt du hDcBmp vers hDc
   si hButton est FALSE, il y aura seulement un BitBlt de l'image de fond (si image de fond il y a)

chapitre 5 : The Device Context
chapitre 14 : Bitmaps and Bitblts
et tout le reste !!
CP5 & CP5sources
http://brunews.free.fr/brunews/index.htm
bye.
lundi 7 novembre 2005 à 01:22:01 | Re : [api] Image qui s'efface

chris91

mince, évidemment c'est "on obtient", au départ c'était "tu obtiens"...bref...
lundi 7 novembre 2005 à 20:09:49 | Re : [api] Image qui s'efface

hoGan

Salut Chris, merci beaucoup de t'intéresser à mon cas
Alors j'ai effectivement maintenant un problème de bouton, bien que je pense voir où tu veux en venir avec ton histoire de bool:
- créer une variable globale booléenne bButton, qui servira de "marqueur"
- lorsqu'on reçoit WM_COMMAND(c'est-à-dire lorsqu'on clique sur le bouton), traiter l'état de bButton (TRUE ou FALSE - c'est ici que je coince, je vais y venir plus loin)
- dans le WM_PAINT, faire:             
            if(bButton == TRUE)  //le bouton est cliqué
             {
             BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight,
             hdcMem, 0, 0, MERGECOPY);
             }
Bon, j'espère ne pas déjà me tromper jusqu'ici (dis-le moi si c'est le cas)...mais je n'arrive pas à comprendre comment traiter bButton...
tu avais écrit:
"avec WM_COMMAND : si bButton égal TRUE, bButton = FALSE
                  sinon bButton = TRUE"
alors si je retranscris :
                   case WM_COMMAND:
                   //...
                    case ID_BOUTON:  //le bouton en question
                       if(bButton == TRUE)
                       {
                             bButton = FALSE;
                       }
                       else
                       {
                           bButton = TRUE;        
                      }         
Pour moi, ça ne rime à rien ...
Merci d'éclairer ma lanterne
mardi 8 novembre 2005 à 01:39:06 | Re : [api] Image qui s'efface

chris91

Réponse acceptée !
salut,

donc on change l'état de bButton à chaque WM_COMMAND, puis on met à jour l'affichage avec InvalidateRect...

case WM_COMMAND:

  case ID_BOUTON:
    if(bButton) bButton = FALSE;  // if(bButoon == TRUE)
    else bButton = TRUE;

    // TRUE ou FALSE, on met à jour l'affichage
    InvalidateRect(hwnd, NULL, FALSE);  // WM_PAINT dans la file des messages
    
    // break; si autre case

  return 0;  // pour WM_COMMAND

un BitBlt avec MERGECOPY fait un AND entre la couleur source de chaque pixel et le brush sélectionné dans le DC destination, pour une copie c'est SRCCOPY
bye.
mardi 8 novembre 2005 à 19:54:36 | Re : [api] Image qui s'efface

hoGan

ah yeah :)
J'avais oublié de mettre à jour l'affichage avec invalidaterect, c'était ça mon problème !
Merci à toi Chris, c'est vraiment super sympa =)


mardi 22 novembre 2005 à 22:05:22 | Re : [api] Image qui s'efface

hoGan

Re-bonjour :)
j'ai un nouveau problème avec des disparitions d'images :^p
Lorsque j'affiche l'une à la suite de l'autre des images dans une fenêtre, que j'abaisse puis remonte celle-ci, toutes les images ont disparu sauf la dernière !
J'ai utilisé la méthode d'affichage décrite plus haut (back buffer)

merci



Cette discussion est classée dans : bouton, image, wm, api, efface


Répondre à ce message

Sujets en rapport avec ce message

Image sur bouton (API win32) [ par LordBob ] Bonjour a tous,voila j'essaie de mettre une image sur un bouton de mon dialog, je procede donc comme ceci:HANDLE hImage;...hImage = LoadImage(hInst, " Affichage d'image [ par elinep ] Bonjour tout le monde!Voila mon probleme:Je me met a la programmation de l'API win32. J'essaye de faire un petit prog qui charge une image .bmp depuis image dans bouton ?? [ par yohann2004 ] Salut, Comment peut-on faire pour afficher une image sur un Bouton avec MFC ??? Merci  <span style="font-weight: bold; text-decorat image dans bouton ?? [ par yohann2004 ] Toujours le meme probleme !! J'ai regardé l'exemple du site, les conseils que l'on m'a donné mais ca marche pas !! Voici mon code : CBitmap picture redessiner un bouton après appui [ par tdeco ] SalutEn fait j'ai une boite de dialogue où j'ai plusieurs boutons. Sur j'appui d'un bouton, je modifie une variable, puis j'envoie un message WM_DRAWI Bouton + Icône ... comment ? - API Windows [ par banane_rose ] bon bah voilà tout est dans le titre , j'ai mon image prête ( "Quit.bmp" 16x16 ) CODE COMPLET ICI je veux ajouter l'icône sur Quitter image / bouton / MFC [ par yohann2004 ] Bonjour, Malgrés tous les exemples je n'arrive toujours pas à afficher une image dans un bouton !! L'image est un Bitmap et je l'ai inséré dans le pro [API | C++] Affichage pointeur BMP [ par keenrather ] Bonjour c'est encore moi,Cette fois j'ai un problème avec l'affichage d'une image BMP dans une fenêtre. Je suis toujours en API Windows sous Visual C+ Affichage d'une image sur un bouton [ par aztcaLISS ] Salut, je veux faire apparaître une image sur mon bouton hBtn1 que je crer sur ma fenêtre mais ça ne fonctionne pas. J'ai vu dans des examples de code Afficher une image dans une application Win-api avec Dev-cpp [ par by_rabbit_08 ] Bonjour! J'aurais voulu savoir si quelqu'uns pouvait m'aider pour afficher simplement une image dans une application Win-api avec Dev-cpp. Serait-il p


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales