Zur Laufzeit in ein BitmapLabel ein Icon einfügen...
-
Hallo,
ich will zur Laufzeit das Bild in einer Bitmap-Label wechseln. Wenn ich in dieses Label Bitmap-Resourcen einfüge, kriege ich das zwar hin, jedoch kann ich ja keine transparenten Bitmaps erstellen, sodass das blöde aussieht...
Deswegen hab ich versucht, stattdessen dort ein Icon reinzulegen und dieses dann auszuwechseln...nur, wie mach ich denn das??....Das Label bietet mir die Methode SetIcon(), jedoch will es einen Parameter vom Typen HICON....WIE BEKOMM ICHZ DENN DEN???...IRGENDWIE MUß ich doch zunächst mal die Icon-Resource laden und dann in diese Struktur schreiben....WIE GEHT denn das..??...
Zur kleinen Hilfe - bei den Bitmaps hab ichs so gemacht:
*********************+
CBitmap bmp;
bmp.LoadBitmap(IDB_MYBITMAP);
label.SetBitmap(bmp);==> das hat geklappt, aber sowas ähnliches muss es doch jetzt auch für Icons geben, oder nicht??....aber ich finde z.b. keinen Datentypen CIcon oder so....
==>ich hab ne globale Funktion LoadIcon() gefunden, aber da kriege ich Linkerprobleme....ich nutze WindowsCE 4.0 - vielleicht geht damit nicht...
==> ich hab ne Funktion LoadImage() gefunden, die compiliert wird...allerdings liefert die einen Rückgabewert vom Typ HANDLE zurück...ich hab natürlich von meinem Label keine Methode label.SetImage(HANDLE) gefunden....irgendwie passt das alles vorne und hinten nicht zusammen bei MFC...:(
...ich will doch einfach nur n Icon zur Laufzeit in ein Label stecken.....
Besten Dank für jede Hilfe im MFC-Dschungel...
-
Das hat nichts mit MFC Dschungel zu tun.
Icons und Bitmaps sind unterschiedliche Objekte.
LoadImgage kann Bitmaps und Icons laden. Deshalb wird ein HANDLE zurückgegeben.
Sofern Du also ein Icon geladen hast kanst Du dieses Handle mit einem cast auf HICON umbiegen.Wenn es nur um Hintergrundfarben geht kannst Du auch die Bitmap nehmen und mit LoadImage laden und dabei LR_LOADMAP3DCOLORS verwenden. Alerdings werden hier drei Farben spezifisch ersetzt.
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/resources/introductiontoresources/resourcereference/resourcefunctions/loadimage.asp?frame=true
-
...bei SetIcon() krieg ich Linkerfehler....:(...
...wenn ich das Bild mit ::LoadImage lade, klappt es auch nicht....
das funktioniert:
****************
CBitmap bmp;
bmp.LoadBitmap(IDB_MYBITMAP);
label.SetBitmap(bmp);das funktioniert nicht (kein Fehler, aber das Bild wird nicht angezeigt):
*************************************************************************
HANDLE handle = ::LoadImage(NULL, MAKEINTRESOURCE(IDB_MYBITMAP),
IMAGE_BITMAP, 32, 32, LR_LOADTRANSPARENT);
label.SetBitmap((HBITMAP) handle);ebenso wenig klappt das hier (kein Fehler, aber das Bild wird nicht angezeigt):
******************************************************************************
CBitmap bmp;
HANDLE handle = ::LoadImage(NULL, MAKEINTRESOURCE(IDB_MYBITMAP),
IMAGE_BITMAP, 32, 32, LR_LOADTRANSPARENT);bmp.FromHandle((HBITMAP) handle);
label.SetBitmap(bmp);Hier kriege ich Linkerfehler
*********************************
HICON icon;
label.SetIcon(icon);.....:(.....
-
::LoadImage([i][b]NULL[/b][/i], MAKEINTRESOURCE(IDB_MYBITMAP), IMAGE_BITMAP, 32, 32, LR_LOADTRANSPARENT);Was hälst Du davon die Dokumentation zu lesen?
Der erste Parameter muss ein HINSTANCE Handle Deiner EXE oder Ressourcen DLL sein!
-
...also, es klappt immer noch nicht...
...ich hole mir nun zuvor den Module-handle mit GetModuleHandle(NULL)...da kommt auch was zurück...allerdings ist der Handle, der von LoadImage kommt NULL...
...ich hab auch GetModuleHandle("Name der Exe mit extension .exe"),
und GetModuleHandle("komplette Pfadangabe") ausprobiert......gibts noch was, was ich da falsch machen könnte??...Die Bitmaprresource ist def. da. Das Label, wo ich es einfügen will, ist ein Bitmaplabel, welches im Resourceneditor die Eigenschaft "Bitmap" (und nicht "ICon") bekommmen hat...
..Bin mal gespannt, was da noch alles falsch ist...
-
Du solltest nicht grundlos GetModuleHandle aufrufen! Du hast doch die HINSTANCE in Deinem Programm!
Wenn
::LoadImage(::GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_MYBITMAP), IMAGE_BITMAP, 32, 32, LR_LOADTRANSPARENT);NULL liefert existiert keine bitmap mit dieser ID!