Kontrollkästchen mit Hilfe einer Configuration-Datei setzen



  • Hallo,

    ich habe eine Anwendung mit vielen Kontrollkästchen erstellt.
    Über einen Configuration-Button soll der Benutzer eine bestimmte Config-Datei laden, die die Kontrollkästchen entsprechend setzt.
    Hat jemand eine Idee, wie man so eine Datei erstellt!?
    Danke.

    Gruß, jamina



  • Wo ist das Problem?! mit FILE oder nen stream gehts doch ganz einfach... als Tipp... seh das Kästchen als boolischen Wert 😉



  • Vielleicht Nullen und Einsen verwenden (jeweils false und true)
    => einlesen
    => setzen der häkchen
    Eine Datei sieht dann so aus:

    0 1 1 0 1 0 1 0 0
    

    jede Zahl einzeln einlesen und wenn 1 => häkchen dran wenn 0 eben nicht oder häkchen entfernen.



  • Tss... einfach so... also das ist jetzt mit FILE...

    bool WriteCheckBoxSettings(LPCSTR lpszFile, CButton* pButton)
    {
        FILE* pFile = NULL;
        pFile = fopen(lpszFile, "wb");
    
        if(!pFile)
            return false;
    
        fwrite(&pButton->GetCheck(), 1, 4, pFile);
    
        fclose(pFile);
    
        return true;
    }
    
    bool ReadCheckBoxSettings(LPCSTR lpszFile, CButton* pButton)
    {
        FILE* pFile = NULL;
        pFile = fopen(lpszFile, "wb");
    
        if(!pFile)
            return false;
    
        int nCheck = 0;
        fread(&nCheck, 4, 1, pFile);
    
        pButton->SetCheck(nCheck);
    
        fclose(pFile);
    
        return true;
    }
    

    Referenzen:
    CButton::GetCheck
    CButton::SetCheck



  • Danke für die schnellen Antworten.
    Ob die enstsprechenden Kontrollkästchen gestetzt oder nicht gestetzt sind, will ich nicht direkt im Programm schreiben, sondern über eine Config-Datei laden.
    Was eine Endung soll dann die Datei haben?
    Danke



  • du könntest das auch in einer Ini datei lösen.

    zum tema Ini kuck mal in folgende links
    http://windowssdk.msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getprivateprofileint.asp <-- ints auslesen
    http://windowssdk.msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getprivateprofilesection.asp <-- ganze Sektion auslesen.
    http://windowssdk.msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getprivateprofilestring.asp <-- strings auslesen.

    oder nutz das kleine beispiel

    so setzt du werte in eine Ini

    CString sSection = "MeineSection"; 
    CString sKey = "MeinKey"; 
    CString sData = "MeinWert"; 
    CString sPath = "C:\\MeineIni.ini";
    
    for(int nloop = 0;nloop<=10;nloop++) 
    { 
         CString sNextSection; 
         sNextSection.Format("%s%i",sSection,nloop); 
         WritePrivateProfileString((LPCTSTR)sNextSection,(LPCTSTR)sKey,(LPCTSTR)sData,(LPCTSTR)sPath);
    
         for(int nloop2=0;nloop2<=10;nloop2++) 
         { 
            CString sNextKey; 
            sNextKey.Format("%s%i",sKey,nloop2); 
            WritePrivateProfileString((LPCTSTR)sNextSection,(LPCTSTR)sNextKey,(LPCTSTR)sData,(LPCTSTR)sPath); 
         } 
    }
    

    und so rufts du sie wieder ab

    char cBufferSection[4096]=""; 
    char cBufferKey[4096]=""; 
    DWORD dwSecSize = sizeof(cBufferSection); 
    DWORD dwKeySize = sizeof(cBufferKey); 
    sPath = "C:\\MeineIni.ini"; 
    sSection.Empty(); 
    DWORD dwCountSection = GetPrivateProfileSectionNames((LPTSTR)cBufferSection, dwSecSize, (LPCTSTR)sPath);
    
    for(DWORD dwloop=0;dwloop<dwCountSection;dwloop++) 
    { 
         if(cBufferSection[dwloop]!='\0') 
             sSection+=cBufferSection[dwloop]; 
         else 
         { 
            DWORD dwCountKey = GetPrivateProfileSection((LPCTSTR)sSection,(LPTSTR)cBufferKey,dwKeySize,(LPCTSTR)sPath);
    
            CString sKeys; 
            for(DWORD dwloop2=0;dwloop2<dwCountKey;dwloop2++) 
            { 
                 if(cBufferKey[dwloop2]!='\0') 
                     sKeys+=cBufferKey[dwloop2]; 
                 else 
                     sKeys+=",\n"; 
             } 
              MessageBox(sKeys,sSection); 
              sSection.Empty(); 
             } 
     }
    


  • jamina... was meisnt du eigentlich was wir hir sind?! Meine Lösung ist genau das wonach du gefragt hast! Es speichert in eine Datei ob du die CheckBox angeklickt hast oder net und beim laden setzt es wieder den status.



  • Herzlichen Danke an euch allen
    @ Evil >> sorry, es war nicht so gemeint... ich dachte nur, dass ich mich vielleicht undeutlich ausgedrückt habe 🙂
    Gruß, jamina



  • Was eine Endung soll dann die Datei haben?

    wie wäre es mit xxx.jam? 😉
    Wenn Du flexibel bleiben willst, kannst Du auch XML / TinyXML verwenden oder die Registry.


Anmelden zum Antworten