Schriftart auswählen welche nicht auf jedem Rechner exestiert



  • Ich hab ein kleines Spiel geschrieben in welchem ich jetzt die Schriftart ändern wollt. Eigentlich währe das ja kein Problem, nur die Schriftart wird standartgemäß nicht mit windows installiert weswegen ich sie mit dem spiel mitliefern wollte. Nur wie wähle ich diese dann im Spiel aus. Bei CreateFont kann man doch meines wissen nur bereits installierte schriften auswählen?



  • Ich gehe mal davon aus, dass Du die Schrift dann einfach während der Installation mitinstallieren musst. Ob es auch anders geht (die Schrift im Proghrammverzeichnis halten und von dort aus laden), weiß ich nicht.



  • Wenn die Schriftart im Fonts-Verzeichnis von Windows liegt (C:\WINDOWS\Fonts oder C:\WINNT\Fonts), dann kannst du sie über den letzten Parameter von CreateFont() angeben. Als CString-Objekt. Funktioniert auf jeden, hab's selbst schon oft gemacht.

    MfG

    Happosai



  • Es ist nur ein kleines Spiel, deswegen gibt es keine Installation, sondern es wird einfach nur die Exe gestartet. Deswegen kann ich die Schriftart auch nicht mitinstalieren lassen. Ich hab auch schon versucht das die Exe selbst überprüft ob die Schriftart im Fonts ordner liegt und gegebenenfalls diese dorthin kopiert, allerdings funktioniert das irgendwie nicht auf allen Rechnern.

    //Fonts Pfad auslesen
        CRegKey reg;
        reg.Open(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders");
        char pfad[100];
        unsigned long ul = sizeof(pfad);
        reg.QueryValue(pfad,"Fonts",&ul);
    
        CString FullPfad;
        FullPfad.Format("%s\\warehous.ttf",pfad);
    
        CFileStatus SFile;
        //Eigenen Pfad auslesen
        char path[MAX_PATH];
        GetModuleFileName(NULL,path,sizeof(path));
        int lbs = 0;
        CString MyPath = path;
    
        //letztes '\' suchen
        for (int i=0;i<MyPath.GetLength();i++)
            if (MyPath.Mid(i,1) == "\\")
                lbs = i;
    
        //Datei kopieren    
        if (CFile::GetStatus(FullPfad,SFile) == FALSE)
        {
            CopyFile(MyPath.Left(lbs) + "\\warehous.ttf",FullPfad,FALSE);
            Sleep(5000);
        }
    

    [ Dieser Beitrag wurde am 29.03.2003 um 23:01 Uhr von newvet editiert. ]



  • Dann biete doch neben der Exe-Datei noch die Schriftendatei zum Download an, mit einem Hinweis in der Readme-Datei, dass diese in den Fonts-Ordner kopiert werden muss.
    Warum muss es eigentlich unbedingt diese Schrift sein? Mit Setfont kann man doch meines Wissens auch lediglich bestimmte Kriterien für eine Schrift einstellen und es wird dann eine passende - auf dem Rechner installierte - gesucht. Oder habe ist das nur Wunschdenken von mir? 🙂



  • AddFontResource



  • kopiert eine Schriftartendatei ins Schriftartenverzeichnis



  • @newvet: Du kannst auch SHGetSpecialFolderLocation() benutzen, um den Fonts-Pfad zu ermitteln.


Anmelden zum Antworten