Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Ordner durchsuchen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.07.2004, 19:05 Uhr
t10ottoo



Hi,

hab da mal wieder nen kleines Problem.

Also hier erstmal der Code:

C++:
    CFileFind find_file;

    CString szFilename = combo_text + ".bmp";

    if (find_file.FindFile(szFilename,0) != 0)
    {
        find_file.Close();
        HBITMAP hBmp = (HBITMAP)::LoadImage(NULL,szFilename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);

        CBitmap pic;
        
        BITMAP bild_header;
        pic.GetBitmap(&bild_header);
    
        CWnd* wp = GetDlgItem(IDC_BILD);

        CDC *pDC = wp->GetDC();
        CDC imageDC;
    
        imageDC.CreateCompatibleDC(pDC);
        imageDC.SelectObject( &pic);

        int x_anfang = (205/2)-((bild_header.bmWidth/(bild_header.bmHeight/150)-10)/2);
        int bild_width = (bild_header.bmWidth/(bild_header.bmHeight/150))-10;

        pDC->StretchBlt(x_anfang,0,bild_width,205,&imageDC,0,0,bild_header.bmWidth, bild_header.bmHeight,SRCCOPY);
        
        imageDC.DeleteDC();
        wp->ReleaseDC(pDC);
    }
    else
    { // else
        MessageBox("Bild nicht gefunden","Fehler",MB_OK);
    } // else


combo_text ist die Variable, wo dann der String drinne steht, der über eine ComboBox ausgewähl wurde. Nun soll er den Ordner durchsuchen, ob er das dazugehörige Bild hat.
Wenn er es findet, soll er es anzeigen, wenn nicht, soll ne entsprechende Meldung kommen.
Wenn er die Datei nicht findet, kommt die Meldung, das funktioniert ja, aber wenn er das Bild gefunden hat, dann springt er in die if-Bedingung und dann kommt nen "Debug-Assertion-Failed"-Error bei folgender Zeile:

C++:
pic.GetBitmap(&bild_header);


Ich versteh das nicht...

Ich hoffe, mir kann da wer helfen.
Thomas
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.07.2004, 00:54 Uhr
~toxic
Gast


hi, du verwendest "pic" ohne initialisation.

C++:
CBitmap pic;

BITMAP bild_header;
pic.GetBitmap(&bild_header);


hier die MSDN:

Code:
CBitmap::CBitmap
CBitmap( );

Remarks

Constructs a CBitmap object. The resulting object must be [i]initialized[/i] with one of the initialization member functions.


und das sind die Members zur Initialisation:

Code:
Initialization

LoadBitmap
- Initializes the object by loading a named bitmap resource from the application’s executable file and attaching the bitmap to the object.
LoadOEMBitmap
- Initializes the object by loading a predefined Windows bitmap and attaching the bitmap to the object.
LoadMappedBitmap
- Loads a bitmap and maps colors to current system colors.
CreateBitmap
- Initializes the object with a device-dependent memory bitmap that has a specified width, height, and bit pattern.
CreateBitmapIndirect
- Initializes the object with a bitmap with the width, height, and bit pattern (if one is specified) given in a BITMAP structure.
CreateCompatibleBitmap
- Initializes the object with a bitmap so that it is compatible with a specified device.
CreateDiscardableBitmap
- Initializes the object with a discardable bitmap that is compatible with a specified device.


dh. du musst das object "pic" noch mit einer dieser funktionen initialisieren.
--
grusz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.07.2004, 12:24 Uhr
t10ottoo



Hmmm...das versteh ich nicht ganz.
Hab das nun so gemacht:

C++:
    CFileFind find_file;

    CString szFilename = combo_text + ".bmp";

    if (find_file.FindFile(szFilename,0) != 0)
    {
        find_file.Close();
        HBITMAP hBmp = (HBITMAP)::LoadImage(NULL,szFilename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);

        CBitmap pic;
        pic.LoadBitmap(szFilename);
        
        BITMAP bild_header;
        pic.GetBitmap(&bild_header);
    
        CWnd* wp = GetDlgItem(IDC_BILD);

        CDC *pDC = wp->GetDC();
        CDC imageDC;
    
        imageDC.CreateCompatibleDC(pDC);
        imageDC.SelectObject( &pic);

        int x_anfang = (205/2)-((bild_header.bmWidth/(bild_header.bmHeight/150)-10)/2);
        int bild_width = (bild_header.bmWidth/(bild_header.bmHeight/150))-10;

        pDC->StretchBlt(x_anfang,0,bild_width,205,&imageDC,0,0,bild_header.bmWidth, bild_header.bmHeight,SRCCOPY);
        
        imageDC.DeleteDC();
        wp->ReleaseDC(pDC);
    }
    else
    { // else
        MessageBox("Bild nicht gefunden","Fehler",MB_OK);
    } // else


Also die Zeile hier eingefügt:
"pic.LoadBitmap(szFilename);"

Immer noch derselbe Fehler...glaub aber nicht, dasses daran liegt, denn so zeigt er ja das Bild an:

C++:
    CString szFilename = combo_text + ".bmp";
    HBITMAP hBmp = (HBITMAP)::LoadImage(NULL,szFilename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);

    CBitmap pic;
    if (pic.Attach(hBmp))
    {
        BITMAP bild_header;
        pic.GetBitmap(&bild_header);
    
        CWnd* wp = GetDlgItem(IDC_BILD);

        CDC *pDC = wp->GetDC();
        CDC imageDC;
    
        imageDC.CreateCompatibleDC(pDC);
        imageDC.SelectObject( &pic);

        int x_anfang = (205/2)-((bild_header.bmWidth/(bild_header.bmHeight/150)-10)/2);
        int bild_width = (bild_header.bmWidth/(bild_header.bmHeight/150))-10;

        pDC->StretchBlt(x_anfang,0,bild_width,205,&imageDC,0,0,bild_header.bmWidth, bild_header.bmHeight,SRCCOPY);
        
        imageDC.DeleteDC();
        wp->ReleaseDC(pDC);
    }
    else
    {
        GetDlgItem(IDC_BILD_INFO)->ShowWindow(TRUE);
    }


Aber ich möchte gerne beim "else" nen anderes Bild anzeigen lassen und das geht mit der Variante nicht, deshalb lass ich da nen Info-Button anzeigen, aber das gefällt mir halt net so richtig...

Gruß
Thomas
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.07.2004, 13:05 Uhr
~toxic
Gast


naja, den einzigen unterschied den ich da sehe ist:

C++:
    CString szFilename = combo_text + ".bmp";
    HBITMAP hBmp = (HBITMAP)::LoadImage(NULL,szFilename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);

    CBitmap pic;
    if (pic.Attach(hBmp)) // <--- hier !!!
    {
        BITMAP bild_header;
        pic.GetBitmap(&bild_header);
...


also las das loadimage weg, und mach es mit dem "Attach" wenn es so funktioniert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.07.2004, 13:14 Uhr
t10ottoo



najo ok, trotzdem danke für deine Bemühungen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: