Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Schriftdateiname auslesen ...

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
25.12.2002, 10:05 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hallo,
ich hab mit nach dem VC++ in 21 Tagen einen Schriftbrowser gebaut, ich möchte nun noch wissen wie der Dateiname der Schrift lautet, da ich sonst nicht weiß wie ich eine schrift löschen/etz kann ...

Ich möchte mir nämlich einen Fontmanager programmieren, sowas wie der/die/das ATM unter Mac

Gibt es vielleicht eine einfachere Möglichkeit Schriften zu entfernen bzw aus dem Fontordner zu kopieren wenn man nur den Schriftnamen hat?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.12.2002, 20:08 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo Flo,
hmm... Könnte über die Registry laufen ?gruebel?

C++:
void CTestDlg::OnButton1()
{
    LOGFONT lf;
    CString FontFileName;
    lstrcpy(lf.lfFaceName, _T("Courier New"));
    FontFileName = GetFontFileName(lf);
    TRACE("%s\n",FontFileName);
}

CString GetFontFileName(LOGFONT lplf)
{
    CString FontFace = "";
    CString LogFace = lplf.lfFaceName;
    CString FileName = "";

    //OPEN REGISTRY KEYS
    HKEY hKey = NULL;
    LONG lRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software", 0, KEY_READ, &hKey);
    if (lRes == ERROR_SUCCESS){
        lRes = RegOpenKeyEx(hKey, "Microsoft", 0, KEY_READ, &hKey);
        if (lRes == ERROR_SUCCESS){
            lRes = RegOpenKeyEx(hKey, "Windows NT" /*Win9x "Windows"*/, 0, KEY_READ, &hKey);
            if (lRes == ERROR_SUCCESS){
                lRes = RegOpenKeyEx(hKey, "CurrentVersion", 0, KEY_READ, &hKey);
                if (lRes == ERROR_SUCCESS){
                    lRes = RegOpenKeyEx(hKey, "Fonts", 0, KEY_READ, &hKey);
                    if (lRes == ERROR_SUCCESS){
                        char cName[256];
                        DWORD index = 0;
                        DWORD cbName = 256;
                        DWORD type;
                        unsigned char cData[256];
                        DWORD cbData = 256;
                        
                        while(RegEnumValue(hKey, index, cName, &cbName, NULL, &type, cData, &cbData) == ERROR_SUCCESS){
                            index++;
                            cbName = 256;
                            cbData = 256;
                            FontFace = CalculateFontNameFromRegValue(cName);
                            CString message;
                            if(FontFace== LogFace){
                                FileName = cData;
                                return FileName;
                            }
                        }
                        index = 0;
                        cbName = 256;
                        cbData = 256;
                        while(RegEnumValue(hKey, index, (char*)LPCTSTR(cName), &cbName, NULL, &type, cData, &cbData) == ERROR_SUCCESS){
                            index++;
                            cbName = 256;
                            cbData = 256;
                            FontFace = CalculateFontNameFromRegValue(cName);
                            CString message;
                            if(FontFace.Left(LogFace.GetLength()) == LogFace){
                                FileName = cData;
                                return FileName;
                            }
                        }
                    }
                }
            }
        }
    }
    FileName = "";
    return FileName;
}


CString CalculateFontNameFromRegValue(CString regname)
{
    CString newname;
    int loc = regname.Find('(', 0);
    if(loc!=-1){
        newname = regname.Left(loc);
        newname.TrimRight();
    }
    return newname;
}

--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 26.12.2002 um 20:40 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.12.2002, 08:20 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


oi!

ohne dich Uwe w?rde ich manchmal verzweifeln (mist du wei?t immernoch mehr als ich )


hae? wieso macht er immer ein fragezeichen f?r meine Sonderzeichen?
--
class God : public ChuckNorris { };

Dieser Post wurde am 27.12.2002 um 08:21 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.12.2002, 08:32 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


So neustart, etz sollte es wieder gehen üöä ...

was jetzt nach einem test seltsam ist das er bei manchen die Dateinamen nicht findet:

@Batang
Calligraph421 BT
usw ...

Warum das?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
29.12.2002, 18:07 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo Flo,

Zitat:
FloSoft postete
was jetzt nach einem test seltsam ist das er bei manchen die Dateinamen nicht findet:
Warum das?


Sorry war ein paar Tage zum Ski fahren...
Hab jetzt bei mir alle im System registrierten Fonts mal getestet. Die Dateinamen werden eigentlich alle korrekt zurück geliefert. Sind die Fonts bei Dir richtig angemeldet? Oder sind diese Bestandteil einer Software?
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 29.12.2002 um 18:07 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.12.2002, 08:33 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hmm wahrscheinlich, das wär jetzt auch nicht so schlimm, nur:

1. wie kann ich schriften am einfachsten "anmelden",
2. wie kann ich sie wieder "abmelden",

ohne neustarten zu müssen?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
30.12.2002, 09:51 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo Flo,

C++:
int AddFontResource(
  LPCTSTR lpszFilename   // pointer to font-resource filename
);
BOOL RemoveFontResource(
  LPCTSTR lpFileName   // pointer to font-resource filename
);
sollte Deinen Ansprüche genügen.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
30.12.2002, 10:12 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


oh die befehle hab ich wohl übersehen *lol*

hab mal in der registry nachgeschaut, da stehen alle fonts drin, nur: manche einträge heißen anders als der fontfacename, ich hab inzwischen bis auf paar einzelne die meißten dateinamen in dem ich aus den namen beim vergleichen die leerzeichen rauschneide ...
--
class God : public ChuckNorris { };

Dieser Post wurde am 30.12.2002 um 10:14 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
30.12.2002, 10:53 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


jetzt hab ich nur noch das problem das wenn ich nur den filenamen hab (unregistrierte schrift)

wie ich die ohne registrieren anzeigen kann.

mit CreateFont funktioniert das nicht (wenn ich als Fontname Ordner & dateiname angebe, nimmt er arial)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
30.12.2002, 12:21 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo Flo,

Zitat:
FloSoft postete
mit CreateFont funktioniert das nicht (wenn ich als Fontname Ordner & dateiname angebe, nimmt er arial)

Lass Dir mal lpszFace bzw. lpszFacename (je nachdem ob CFont oder API Funktion) im Überwachungsfenster anzeigen. Da ist etwas "faul" bzw. NULL
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: