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_FILE
    

    Hab 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.zip

    musst 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 😃



  • @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 😕


Anmelden zum Antworten