CString zu int (für Ressourcen ID)
-
Die Ressourcen werden in der Regel so in der ressource.h definiert, wenn man sie mit dem Ressourceneditor angelegt hat:
#define IDB_BITMAP 123Deshalb könnte man einfach mit
int res=IDB_BITMAP;drauf zugreifen.
-
***
-
Ähm, ja was die Funktion macht ist völlig unwichtig, wichtig ist nur, dass sie einen int haben will und ich aber einen CString hab aus ner Datei gelesen, der dann auf eine bestimmte Ressource schließen soll.
Gibt es denn eine Funktion, welche mir zu der Ressourcen ID den dazugehören int wert ermittelt?
Oder bleibt mir nix anderes übrig als den int Wert der Ressource anstelle des CString Wertes der Ressource auszulesen?(Funktion fügt ein Bild zu einer art Liste hinzu malt dann alle Bilder in den Dialog, zufrieden? Hab ich irgendwo im Internetz gefunden)
-
Ähm

Also du liest einen String aus einer Datei:
Bsp:
"IDR_BITMAP"Das steht in der Datei.
Ist denn in deiner Resource "IDR_BITMAP" vorhanden??? Wenn nicht woher soll er denn jetzt wissen was für ein Bitmap du meinst??Oder sieht das ganze anders aus:
In deine Resource sind alle Bitmaps vorhanden. Diese heißen alle genauso wie, welche du aus der Datei herausliest. d.h. IDR_BITMAP ist in der Resource vorhanden.Dann würde ich verstehen worauf du hinaus willst...
*winke*
Hellsgore
-
Du hasst es langsam verstanden, es sind paar dutzend gif-Bilder in den Ressourcen vorhanden und mit den CString(werden vorher auf gültigkeit überprüft) will ich darauf zugreifen, öhm ja und das geht so eben nicht, desterwegen muss ich wohl int's in dat file schreiben müssen.

Dann würde ich verstehen worauf du hinaus willst...
Ich freu mich für dich, aber mir hilf das auch nicht weiter

-
Na dann frag halt deine strings mit ner switch case anweisung ob und weise die RessourceID oder welchen wert du brauchst einfach zu.
gell Hellsgore
-
Wäre jetzt noch möglich, aber wenn ich irgendwann hundert oder mehr ressourcen hab ist es einfacher, den Namen ins file zu schreiben
-
Servus,
ne machs anders. Wenn du schon sowas basteln willst dann nimm die ID's. Das ist doch wesentlich besser.
Bsp:CString strOut = ""; CStdioFile stdFile(blabla); //Jetzt musst du deine IDS suchen machst dann ein Kriterium //ab 120 erstes Bitmap anfangen und dann bis 140 oder so strOut.Format("%d\n", IDR_BILD); stdFile.WriteString(strOut); //und dann den rotz lesen...... .,Ich hoffe mal du hast so ungefähr verstanden worauf ich hinaus will.
1. Alle Bitmap Resourcen erfassen und dann in Datei schreiben
2. Alle Auslesen und mit vorhandenen vergleichen.
3. Den Intwert aus der Datei kannst du ja dann direkt an deine Funktion übergeben.Ich habe nur keine Ahnung wie das gehen soll

musst mal rumprobieren.
*winke*
Hellsgore
-
Hab hier noch was für dich... Habe mich ein bisschen durch die MSDN geprügelt:
HRSRC test = FindResource(NULL, MAKEINTRESOURCE(120), RT_BITMAP); if (test == NULL) { AfxMessageBox("Gefunden!!!"); }Hat deine Resource IDR_BITMAP die ID 120 dann sucht er nach der ID und spuckt dir eine Handle zu einer Resource aus. Also kann man davon ausgehen wenn das Handle != Null ist dann sollte er was gefunden haben.
Vielleicht hilft dir das ein bisschen weiter...
*winke*
Hellsgore
-
Also ich würd einfach en paar if anweisungen machen:
if(res==_T("IDB_BITMAP1")) { ires=IDB_BITMAP1; } if(res==_T("IDB_BITMAP2")) { ires=IDB_BITMAP2; }und so weiter und so fort.
MFG
Hansi
-
Alse wenn ich das richtig verstehe müsste ich eine Zähler über alle ressourcen Id's laufen lassen, bis er sie gefunden hat? Oder kann man anstelle der 120 den CString einsetzen? Das Beispiel in der MSDN zeigt leider auch nicht mehr, werd wohl wieder selber probieren müssen.
Bin noch etwas verwirrt, aber möglicherweise könnte mir das helfen
thx Helsgore
-
Servus,
nein...
Wenn du mein Bsp. mit dem FindResource meinst dann brauchst du erstmal alle ID's.Ich gehe mal davon aus die hast du jetzt alle in deiner Datei drinstehen. Dann kommt zum suchen ob vorhanden das Bsp von mir:
CStdioFile fDatei(blabla); CString strFileIn; while (fDatei.GetPosition() < (fDatei.GetLength-1)) { fDatei.ReadString(strFileIn); //nehmen wir jetzt an in strFileIn steht jetzt 120 HRSRC hResource = FindResource(NULL, MAKEINTRESOURCE(atoi(strFileIn)), RT_BITMAP); //Wenn das Handle != 0 ist dann hat er was gefunden das //die gleiche Resource ID hat wie das du in der Datei //gespeichert hast if (hResource != NULL) { AfxMessageBox("Gefunden!!!"); } }Und das finde ich wesentlich besser als 50 ifs oder case zu machen. Aber ist meine Meinung *g*
Jetzt musst du nur noch alle ID's deiner Bmp's herausfinden und in die Datei abspeichern.
*winke*
Hellsgore
-
Ich habe hier ein kleines Bsp. ist aber nicht gerade die feinste Lösung sollte aber mal im Moment langen.
for (int i = 100; i <= 300; i++) { HRSRC hResource = FindResource(NULL, MAKEINTRESOURCE(i), RT_BITMAP); //Wenn das Handle != 0 ist dann hat er was gefunden das //die gleiche Resource ID hat wie das du in der Datei //gespeichert hast if (hResource != NULL) { //SChreibe jetzt hier i in die Datei } }Der zählt jetzt einfach von 100 an bis 300 und guckt bei jeder Zahl nach ob es eine Resource vom Typ Bitmap gibt, welche der ID mit dem Zähler i übereinstimmt.
Viel Spass
*winke*
Hellsgore