JPEG laden



  • Hallo,

    ich benutze die Klasse CPicture, die ich unter folgendem Link gefunden habe:
    http://www.c-plusplus.net/forum/viewtopic.php?t=54279&highlight=bildklasse+jpeg

    Bei Klick auf einen Button in einem nicht-modalen Dialogfeld, wird das Bild mit folgendem Code geladen:

    void CNewFPage3::OnLoadpicture() 
    {
    	CDC *dc = GetDC();
    
    	CString myFilter;
    	myFilter = "JPEG (*.jpg)|*.jpg|Bitmap (*.bmp;*.dib)|*.bmp; *.dib||";
    
    	CFileDialog myFileDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, myFilter, this );
    	myFileDlg.DoModal();
    
    	if( myFileDlg.GetPathName() != "" )
    	{
    		this->RedrawWindow();
    
    		m_pSet->m_strFoto = myFileDlg.GetPathName();
    		m_PicFoto.Load( m_pSet->m_strFoto );
    		m_PicFoto.UpdateSizeOnDC(dc); // Get Picture Dimentions In Pixels 
    		CRect myRect(40,25,280,180);
    		m_PicFoto.Show(dc, myRect);
    
    		UpdateData( FALSE );
    	}
    }
    

    Soweit funktioniert auch alles ganz prima.
    Sobald das Fenster jedoch nicht sichtbar und anschließend wieder mit folgendem Code sichtbar gemacht wird, wird das Bild nicht wieder angezeigt.

    void CNewFPage3::OnShowWindow(BOOL bShow, UINT nStatus) 
    {
    	CDialog::OnShowWindow(bShow, nStatus);
    	if( bShow == TRUE )
    	{
    		if( m_pSet->m_strFoto != "" )
    		{
    
    			CDC *dc = GetDC();
    			m_PicFoto.UpdateSizeOnDC(dc); // Get Picture Dimentions In Pixels 
    			m_PicFoto.Load( m_pSet->m_strFoto );
    			m_PicFoto.Show(dc, CPoint(40,10), CPoint(m_PicFoto.m_Width, m_PicFoto.m_Height), 0,0);
    		}
    
    	}
    }
    

    Kann mir jemand erklären, woran das liegt?

    Besten Dank,
    mira



  • Hi,
    versuche es mal so

    void CNewFPage3::OnShowWindow(BOOL bShow, UINT nStatus)  
    { 
        CDialog::OnShowWindow(bShow, nStatus); 
        if( bShow == TRUE ) 
        { 
            if( m_pSet->m_strFoto != "" ) 
            { 
    
                CDC *dc = GetDC(); 
                m_PicFoto.Load( m_pSet->m_strFoto );             
                m_PicFoto.UpdateSizeOnDC(dc); // Get Picture Dimentions In Pixels  
                m_PicFoto.Show(dc, CPoint(40,10), CPoint(m_PicFoto.m_Width, m_PicFoto.m_Height), 0,0); 
            } 
        } 
    }
    

    sollte so gehen.

    MFG
    Kai



  • Hallo Kai,

    danke für deine Antwort, aber so funktioniert's auch nicht.
    Mir ist mittlerweile auch noch aufgefallen, dass das Bild zwar erscheint, wenn ich auf den Button klicke, dass es aber wieder verschwunden ist, sobald ich ein anderes Programm auf meinem Rechner geöffnet hatte.
    Die Klasse CDC hab ich noch nicht wirklich durchschaut. Könnte es möglicherweise daran liegen, dass bei der Funktion "void CNewFPage3::OnShowWindow(BOOL bShow, UINT nStatus)" die Anzeige nachträglich noch überschrieben wird? (Die Rückgabewerte sind alle in Ordnung.)

    Grüsse,
    mira



  • Wer lesen kann ist klar im Vorteil kann ich nur zu mir sagen. Die sachen die du bei OnShowWindow geschrieben hast müssen in die OnPaint Methode und zwar hinter diese Zeile CDialog::OnPaint();

    BTW: Ich würde das Laden des Bildes in OnInitDialog verlagern, da das Bild sonst bei jedem Zeichnen geladen wird.

    MFG
    Kai



  • Super, danke! Jetzt funktioniert's.


Anmelden zum Antworten