SetMenuItemBitmaps mit ICO Dateien?
Übersicht

![]() |
EPSBetreff: SetMenuItemBitmaps mit ICO Dateien? |
![]() Antworten mit Zitat ![]() |
---|---|---|
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: [AUSKLAPPEN] api_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 wird da nix umgewandelt. Hat das schon jemand mit ICO Dateien hinbekommen? Danke schonmal. |
||
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, der Befehl erkennt nur Bitmaps. Da aber jedes Icon nur eine Zusammensetzung aus Bitmap und Maske ist, kannst du an das Handle der Bitmap kommen, indem du GetIconInfo benutzt. Du brauchst dann nur noch die ICONINFO Struktur auszuwerten und hast deine Bitmap. | ||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
EPS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also war der Gedanke richtig: D A N K E | ||
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier
Man kann sich öfter als zweimal im Leben halb tot lachen. |
![]() |
EPS |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, leider klappt das immer noch nicht so ganz. Momentan hab ich folgendes:
Code: [AUSKLAPPEN] hinfo = CreateBank( 17 ) ;--> iconinfo structure bMap1 = cm_LoadImage( 0, "icon.ico", IMAGE_ICON, 13, 13, LR_LOADFROMFILE ) api_GetIconInfo( bMap1, hinfo ) bMap1 = PeekInt( hinfo, 13 ) ....für bMap2 das gleiche api_SetMenuItemBitmaps( hMenu, hItem, MF_BITMAP, bMap1, bMap2 ) Aber ein Icon wird immer noch nicht angezeigt. In der IconInfo Struktur ist ja der Zeiger auf die Bitmap enthalten. Diesen Zeiger erhalte ich auch, also zumindest bekomme ich einen Wert. Kann es sein das die Bytes des Zeigers durch das "holen" per PeekInt verdreht werden, da er ja ein LONG Wert ist? Falls ja, wie gehört es denn von der Reihenfolge her richtig? |
||
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier
Man kann sich öfter als zweimal im Leben halb tot lachen. |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Aufgefallen ist mir erstmal, dass "hinfo" nicht 17, sondern 20 Bytes groß sein muss. Der erste Wert ist zwar BOOL, aber dahinter steckt eigentlich ein Integer.
Ich kann ja auch gleich mal ein bisschen experimentieren. ![]() |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
EPS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ha, wer hätte das gedacht....so gehts....hui, die sollten echt mal ihre MSDN aufräumen.
DANKE VIELMALS |
||
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier
Man kann sich öfter als zweimal im Leben halb tot lachen. |
![]() |
EPS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nochmals Danke an dich, ChristianK, das Ergebnis der ganzen Geschichte ist unter DLLs & User Libs zu bewundern.
So, nun würde ich natürlich noch gerne Fenstermenüs realisieren - was von der Anzeige und Bedienung des Menüs her auch nicht schwer ist. Kompliziert wird die Rückgabe von ausgewählten Menüpunkten da es für Fenstermenüs keine "Tracking" Prozedur gibt sondern das Ergebnis ans Fenster gesendet wird und man wohl oder übel ne DLL dafür bräuchte um die Messages abzufangen. Da du ein cleveres Kerlchen zu sein scheinst...hättest du ne Idee dazu wie dies zu realisieren wäre? EDIT: In diesem Beitrag hier (Ende der Seite) wird eine solche Prozedur beschrieben - allerdings hier für das Abfangen der Fensterbuttons. Könnte man eine Ähnliche Prozedur nicht auch für das Abfangen der Menüauswahl erstellen, vielelicht sogar eine generelle Prozedur/DLL die alle Nachrichten an das AppFenster abfangen kann? |
||
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier
Man kann sich öfter als zweimal im Leben halb tot lachen. |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Leider geht es nur über eine DLL, weil man einen Function Pointer auf die Fenster-Prozedur braucht.
Aber wenn du willst, kann ich dir eine schreiben. Dann brauche ich nur vorher deinen Code zum Erstellen des Fenstermenüs. ![]() |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
EPS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich könnt sie wohl auch selbst schreiben, insofern ich das ganze irgendwie nach PB portiert bekäme. Wie auch immer, wenn du das könntest wäre es mir auch recht.
Den Code lasse ich dir per E-Mail übder eine PN zukommen. |
||
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier
Man kann sich öfter als zweimal im Leben halb tot lachen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group