Icon (Bitmap) neben Auswahlbox anzeigen.



  • Ja, in deiner DlgProc hast du das Handle ja hwndDlg genannt, ich nutze eigentlich immer nur hwnd.
    Hast du denn mal den Returnwert von LoadBitmap getestet? Wenn die Funktion scheitert, ist hBitmap null, unbedingt testen.
    Du hast ja den Code dadrunter geschrieben, oder? Imho wird WM_PAINT unter CE gar nicht gesendet.



  • Jep, Case WM_Paint hab ich komplett raus genommen und Deinen Code so eingebaut, wie du gesagt hast.

    Ich hab auch mal den Returnwert auf NULL geprüft... er ist NULL... 😡
    Also kommt der Handle zum Bitmap nicht...



  • LoadBitmap sollte aber schon funktionieren, wenn der Dateipfad existiert.
    Folgendes klappt bei dir nicht, oder?

    bool FileExistsW(const wchar_t* pFilename)
    {
        WIN32_FIND_DATAW data;
        HANDLE hdl=FindFirstFileW(pFilename,&data);
        if(hdl==INVALID_HANDLE_VALUE)
            return false;
        if(data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            return false;
        return true;
    }
    // also vor LoadBitmap
    if(!FileExistsW(variable3))
      MessageBox(0,"existiert nicht!",0,0);
    


  • Keine Ahnung, was da quer läuft...
    Wenn ich ein CopyFile mit der Variable3 mache, dann kopiert er mir das einwandfrei. Also sollte das doch funktionieren...

    Nur das doofe Bitmap wird einfach nicht im Programm angezeigt...


  • Mod

    Geschweifte Klammern vergessen? Ist das evtl. C und kien C++?



  • Hallo Martin,

    ja, das ist C
    Das letzte Schippel habe ich auch nicht eingebaut, sondern per CopyFile() getestet, ob die variable3 den richtigen Link zum Bitmap enthält.



  • Hat denn keiner eine Lösung für mein Problem? 😕

    Hier noch mal der Sourcecode des entsprechenden Buttons:

    case ID_LOOK:
    		/** if clicked, there is shown a previewof the marked item **************/
    			/** Get marked Item from ID_BOX**********/
    			hList = GetDlgItem(hwndDlg, ID_BOX);
    			int read = SendMessage(hList, LB_GETCURSEL , 0, 0);
    			if (read<0) return TRUE;
    			LB_GETTEXTLEN;
    			SendMessage(hList, LB_GETTEXT,read, (LPARAM)pfad);
    			Sleep(100);
    
    			/** if another item is marked, set pfad2 to 0 ************/
    			pfad2[0] = 0;
    
    			/** get the path to the Bitmap ******************/
    			wcscat(pfad2, L"\\Storage Card\\GoPalWorld-Skin\\Designs\\Autotauscher\\");
    			wcscat(pfad2, pfad);
    			wcscat(pfad2, L"\\icon.bmp\0");
    
    			/** test to copy the bitmap to the root of Storage Card ***********/
    			if(CopyFile(pfad2, L"\\Storage Card\\icon.bmp", FALSE) != TRUE)
      				{MessageBox(0,L"Vorschau-Bild existiert nicht!",L"Fehler",0);} // if copying faults send Message to the user
    			else
    				{
    
    				/** show bitmap out of marked folder in ID_BOX on hwndDlg at x = 60, y= 100 **/ 
    		       		 if(hBitmap) DeleteObject(hBitmap); 		// delete "old" Bitmap
    				hBitmap = LoadBitmap(NULL, L"\\Storage Card\\icon.bmp\0"); // Test to load bitmap from SD-card
    				HDC hdc = GetDC(hwndDlg);
    				HDC hdcMem = CreateCompatibleDC(hdc);
    				HGDIOBJ hbOld = SelectObject(hdcMem,hBitmap);
    				BitBlt(hdc, 60, 100, 50, 50, hdcMem, 0, 0, SRCCOPY);
    				SelectObject(hdcMem,hbOld);
    				DeleteDC(hdcMem);
    				ReleaseDC(hwndDlg,hdc); 
    				InvalidateRect(hwndDlg,0,TRUE); 		// jetzt probehalber alles löschen	
    				}	
    
    			break;
    


  • Ich habe für CE nie programmiert, habe es in nächster Zeit auch nicht vor.
    Aber: CopyFile kann vielleicht auf anderer Ebene arbeiten. Probier doch einfach mal, die Datei per fopen zu öffnen und dir die ersten zwei Bytes ausgeben zu lassen (die ersten beiden Bytes des BitmapFileHeaders), ist es wirklich 0x4D42?

    Edit

    LB_GETTEXTLEN;
    // bringt natürlich nichts. Stattdessen
    if(SendMessage(hList,LB_GETTEXTLEN,read,0)>=/*Puffergröße*/)
      return 0;
    


  • Hallo zusammen,

    erst einmal vielen Dank für Eure Hilfe. 👍

    Ich bin jetzt mal einen anderen Weg gegangen zum testen...

    Ich habe jetzt folgendes festgestellt:

    wenn ich mit

    hbit = LoadBitmap(NULL, MAKEINTRESOURCE(IDR_BITMAP));
    			HWND imgCtrl = CreateWindow( _T("STATIC"), NULL, SS_LEFT | SS_BITMAP | WS_CHILD | WS_VISIBLE, 40, 120 , 50, 50, hwndDlg, NULL, NULL, NULL);
    			SendMessage(imgCtrl,STM_SETIMAGE, (WPARAM)IMAGE_BITMAP,(LPARAM)hbit);
    

    ein Bitmap mit in die Exe packe (Pelles C) dann wird das Bitmap an der Stelle angezeigt wenn ich den Button klicke.

    Gehe ich hin und ändere:

    hbit = LoadBitmap(NULL, MAKEINTRESOURCE(IDR_BITMAP));
    

    auf einen Dateipfad, z.B:

    hbit = LoadBitmap(NULL, L"\\Storage Card\\test.bmp\0");
    

    dann geht da nix... 😕

    Selbstverständlich funktioniert dann

    hbit = LoadBitmap(NULL, pfad2);
    

    auch nicht... 😡



  • Nur zur Komplettierung...

    Ich habs geschafft. Ich erstelle ein neues Fenster und kriege das Bitmap damit sichtbar:

    hbit = SHLoadDIBitmap(pfad2); 
    HWND imgCtrl = CreateWindow( _T("STATIC"), L"Auto", SS_LEFT | SS_BITMAP | WS_VISIBLE, 40, 120 , 50, 50, hwnd1, NULL, NULL, NULL);
    SendMessage(imgCtrl,STM_SETIMAGE, (WPARAM)IMAGE_BITMAP,(LPARAM)hbit);
    

    Leider funktioniert das nicht, wenn ich das WS_CHILD setzen will. Aber damit kann ich ganz gut leben.

    Vielen Dank noch mal für Eure Hilfe! 👍


Anmelden zum Antworten