Autor | Thema: Beliebigem Handle Bitmap zuweisen | | Datum:12.06.01 08:51 
(mail@stschnell.de) | |
Hallo Community,
stehe vor folgendem Problem:
Möchte einem Fensters (mittels @Create erzeugt) eine Bitmap zuweisen (mit dem Ziel, nachher jedem beliebigen Handle (oder Objekt wie Buttons u. ä.) eine Bitmap zuzuweisen). Verwende dafür folgenden Code (der aber leider nicht so funktioniert, wie ich mir das vorstelle):
Def @LoadBitmap(2) !"USER32", "LoadBitmapA"
Def @DeleteObject(1) !"GDI32","DeleteObject"
Def @BitBlt(9) !"GDI32", "BitBlt"
Declare Red$, Green$, HTrafficDLL&, HRedBMP&, HGreenBMP&, HWin&
Let Red$ = @Add$("RED", @Chr$(0))
Let Green$ = @Add$("GREEN", @Chr$(0))
Let HTrafficDLL& = @UseDLL("COLOR.DLL")
Let HRedBMP& = @LoadBitmap(HTrafficDLL&, @Addr(Red$))
Let HGreenBMP& = @LoadBitmap(HTrafficDLL&, @Addr(Green$))
Let HWin& = @Create("Window", %HWnd, "Grafik", 10, 10, 500, 250)
@BitBlt(HWin&, 25, -120, 100, 100, HRedBMP&, 0, 0, $00CC0020)
WaitKey
@DeleteObject(HRedBMP&)
@DeleteObject(HGreenBMP&)
@DestroyWindow(HWin&)
FreeDLL HTrafficDLL&
End
Wer kann mir auf die Sprünge helfen? Was mache ich falsch bzw. gehe ich so überhaupt den richtigen Weg?
Danke und Tschüss
Stefan
|
| | Datum: 12.06.01 14:20 
(andreas@andreas-miethe.de) | |
Hallo Stefan,
>Möchte einem Fensters (mittels @Create erzeugt) eine Bitmap zuweisen (mit dem Ziel,
>nachher jedem beliebigen Handle (oder Objekt wie Buttons u. ä.) eine Bitmap zuzuweisen).
>Verwende dafür folgenden Code (der aber leider nicht so funktioniert, wie ich mir das >Vorstelle):
Bitmaps kannst Du nur bestimmten Controls zuweisen. Bei den Standard-Controls sind das Button- und Static-Controls.
Auf die anderen Controls kannst Du nur zeichnen aber nicht zuweisen.
Bitblt ist in Deinem Beispiel schon der richtige Weg für's Zeichnen auf Controls,
allerdings musst Du als Ziel den Device-Kontext und nicht das
Fensterhandle und als Quelle den Device-Kontext aus dem Du blitten willst angeben und
nicht das Bitmap-Handle.
Mit GetDC(..) bekommst Du den Device-Kontext.
Dann musst Du Dir ein Speicher-Kontext anlegen, in den Du das geladene Bitmap
selektierst.
Mit CreateCompatibleDC(..) und SelectObject(..).
Dann erst kannst Du mit Bitblt(..) aus dem Speicher in das Fenster zeichnen.
Wenn Du diesen Weg wählst, musst Du, jedesmal wenn Dein Fenster überlagert wurde,
das Neuzeichnen selbst übernehmen. Einfacher ist es, dem Button oder Static den richtigen Stil zu verpassen und das Bitmap zuzuweisen, dann ist es bis zum Programm-Ende verfügbar
und Du musst Dich nicht ums Neuzeichnen kümmern.
Der bessere Weg für Dein Beispiel wäre:
1 mit Create(..) ein Fenster anlegen.
2 mit Control(..) ein Static im Fenster anlegen.
3 mit LoadBitmap(..) oder LoadImage(..) ein Bitmap aus der Dll zu laden.
4 mit SendMessage(..) das Bitmap dem Static zuweisen.
Wenn Du weitergehende Hilfe benötigst, dann melde Dich bitte direkt per Mail.
Gruss
Andreas
|
|
|