Ressourcenname von einem Bitmap
-
Ich habe ein Bitmap als Ressource hinzugefügt und möchte an den Ressourcenname kommen.
Momentan kommt mit dem Makro MAKEINTRESOURCE nur ein "schlechtes_ptr".
Ich habe festgestellt, dass die ID des Bitmaps diesselbe Nummer wie eine schon vorher erstellte Stringressource hat. Ist das normal? Also das wurde vom VS so vergeben, da habe ich nix manuell gemacht.MfG Pellaeon
-
Pellaeon schrieb:
"schlechtes_ptr".
huch? was ist denn das?
-
pale dog schrieb:
Pellaeon schrieb:
"schlechtes_ptr".
huch? was ist denn das?
Ja zeigt der Debugger an, wenn er was mit nem Zeiger nichts anfangen kann. Is ne tolle Übersetzung^^
VS stinkt mir gerade gewaltig. IntelliSense funzt momentan fast garnicht und jetzt hat der einfach ne cpp-Datei gelöscht!
-
Du hast nicht verstanden wie Ressourcen funktionieren!
1. Ressourcen können unter einem Namen oder einer ID abgelegt werden. Wie entscheidet der Resourcencompiler.
Wenn also ein define existiert:#define IDB_NAME 1000Und in der RC Datei steht:
IDB_NAME BITMAP "res\\MySuperBitmap.bmp"Dann legt der Ressourcen-Compiler die Bitmap unter der ID 1000 ab.
Steht so was in der Ressourcen Datei und MeinBitmapName ist kein Define, oder wird gar direkt ein String verwendet:
MeinBitmapName BITMAP "res\\MySuperBitmap.bmp" "Mein toller Bitmap Name" BITMAP "res\\MySuperBitmap.bmp"Dann legt der Compiler die Ressource unter einem Namen an.
2. Wenn Du Dir nun mal angesehen hast, wie Ressourcen geladen werden, dann wird Dir aufgefallen sein, dass man immer nur einen Namen angeben kann.
Wie lädt man also eine Ressource, die unter einer Nummer abgelegt ist?
Nun einfach indem man MAKEINTRESOURCE verwendet.
Hier wird ein spezieller String Zeigererzeugt, der auf dem HIWORD 0 ist und im LOWORD die ID hat.
Solche ein Speichersegement gibt es in Deinem Prozess normalerweise nicht. Deshalb ist der Zeiger "scheinbar" ungültig. Aber der Wert gibt die ID der Ressource an.HTH
-
OK danke für den Hinweis.
Eine Frage habe ich noch. Ich importiere mir ja Bitmaps als Ressourcen. Und für diese legt er mir immer ne ID anstatt nen Namen an. Ich brauch aber nen Text als Identifier.
Nun habe ich einfach in der Stringtabelle unter derselben ID nenStringressource angelegt.
Wenn ich jetzt das Makro benutze, und aus dem resultierendem Zeiger nen string-Objekt mache(egal ob CString oder std::string), dann kommt da auch tatsächlich der Text rein, der als Stringressource angelegt ist.Ist das eine legale, normale Herangehensweise, oder eher Zufall und nen Hack?
MfG Pellaeon
-
Es steht Dir doch frei wie Du die Resource bennenst. Erzwinge doch einen Namen indem Du Anführungszeichen verwendest!
-
Fällt mir noch eine Frage ein:
Warum brauchst Du Strings? Mit denen lässt sich schlechter arbeiten.Du kannst Dir doch eine interne Map aufbauen bei der zu jeder ID der entsprechende Name zugeordnet wird...
-
Martin Richter schrieb:
Fällt mir noch eine Frage ein:
Warum brauchst Du Strings? Mit denen lässt sich schlechter arbeiten.Du kannst Dir doch eine interne Map aufbauen bei der zu jeder ID der entsprechende Name zugeordnet wird...
Ich lade die Bitmaps als Texturen in OGL. Dafür nehm ich nen Texturloader. Der enthält dann eine std::map Texturpfad -> OGL ID, um so zu verhindern, dass die Bilder dauernd neu geladen werden.
-
Pellaeon schrieb:
...und jetzt hat der einfach ne cpp-Datei gelöscht!
Hast Du das Studio 2005?
Das mit dem Löschen ist mir schon mehrfach passiert. Beim ersten Mal dachte ich, ich habe wohl im Explorer versehentlich was markiert und entfernt. Nach drei Mal kann das kein Zufall sein. Das sind immer alle cpp-Dateien, die vor der aps-Datei stehen.Weißt Du inzwischen, woran es lag?
-
Tester2 schrieb:
Pellaeon schrieb:
...und jetzt hat der einfach ne cpp-Datei gelöscht!
Hast Du das Studio 2005?
Das mit dem Löschen ist mir schon mehrfach passiert. Beim ersten Mal dachte ich, ich habe wohl im Explorer versehentlich was markiert und entfernt. Nach drei Mal kann das kein Zufall sein. Das sind immer alle cpp-Dateien, die vor der aps-Datei stehen.Weißt Du inzwischen, woran es lag?
Ja ich habe das 2005er Standard, und nein kA was es war. Nicht mal der PC Inspector File Recovery konnte sie als gelöschte Datei wiederfinden.
Ich hatte zum Glück nen alten Stand extra gespeichert, wo ich die cpp rausnehmen konnte.