Im Programm erstelltes Bitmap auf Button



  • Hi!

    Ich bin neu hier, und hoffe Ihr könnt mir endlich weiterhelfen.
    Mein Problem ist folgendes.
    Ich versuche ein Bitmap im Programm zu erstellen und zu verändern, und dann auf ein Button zu setzen.

    Im Moment mache ich das wie folgt:

    HWND OkButton_hWnd = CreateWindow(_T("BUTTON"), _T("Ok"), WS_CHILD | WS_VISIBLE | BS_BITMAP | BS_LEFT | BS_TEXT, 5 , Height-60, 100, 30, hWnd, 0, NULL, NULL);
    
    HDC hDC = GetDC( OkButton_hWnd );
    
    HDC memDC = CreateCompatibleDC ( hDC );
    
    HBITMAP memBM = CreateCompatibleBitmap ( memDC , 100, 100);
    
    SelectObject( memDC, memBM );
    
    TextOut(memDC, 2, 2, _T("HALLO"), 5);
    
    SendMessage(OkButton_hWnd, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM) memBM);
    

    Nur leider erscheint auf dem Button garnichts. Ich kann ein Bitmap dort anzeigen, aber nur eins, das in einer Resource war. Also keines, daß ich von meinem Programm aus geändert habe. Lade ich ein Resourcen Bitmap in den DC, dann kann ich es aber nicht mehr mittels SendMessage aufs Button legen, irgendwie scheint es durch den SelectObject gesperrt zu werden.

    Hat jemand ne Ahnung, wie ich das machen kann?

    Vielen Dank schon mal im voraus

    Stephan Theisgen



  • Hast du schon mal

    ReleaseDC(OkButton_hWnd, hDC);
    DeleteDC(memDC);
    

    vor dem SendMessage-Aufruf probiert?



  • hmm.. probier einfach das hier:
    mitglied.lycos.de/DocJunioR/Sources/MyGraphButton.zip

    ein Beispielprogram ist auch dabei.
    Bei Fragen einfach mailen



  • In CreateCompatibleBitmap wolltest / solltest du wohl hDC und nicht memDC verwenden, ansonsten ist dein Bitmap monochrome.
    Nach dem TextOut sollte noch folgendes stehen:

    DeleteDC( memDC );
    ReleaseDC( OkButton_hWnd, hDC );
    

    PS: Dein Bitmap ist ja viel größer als dein Buttun ("Fenster")

    Da war wohl jemand schneller! 😉

    [ Dieser Beitrag wurde am 17.11.2002 um 13:23 Uhr von flenders editiert. ]



  • Hi!

    Super, Ihr seit spitze, wäre ich auch fast selber drauf gekommen, nur das DeleteDC war der Entscheidende Knackpunkt, der mir fehlte.

    Nochmals danke, funktioniert alles.

    Ciao
    Stephan


Anmelden zum Antworten