CString zu int (für Ressourcen ID)



  • Ä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


Anmelden zum Antworten