Frage zu: C/C++ Forum :: FAQ - MFC :: Bildklasse für JPG u.s.w.
-
Hi,
bin bei der suche nach ner möglichkeit JPG´s dazustellen hier auf diesen Beitrag in den FAQ gestoßen ( http://www.c-plusplus.net/forum/viewtopic.php?t=54279&highlight=cpicture ) Wie immer sah das Ergebniss bei mir so aus
.Meine Fragen:
1.//----------------------------Cut The Bullshit Here---------------------------- #include "stdafx.h" #include "ipicture.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILEHab ich es richtig verstanden, dass ich eine neue Klasse erstellen soll die "ipicture" heißt und in deren Header-Datei und in deren cpp-Datei der Quellcode eingefügt werden soll?

2. CPicture <---- darüber bin ich auch immer gestolpert. In der MSDN hab ich dazu nix gefunden. Nur das CPictureHolder
. Kann mir einer in kurzen Worten was dazu sagen?Erstmal danke im vorraus für eure Hilfeoder Tips wo ich mal ne genaue Erklärung dazu finde

mfg
blub
-
hier der link:
http://www.gadworks.com/SuperMain/Files/Products/PictureShow/CPicture_v100.zipmusst nur den dateinamen im
#inludeändern.
-
thx alex-t

-
Hallo blub,
ich habe diese Klasse selber vor ein paar Tagen ausprobiert und hatte das gleiche "ipicture"-Problem wie du. Der Autor der Klasse hat noch einen Viewer geschrieben, den man auf codeguru.com downloaden kann. Diesen hatte ich mir auch geholt und dann die includes verglichen. Dabei habe ich festgestellt, dass es nicht ipicture.h heißt, sondern die Headerdatei der Klasse CPicture also picture.h gemeint ist. Änders du das, müsste alles funktionieren.
Turbobrain
-
vergleiche mit meinem beitrag.
ausserdem, ist alles unter:
http://www.gadworks.com/SuperMain/
zu erreichen...
-
Hi ich bins wieder
,also folgendes Problem besteht:
Ich hab ja die CPicture von diesem Dr., nun will ich mit
m_Bilderlist.Load("Bilder/c.jpg");ein Bild einladen.
Das Bild hab ich auch laut Debugger drin.Wenn ich es nun mit
m_Bilderlist.Show();anzeigen lassen will kommt das vom Compiler:
error C2661: 'Show' : Keine ueberladene Funktion akzeptiert 0 Parameter
Fehler beim Ausführen von cl.exe.,wenn ich m_Bilderlist.Show(0,0); mache zeigt er mir zumindest keine Fehler mehr an, aber sehen kann ich das Teil trotzdem noch nicht. Ich muß dazusagen das ich das Bild in einem Listenfeld anzeigen lassen will.
Wer kennt sich mit der CPicture-Klasse aus und kann mir sagen wie ich das richtig machen muß

mfg blub

-
Hallo Blub,
ich habe es mit der Anleitung am Anfang des Quellcodes hinbekommen. Bei meiner Dialogfeld basierenden Anwendung, habe ich einen Button erzeugt, wenn man auf den klickt erscheint ein Öffnendialog. Diesen Rückgabewert habe ich dann
m_Picture.Load("Test.JPG"); übergeben. Danach habe ich mir einen DC geholt mit CPaintDC dc(this); . Dann hab ich noch diese beiden Zeilen eingefügt:m_Picture.UpdateSizeOnDC(&dc); // Get Picture Dimentions In Pixels
m_Picture.Show(&dc, CPoint(0,0), CPoint(m_Picture.m_Width,m_Picture.m_Height), 0,0);Danach wurde das Bild dann angezeigt.
Turbobrain
P.S. Ein weiteres tolles Projekt zum Thema Bild/Bildbearbeitung ist unter www.codeproject.com das Programm CxImage.
-
Bild als Hintergrund:
Header:
CPicture m_Picture;
Cpp:
In der OnInitDialog
m_Picture.Load(IDR_JPEG1,"JPEG"); CRect rect,rectw; GetClientRect(&rect); GetWindowRect(&rectw); MoveWindow(rect.Width(),rect.Height(),m_Picture.m_Width,m_Picture.m_Height+(rectw.Height() - rect.Height()));void CTestDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // Gerätekontext für Zeichnen m_Picture.UpdateSizeOnDC(&dc); // Get Picture Dimentions In Pixels m_Picture.Show(&dc, CPoint(0,0), CPoint(m_Picture.m_Width, m_Picture.m_Height), 0,0); SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Symbol in Client-Rechteck zentrieren int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Symbol zeichnen dc.DrawIcon(x, y, m_hIcon); } else { CPaintDC dc(this); // Gerätekontext für Zeichnen m_Picture.UpdateSizeOnDC(&dc); // Get Picture Dimentions In Pixels m_Picture.Show(&dc, CPoint(0,0), CPoint(m_Picture.m_Width, m_Picture.m_Height), 0,0); CDialog::OnPaint(); } }Jetzt sollte sich der Dialog auf die Größe des Bildes ändern und als Hintergrund angezeigt werden.
-
@ turbobrain:
legst du dein Bild einfach in den Dialog oder in einen Bildcontainer (VC++ heißt das teil nur Bild
)? Hab das jetzt getestet und hab wenigstens das Problem nicht mehr mit dem dc Wie gesagt das Bild ist geladen, aber der Scherzkeks gibt es nicht aus 
mfg nexnic
