Anzeige JPG im Dialog!

kalua25

Grünschnabel
Hallo ins Forum:

ich möchte ein jpg, welches ich in einem Dialog auswähle in einem Dialog sozusagen als Preview anzeigen.
Dazu habe ich ein Picture Control feld mit der Variablen m_Bild belegt.

In meiner Funktion onOpen wähle ich ein Bild aus udn speichere den Pfad in m_path. Soweit so gut. Nun will ich das Bild darstellen.
Das geht wohl in der Funktion OnPaint. Hier habe ich unter den Standartsachen

Code:
if(isIconic())
{
CPaintDC dc(this);
SendMessage(WM............

...
}
else
{

CDialog::OnPaint();
}

bei Else unter dem CDialog folgendes eingefügt:

Code:
CFile f;
    if (!f.Open(m_path,CFile::modeRead))
        cout << "kann nicht gelesen werden" << endl;
    else
    {
        CArchive ar (&f,CArchive::load|CArchive::bNoFlushOnDelete);
        CArchiveStream arStream (&ar);
        IStream* pIStr = &arStream;
        if (pIPic)
            pIPic->Release();
        HRESULT hr = OleLoadPicture(pIStr,0,FALSE,IID_IPicture,(LPVOID*) &pIPic);
       
    }f.Close();
   
CDC* theDC = m_Bild.GetDC();
HDC hDC = theDC->GetSafeHdc();
long hmWeite;
long hmHoehe;
CRect zeichenflaeche(0,0,0,0);
pIPic->get_Width(&hmWeite);
pIPic->get_Height(&hmHoehe);

m_Bild.GetClientRect(&zeichenflaeche);
pIPic->Render(hDC,zeichenflaeche.left,zeichenflaeche.top, zeichenflaeche.Width(), zeichenflaeche.Height(),0, hmHoehe,hmWeite,-hmHoehe,NULL);

Jetz folgendes:

1. Das bild wird verzerrt in der Picture Control dargestellt.
Wie kann ich das ändern , sodass die Größenverhältnisse des Bildes beibehalten bleiben?

2. das Bild wird beim ersten auswählen nur ca. 1 sek angezeigt -> es blinkt nur kurztz auf. Beim 2. auswählen funktioniert es dann fein.
Ne idee wo der Fehler liuegt?

Vielen Dank
 
Zurück