SetMenuItemBitmaps mit ICO Dateien?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
E-P-S
Beiträge: 134
Registriert: 30.03.2007 09:39
Kontaktdaten:

SetMenuItemBitmaps mit ICO Dateien?

Beitrag von E-P-S »

Hi zusammen...

Ein PopUp Menü per API zu erstellen und dieses mit BITMAP "Icons" zu versehen hab ich schon hinbekommen. Allerdings funktioniert das ganze nicht wenn ich als Ressource ICO Dateien verwenden möchte.

Geladen werden die ICOs noch, kann ich per Handle nachprüfen, also:

Code: Alles auswählen

LoadImage( 0, "off.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE )
Aber die Icons werden nicht angezeigt. Da der Befehl der Zuweisung ja SetMenuItemBitmaps heißt, hab ich überlegt ob eben dieser Befehl wirklich nur BITMAP Dateien verarbeiten kann, man also die Icons nach dem Laden noch irgendwie umwandeln muß.

Wenn ja - wie? Ich hab hierzu nix gefunden und in allen auffindbaren Beispielen, nicht nur zu PB, wird da nix umgewandelt.

Hat das schon jemand mit ICO Dateien hinbekommen? Danke schonmal.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

moin, moin...

Ich hatte ein ähnliches Problem vor Kurzem mal mit 32er Icons im TreeGadget.
Erklären kann ich nich gut, aber vielleicht hilft Dir ja der Thread weiter: http://www.purebasic.fr/german/viewtopi ... adget+icon
Da wird dann über die Api mit ImageList_ReplaceIcon_() statt ImageList_Add_() gearbeitet.

hdh... scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
E-P-S
Beiträge: 134
Registriert: 30.03.2007 09:39
Kontaktdaten:

Beitrag von E-P-S »

Danke für den Tipp, die Idee ist nicht schlecht, insofern es um PB geht, ich suche aber eine Lösung für die Windows API.

Mittlerweile bin ich soweit das der Befehl SetMenuItemBitmaps tatsächlich nur Bitmaps kapiert und suche nun nach einer Möglichkeit dem Befehl die Verwendung eines ICO zu verticken.

Die Idee (nicht meine) basiert auf folgendem:

- Icon laden
- IconInfo Struktur holen
- Zeiger auf Bitmap (bzw. ColorMap) nehmen
- SetMenuItemBitmaps mit diesem Zeiger aufrufen

Das sollte eigentlich gehen - habs bisher aber noch nicht hinbekommen.

EDIT:Ok, Thema hat sich erledigt - es geht. Des Rätsels Lösung ist die IconInfo Struktur, die nämlich 20 - anstatt wie von der MSDN angegeben nur 17 - Bytes besitzt.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag von hjbremer »

Wie wärs mit einem kurzen Beispiel für alle.

Danke im voraus!
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
E-P-S
Beiträge: 134
Registriert: 30.03.2007 09:39
Kontaktdaten:

Beitrag von E-P-S »

Mach ich doch gerne, allerdings hab ich das weder mit, noch für PB geschrieben ;) von daher weis ich nicht ob es viel Sinn macht, aber ich versuchs.

Also vom Prinzip her gehts folgendermaßen:

Code: Alles auswählen

iconinfo = createbank(20) ;--> Bank oder halt die IconInfo Struktur

;--> ICO laden
Map = api_LoadImage( 0, "myicon.ico", IMAGE_ICON, 13, 13, LR_LOADFROMFILE )

;--> IconInfo Struktur des geladenen Icons holen
api_GetIconInfo( Map, iconinfo )

;--> Pointer auf ColorMap (Bitmap) des Icons aus Struktur holen
Map = PeekInt( iconinfo, 16 )

;--> Bitmap dem entsprechenden Eintrag (hItem) des Menüs (hMenu) zuweisen
api_SetMenuItemBitmaps( hMenu, hItem, MF_BITMAP, Map, Map )
Ich hoffe es hilft weiter.
Antworten