begin process at 2012 05 29 09:12:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

Hwnd


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

Hwnd

lundi 30 mai 2005 à 15:01:33 | Hwnd

T_Mehdi

salut a tous .

bon j'ai realiser une fonction qui permet douvrir des fichier bmp et les affichier sur un hwnd preci.

le prob est que quand je reduit ou je cache la fenetre et je le reaffiche l'image ce supprime automatiquement de la fenetre.

CODE

     int Load_Bmp(HWND WinHandle,char* File);              
        struct BMP_INFO {
int height;
int width;
HBITMAP hbmp;
int bitperpixel;
};

BMP_INFO bmp_info;
HBITMAP bit;
BITMAP bitmap;
int Load_Bmp(HWND WinHandle,char* File)
{



bit= (HBITMAP) LoadImage(NULL,File, IMAGE_BITMAP,0,0, LR_DEFAULTSIZE|LR_LOADFROMFILE);
GetObject(bit, sizeof(BITMAP), &bitmap);

//Recupere les info
bmp_info.hbmp =bit;
bmp_info.height = bitmap.bmHeight;
bmp_info.width=bitmap.bmWidth;
bmp_info.bitperpixel = bitmap.bmBitsPixel;

int w;
int h;

   HDC hdc;
HDC bit_dc;

   hdc = GetDC( WinHandle );



bit_dc = CreateCompatibleDC(hdc);
SelectObject(bit_dc, bmp_info.hbmp);


for (h = 0;h <bmp_info.height;h++)
{    
 for (w = 0;w < bmp_info.width; w++)
 {              //Boucle pour avoir pixel par pixel de l'image
 
  SetPixel(hdc,w,h,GetPixel(bit_dc,w,h)); //Applique les nouvelle couleur
 
 
  if (w > bmp_info.width-1)  break;       //Pour ne pas dessiner meme les bordure;)
 }
 if (h > bmp_info.height-1)  break;         //Meme Chose
}

ReleaseDC( WinHandle, bit_dc );
ReleaseDC( WinHandle, hdc );
DeleteDC(bit_dc);
DeleteDC(hdc);


DeleteObject(bit);//Supprime l'obj

return 1;
}
lundi 30 mai 2005 à 15:34:26 | Re : Hwnd

vecchio56

Administrateur CodeS-SourceS
Réponse acceptée !
Bah oui tes SetPixel/GetPixel sont à faire dans le WM_PAINT de la fenêtre
Par contre, la méthode n'est pas bonne, tu devrais créer une HBITMAP, la sélectionner dans un DC mémoire (tu le fais une seule fois) puis dans WM_PAINT utiliser BitBlt, c'est beaucoup plus rapide.
PS: un DC obtenu avec getDC est détruit avec ReleaseDC et non DeleteDC

lundi 30 mai 2005 à 18:24:56 | Re : Hwnd

Tidam

ptdr xD
tu parles francais vecchio56 ???

lundi 30 mai 2005 à 19:24:04 | Re : Hwnd

vecchio56

Administrateur CodeS-SourceS
Oui je crois, pourquoi?
lundi 30 mai 2005 à 19:25:26 | Re : Hwnd

SnOOpss

En resumé ton code ne marche qu'une fois !!

Quand la fentre est reactualisé ton code n'est pas reexecuté
Il devrait etre dans le message WM_PAINT ( a chaque affichage ou reactualisation de ta fentre c le message a traiter)

Ensuite tu devrait plutot creer UN seul HBITMAP ( et une seule fois) dans WM_CREATE par exemple et c'est lui que tu reaaffiche dans le message WM_PAINT  pour ne pas avoir a tout refaire a chaque fois.

Tu as une raison particuliere pour utiliser setpixel plutot que BitBlt ???

lundi 30 mai 2005 à 19:33:29 | Re : Hwnd

SnOOpss

Un exemple
HBITMAP hbmp = (HBITMAP)LoadImage(0,"c://image.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
 
   case WM_PAINT:
        HDC hdc;
        hdc = GetWindowDC(hwnd);
        BITMAP bmp;
        GetObject(hbmp, sizeof(BITMAP), (LPSTR)&bmp);
        HDC hdcBmp;
        hdcBmp = CreateCompatibleDC(hdc);
        SelectObject(hdcBmp, hbmp);
        BitBlt(hdc,0,0, bmp.bmWidth,bmp.bmHeight, hdcBmp, 0,0, SRCCOPY);
        DeleteDC(hdc);
        DeleteDC(hdcBmp);
        }

