Cum pot sa pun o imagine intr-un dialog?

Intrebari despre programarea cu VC++ incluzand mediul de dezvoltare, instalare, setari, debugger, compilator, linker si documentatie.
Post Reply
User avatar
Popa Alin
Membru
Membru
Posts: 52
Joined: 30 May 2008, 11:00
Judet: Timiş
Location: Timisoara

Cum pot sa pun o imagine intr-un dialog?

Post by Popa Alin » 01 Oct 2008, 15:05

Ciao,

O chestiune simpla ( la prima vedere, pentru mine). Vreau intr-un dialogBox sa pun o imagine sa zicem de 200X250 pixeli. Cu experienta din VB credeam ca o sa realizez rapid acest lucru, dar s-a dovedit ca VC++ nu e VB spre marea mea dezamagire.

Deci cred ca stiti deja care este intrebarea mea. "Cum pot sa fac asta in VC++? "

Mersic

O zi faina la toti.


Great minds disscuss ideas, average minds disscuss events, small minds disscuss people.

User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: Cum pot sa pun o imagine intr-un dialog?

Post by Marius Bancila » 01 Oct 2008, 15:25

Tocmai am in pregatire un articol pe tema asta, dar uite aici un fragment de cod:

Code: Select all

void CYourWindow::OnPaint() 
{
   CPaintDC dc(this); 

   CRect rc;
   GetClientRect(rc);

   // load the bitmap from the resources
   CBitmap bmp;
   bmp.LoadBitmap(IDB_MARIUS);

   // get information about the bitmap
   BITMAP tagbmp;
   bmp.GetBitmap(&tagbmp);

   // create a in-memory device context,
   // compatible with the painting device context
   CDC memDC;
   memDC.CreateCompatibleDC(&dc);

   // select the loaded bitmap into the in-memory device context
   CBitmap* oldbitmap = (CBitmap*)memDC.SelectObject(&bmp);

   //copy the bitmap from the in-memory DC to the painting DC
   dc.BitBlt(
      // position on the destination: center
      (rc.Width() - tagbmp.bmWidth)/2, (rc.Height() - tagbmp.bmHeight)/2, 
      // height of the bitmap to copy: same as loaded bitmap
      tagbmp.bmWidth, tagbmp.bmHeight,
      // source device context: in-memory DC
      &memDC,
      // position from the source: top-left corner
      0, 0,
      // raster operation to perform: direct copy
      SRCCOPY);

   // select the old rectangle back
   memDC.SelectObject(oldbitmap);
}    
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

Viorel
Microsoft MVP
Microsoft MVP
Posts: 292
Joined: 13 Jul 2007, 12:26

Re: Cum pot sa pun o imagine intr-un dialog?

Post by Viorel » 01 Oct 2008, 15:33

În cazul unui dialog MFC, inserează un control de tipul Picture Control, modifică proprietatea Type setînd-o Bitmap, iar în cîmpul Image selectează ID-ul resursei de tip bitmap, editată în prealabil.

User avatar
Popa Alin
Membru
Membru
Posts: 52
Joined: 30 May 2008, 11:00
Judet: Timiş
Location: Timisoara

Re: Cum pot sa pun o imagine intr-un dialog?

Post by Popa Alin » 01 Oct 2008, 16:03

