MFC Neuling sucht Hilfe



  • Hallo ich habe folgendes Problem:

    Ich will einen Viewer schreiben der vorm Start einen Pfad übergeben bekommt und mir dann das gewünschte Bild anzeigt welches ich als Parameter übergeben habe. Doch hab ich noch nie etwas in MFC gemacht ich bin froh das ich gerade mal weiss wo diester Post hin gehört. Kann mir jemand irgendetwas empfehlen wo ich das was ich oben beschrieben habe mir so etwas aehnliches mal anschauen kann als vorlage oder so?

    mfg Manny



  • Wenn du Englisch kannst: www.codeproject.com

    Ansonsten gibt es alles weit verstreut hier im Forum.

    Hmm, ich weiß gerade nicht, ob da auch was mit Bildern anzeigen war - die Seite ist aber für Anfänger prima: http://www.henkessoft.de/



  • Vielleicht hilft ja auch dieser Beitrag aus den FAQ:
    http://www.c-plusplus.net/forum/viewtopic.php?t=39074



  • isabeau schrieb:

    Vielleicht hilft ja auch dieser Beitrag aus den FAQ:
    http://www.c-plusplus.net/forum/viewtopic.php?t=39074

    Hmm der Tip scheint ja sicher gut zu sein doch verstehe ich in keinster weise was dort drin steht weil dort nichmal ein einziger komentar drin vorhanden ist kann mir vielleicht jemand dabei helfen den Code zu verstehen? also an welcher stelle greift er dort auf das Dialogfeld zu usw.?



  • Das geht z.B. so:
    - ein neues Projekt im Visual Studio anlegen (dialogbasiert). Wenn du das Projekt z.B. "Viewer" nennst, wird u.a. die Klasse CViewerDlg erzeugt (ich nenne die im folgenden mal so). Die gehört zu dem Dialog, der jetzt schon im Recourceneditor zu sehen ist.
    - in der Headerdatei von CViewerDlg vor der Zeile

    class CViewerDlg : public CDialog
    

    das hier einfügen:

    #include "afxctl.h"
    

    - weiter unten unter der Zeile

    protected:
    

    das hier einfügen:

    IPicture *m_bild;
    

    - im Arbeitsbereich einen Klick mit der rechten Maustaste auf die Klasse CViewerDlg -> Memberfunktion hinzufügen -> Funktionstyp: void, Funktionsdeklaration: DrawBild(IPicture *bild)
    Die Funktion wird daraufhin vom Assistenten hinzugefügt.
    - den Code aus der Funktion DrawBild(IPicture *bild) aus den FAQ da rein kopieren und die Variablen x, y, size_x und size_y der Einfachheit halber erstmal durch feste Zahlenwerte ersetzen. Die Funktion sieht dann so aus:

    void CViewerDlg::DrawBild(IPicture *bild)
    {
       CClientDC dc(this); 
    
       CRect rc; 
       GetClientRect(&rc); 
    
       OLE_XSIZE_HIMETRIC width; 
       OLE_YSIZE_HIMETRIC height; 
    
       bild->get_Width(&width); 
       bild->get_Height(&height); 
    
       bild->Render(dc, 10, 10, 300, 300, 0, height, width, -height, &rc); 
    }
    

    Die zeichnet sozusagen das Bild in dem angegebenen Bereich auf den Dialog.
    - in der Funktion OnPaint() (ist bereits in der Klasse CViewerDlg enthalten und zeichnet das Dialogfenster) ganz am Schluss die Zeilen

    OleLoadPicturePath(L"Pfad_zur_Datei", 0, 0, 0, IID_IPicture,(void **)&m_bild); // läd das Bild
    DrawBild(m_bild); // ruft die Funktion zum Zeichnen des Bildes mit dem geladenen Bild auf
    

    einfügen und "Pfad_zur_Datei" ersetzen durch einen gültigen Pfad zu einem Bild, z.B. "C:\\Bilder\\Horror\\Zerfetzte\\Madenbefallen\\blutig\\Gedaerm.jpg"
    (der Einfachheit halber wieder ersteinmal fest vorgegeben).

    Fertig.

    Das Bild ist in diesem Fall allerding immer quadratisch. Das liegt an den festen Werten von x, y, size_x und size_y (siehe oben). Änder die mal ein bischen und guck, was passiert.

    Verstanden hast du den Code so bestimmt auch noch nicht, aber vielleicht hilft es ja trotzdem ein bischen weiter...



  • So ein Super riesen dank an dich doch den Code habe ich nun auch verstanden und auch hab ich recht viel von MFC bei deiner erklärung und noch einigen Hilfe dateien verstanden. Also ich denke mal durch die erklärung komme ich nun wesentlich besser zurecht.

    ein glücklicher Manny 😃 😃 😃 😃

    [EDIT]
    oder auch nicht denn da kommt mal wieder ein fehler den ich absolut nicht verstehe:
    ViewerDlg.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__OleLoadPicturePath@24

    kann mir einer sagen was das heissen soll?



  • JUHU
    Es geht also danke an alle für die Hilfe der letzte Fehler den ich beschrieben habe lag daran das mein Compiler veraltet war und der nicht mit der

    OleLoadPicturePath
    

    Funktion zurecht kam. Einen riesen dank an alle die mir so super geholfen haben.

    mfg Manny


Anmelden zum Antworten