Mais cet exemple n'est pas au top car WM_PAINT donne deja le bon HDC grace a
PAINTSTRUCT ps;
HDC hdc=BeginPaint(hwnd,&ps);

lundi 30 mai 2005 à 19:41:27 | Re : Hwnd

vecchio56

Administrateur CodeS-SourceS
SnOOpss> Oui, si tu ne veux pas utiliser BeginPaint, il faut au moins faire ValidateRect(hWnd, 0), sinon le message WM_PAINT va continuer à arriver sans arrêt.
Et puis LoadBitmap donne un HBITMAP, pas besoin d'appeler donc GetObject.
Et sutout, on libère hdc avec ReleaseDC!

lundi 30 mai 2005 à 20:57:13 | Re : Hwnd

T_Mehdi

Merci a vous tous :D
mardi 31 mai 2005 à 17:51:11 | Re : Hwnd

SnOOpss

oui vecchio56 en fait j'ai vu qu'il y avait pas mal d erreur moi meme en fait c'etait une de mes vielles sources que j'ai simplement copier/coller mais par contre le coup du ReleaseDC je crois que je fait encore l erreur et ca m'etonne que le prog ne plante pas au bout d un moment (surtout dans les boucles) si les DC ne sont jamais libérés!!


Cette discussion est classée dans : hdc, bmp, info, bitmap, bit


Répondre à ce message

Sujets en rapport avec ce message

copier un bloc de bit dans un bitmap [ par Adeon ] salut ! j'aimerai prendre un rectangle de bit d'un bitmap pour le mettre dans un nouvo bitmap.voila mon prog qui ne marche pa :je cree deux DC :HDC hd Modification de fichier BMP [ par titio ] Bonjour,Je souhaite afficher des images bmp, tout en ayant la possibilité de modifier ce fichier. Pour cela, je le charge en memoire, et souhaite donc pr d'objet GDI qui augmente, help [ par gege1024 ] CPaintDC hdc(this);HBITMAP bit;BITMAP bitmap;CRect rect;GetClientRect(&rect);  bit= (HBITMAP) LoadImage (NULL,fic_img_abs,IMAGE_BITMAP,0,0,LR_DEFAULTS chargement dynamique d'image (bitmap ?) [ par Gendal67 ] Bonsoir,J'aimerai savoir si une application peut charger autre chose qu'une image bmp comme une image jpg....genre comme :BMP BITMAP DISCARDABLE "lol. problème de chargement de bitmap [ par Batman60 ] bonjour y a pas moyen de charger des bitmaps avec  la fonction :gluBuild2DMipmaps(GL_TEXTURE_2D, 3, BMP.bmWidth, BMP.bmHeight,    GL_RGB, GL_UNSIGNED_ HDC d'une BITMAP ? [ par unrealgun ] Bonjour, depuis quelques jours je cherche comment obtenir le HDC d'une bitmap. je sais pas si c'est possible. J'ai essayé GetDC(hbmp) puis GetPixel po afficher data BMP dans HWND [ par supergrey ] Bonjour, dans mon programme j'ai récupérer les données d'une bitmap dans un tableau de char, j'ai modifier certaine valeur (edition bitmap) je voudrai redimenssion image avec hbitmap [ par glipper ] bonjour,j'ai reussi à charger une image depuis un fichier, et la faire apparaître dans un boutons (dans une dialogbox). J'ai donc procédé comme ceci : Bitmaps splitté qui s'affichent a l'envers [ par milhandril ] Je suis actuellement sur un projet dont une parti necessite un petit editeur de map en 2D. Je prend un bitmap que je "découpe" en Tile de 32*32 (en fa Probléme de compilation [ par makina0711 ] Bonjour a tous j'ai cette source pour ouvrire mon bmp mais a cette ligne il y a une ereure: DrawState(hdc,NULL,NULL,(long)hBmp,NULL,10,10,0,0,DST_BI


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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,983 sec (3)

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