Viorel wrote:În cazul unui dialog MFC, inserează un control de tipul Picture Control, modifică proprietatea Type setînd-o Bitmap, iar în cîmpul Image selectează ID-ul resursei de tip bitmap, editată în prealabil.
Astea le-am facut dar nu a mers :((

Probabil trebuie si ceva cod adaugat.

O sa vad ce a postat Marius poate o sa reusesc.

Mersic.
Great minds disscuss ideas, average minds disscuss events, small minds disscuss people.

User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: Cum pot sa pun o imagine intr-un dialog?

Post by Marius Bancila » 01 Oct 2008, 17:53

Evident, abordarea lui Viorel e mult mai simpla. Depinde ce vrei sa faci de fapt. Oricum, ce a zis el merge 100%. Daca nu a mers la tine, inseamna ca ai facut ceva diferit.
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

User avatar
Popa Alin
Membru
Membru
Posts: 52
Joined: 30 May 2008, 11:00
Judet: Timiş
Location: Timisoara

Re: Cum pot sa pun o imagine intr-un dialog?

Post by Popa Alin » 02 Oct 2008, 10:58

Marius Bancila wrote:Evident, abordarea lui Viorel e mult mai simpla. Depinde ce vrei sa faci de fapt. Oricum, ce a zis el merge 100%. Daca nu a mers la tine, inseamna ca ai facut ceva diferit.
Ciao,
Am incercat din nou azi si am facut 100% ce a zis Viorel. Insa din cate am observat se pare ca nu e ceea ce vroiam eu.
Din ce a zis Viorel eu inteleg ca trebuie editata o resursa bitmap in editorul din VC++ si ceea ce e acolo sa pun in PictureControlul meu. Insa eu vreau sa pun in acel control o poza deja existenta pe HDD(ex. o poza cu un caine, o poza *.jpg || *.bmp etc ).

Si deci in acest caz ce trebuie facut?

Mersic.

O zi excelenta.
Great minds disscuss ideas, average minds disscuss events, small minds disscuss people.

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: Cum pot sa pun o imagine intr-un dialog?

Post by Silviu Ardelean » 02 Oct 2008, 11:10

Pai atunci importi un fisier in resursele proiectului.
Din fereastra Resources View, right click pe tree-ul cu resurse, iar din meniu alegi Add Resource -> Bitmap. Apoi selectezi butonul Inport si iti incluzi fisierul dorit in proiect, iar apoi il folosesti cum ziceau colegii de breasla mai sus. ;)

Viorel
Microsoft MVP
Microsoft MVP
Posts: 292
Joined: 13 Jul 2007, 12:26

Re: Cum pot sa pun o imagine intr-un dialog?

Post by Viorel » 02 Oct 2008, 11:24

Dacă doreşti afişarea mai multor imagini încărcate din fişiere în timpul rulării programului, atunci foloseşte clasa CBitmap şi îndicaţiile de la http://www.codeguru.com/cpp/g-m/bitmap/ ... php/c1707/ pentru încărcarea imaginilor, apoi membrul SetBitmap al controlului.

User avatar
Popa Alin
Membru
Membru
Posts: 52
Joined: 30 May 2008, 11:00
Judet: Timiş
Location: Timisoara

Re: Cum pot sa pun o imagine intr-un dialog?

Post by Popa Alin » 02 Oct 2008, 15:48

Mersi fain tuturor.
Am reusit sa rezolv problema.

M-am chinuit un pic dar nu m-am lasat pana nu mi-am dat seama care e bug-ul. Eu vroiam sa import o poza cu o dimensiune intre 5-10KB si evident nu mergea desi era o poza de 130/130 pixeli. De ce? Nu stiu. Dar cel putin am inteles ca daca poza nu avea o dimensiune de cel putin 20,30 KB si poate fi tot de 130/130 pixeli, nu o putea importa.

Nu stiu si nu imi explic,deocamdata, de ce se intampla asta dar cel putin am inteles si o folosesc ca atare. Poate in viitor o sa descopar care e problema sau poate aveti voi o explicatie si ma lamuriti si pe mine.

Sau poate ar putea fi ( acum mi-a venit in minte ) o problema daca poza nu este bmp si este alt format, pentru ca eu nestiind cum sa maresc dimensiunea pastrand aceleasi dimensiuni 130/130, luam poza jpg si o salvam in format bmp. Deci daca stau sa ma gandesc cred ca asta e adevarata problema si nu depinde de dimensiunea fisierului. Tot ce trebuie facut este ca fisierul sa fie bmp desi la import iti arata "Files of type: *.bmp;*.dib;*.gif;*.jpg;*.jpe;*.jpeg" CRED :D

Daca aveti voi alta explicatie va rog impartasiti cu restul :D

Mersi fain.

O zi faina tuturor.
Great minds disscuss ideas, average minds disscuss events, small minds disscuss people.

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: Cum pot sa pun o imagine intr-un dialog?

Post by Silviu Ardelean » 05 Oct 2008, 21:59

Popa Alin wrote:M-am chinuit un pic dar nu m-am lasat pana nu mi-am dat seama care e bug-ul. Eu vroiam sa import o poza cu o dimensiune intre 5-10KB si evident nu mergea desi era o poza de 130/130 pixeli. De ce? Nu stiu. Dar cel putin am inteles ca daca poza nu avea o dimensiune de cel putin 20,30 KB si poate fi tot de 130/130 pixeli, nu o putea importa.
Presimt ca tu nu folosesti o solutie decenta de Visual C++ :D. Stiu ca si eu am avut astfel de probleme cu importul pe varianta Visual C++ 6.
Iti recomand o versiune mult mai matura si puternica, adica Visual C++ 2005 Pro.
Intr-o solutie de test, am reusit sa import si incarc fara nici o problema bitmap-uri de dimensiuni mult mai mari decat cele spuse de tine, cu adancimi de imaginie oferite de MS Paint (16 colors, 256 colors, 24 bits colors). Dar bine-inteles am folosit VC++ 2005 Pro. :yes:

User avatar
Popa Alin
Membru
Membru
Posts: 52
Joined: 30 May 2008, 11:00
Judet: Timiş
Location: Timisoara

Re: Cum pot sa pun o imagine intr-un dialog?

Post by Popa Alin » 16 Oct 2008, 16:19

Silviu Ardelean wrote:Intr-o solutie de test, am reusit sa import si incarc fara nici o problema bitmap-uri de dimensiuni mult mai mari decat cele spuse de tine, cu adancimi de imaginie oferite de MS Paint (16 colors, 256 colors, 24 bits colors). Dar bine-inteles am folosit VC++ 2005 Pro. :yes:

Mi-am dat seama ca nu dimensiunea fisierului era problema ci tipul lor. Adica eu incercam sa incarc fisiere .jpeg si mediul de programare nu le incarca, desi la filtre in dialogul ce aparea la incarcarea pozei era si .bmp, .jpeg, .jpg etc
Cand am incarcat poze de tip bitmap indiferent de marimea lor totul a fost ok.

Deci a fost o eroare omeneasca conditionata cumva de soft :P

Numai bine.
Great minds disscuss ideas, average minds disscuss events, small minds disscuss people.

Post Reply