|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
pati` Mini JLI'ler
Alter: 39 Anmeldedatum: 02.03.2008 Beiträge: 3
Medaillen: Keine
|
Verfasst am: 02.03.2008, 16:12 Titel: D3DXFONT_DESC und setzen von FaceName |
|
|
Hallo,
ich suche nun bereits drei Stunden nach einer Lösung für folgendes Problem. Ich wollte das Beispiel mit der Textausgabe nachvollziehen.
Code: |
void CreateD3DFont(void)
{
D3DXFONT_DESC Font = {0};
strcpy_s(Font.FaceName, "Arial");
D3DXCreateFontIndirect(lpD3DDevice, &Font, &lpD3DFont);
}
|
Ich hatte zunächt LOGFONT als Typ verwendet, nach einigen Recherchen im Internet habe ich herausgefunden, das nach einem SDK-Update der Typ nun D3DXFONT sein muss.
Das Problem dabei ist, wenn ich nun versuche die Schriftart zu setzen, bekomme ich immer wieder ein Fehler das das Typcasting nicht stattfinden kann. Deshalb habe ich mir die Hilfe vom SDK zu der Funktion "D3DXCreateFontIndirect" und dem Typ "D3DXFONT_DESC" angeschaut.
Dort erfährt man das abhängig davon ob der Compiler UNICODE benutzt oder nicht entweder "D3DXFONT_DESCW" oder "D3DXFONT_DESCA" zum auflösen benutzt wird.
Ich verwende Microsoft Viusal C++ 2008 Express Edition und den DirectX SDK Nov.2007. Mein Compiler nutzt UNICODE und verwendet demzufolge "D3DXFONT_DESCW".
Wenn ich
Code: |
void CreateD3DFont(void)
{
D3DXFONT_DESCA Font = {0};
strcpy_s(Font.FaceName, "Arial");
D3DXCreateFontIndirect(lpD3DDevice, &Font, &lpD3DFont);
}
|
verwende dann kann zwar das strcpy_s verarbeitet werden, aber die Funktion "D3DXCreateFontIndirect" verlangt als 2. Parameter den Typ "D3DXFONT_DESCW". Egal wie ich es drehe, entweder strcpy funktioniert oder halt " D3DXCreateFontIndirect".
Ich würde mich freuen wenn Jemand eine Lösung parat hat, da ich einfach nicht mehr nachvollziehen kann, wie mit UNICODE die Schriftart korrekt zugewiesen wird. Die bereits in diesem Forum notierten Lösungen funktionieren nicht, habe ich alle ausprobiert.
Vielen Dank im Vorraus,
pati` |
|
Nach oben |
|
|
pati` Mini JLI'ler
Alter: 39 Anmeldedatum: 02.03.2008 Beiträge: 3
Medaillen: Keine
|
Verfasst am: 02.03.2008, 16:37 Titel: |
|
|
Ja manchmal sieht man den Wald vor lauter Bäumen nicht ...
habs gefunden ...
Code: |
void CreateD3DFont(void)
{
D3DXFONT_DESCA Font = { 0 };
strcpy_s(Font.FaceName, "Arial");
D3DXCreateFontIndirectA(lpD3DDevice, &Font, &lpD3DFont);
}
|
Hab vergessen das wenn ich "D3DXFONT_DESCA" als Typ nutze ja auch explizit die richtige Funktion ("D3DXCreateFontIndirectA") dazu verwenden kann.
Das erklärt aber immer noch nicht warum es nicht mit "D3DXFONT_DESCW" als Typ geht. Naja wer es weiß kann es hier ja preisgeben =). |
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 02.03.2008, 17:34 Titel: |
|
|
Probier mal:
Code: | wcscpy(Font.FaceName, L"Arial"); |
http://msdn2.microsoft.com/en-us/library/kk6xf663.aspx _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
|
pati` Mini JLI'ler
Alter: 39 Anmeldedatum: 02.03.2008 Beiträge: 3
Medaillen: Keine
|
Verfasst am: 03.03.2008, 11:22 Titel: |
|
|
Vielen Dank, damit funktioniert es!
Über die Seite bin ich getern auch bereits gestolpert. Doch woher erkennt man das man bei wcscpy() ein "L" vor den 2. Parameter notieren muss?
Bleibt nur noch zu klären wovon es abhängig ist ob mein Compiler UNICODE verwendet und somit "D3DXFONT_DESC" mit "D3DXFONT_DESCW" und "D3DXCreateFontIndirect" mit "D3DXCreateFontIndirectW" auflöst. Das gleiche passiert übrigens auch mit den restlichen Funktionen, z.B. DrawText, etc..
Es wäre praktisch wenn die Funktionen einfach nur "D3DXCreateFontIndirect" oder "DrawText" heißen würden. Ich bin die IDE Optionen und Projekteigenschaften bereits durchgegangen, habe aber zum Thema UNICODE nichts gefunden. Kann mir da evtl. Jemand auf die Sprünge helfen? |
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 03.03.2008, 12:57 Titel: |
|
|
Ab dem Visual Studio 2005 ist UNICODE standardmäßig aktiviert.
Alle Windowsfunktionen nehmen dann statt char, wchar_t an.
Intern wird das darüber gelöst das eine Funktion wie z.B. DrawText ein define ist und dann entweder auf DrawTextA oder DrawTextW verweist (wobei W die mit Unicode ist).
Damit der Compiler weiß, dass eine Zeichenkette aus wchar_ts besteht, schreibt man ein L davor.
Wenn du flexibel bleiben willst, verwendest du also immer die Funktion ohne A oder W. Und du kannst das TCHAR makro verwenden, das dann entweder ein char oder ein wchar_t ist, je nach dem, ob UNICODE definiert ist oder nicht. Für Zeichenketten kannst du dann auch das TEXT makro verwenden, dass dann bei Bedarf ein L davor hängt. Die ganzen Funktionen der C-Runtime gibt es dann auch noch in einer T Art, die dann auch, je nachdem, auf die wchar_t oder die char Variante verweist.
http://blogs.msdn.com/oldnewthing/archive/2004/02/12/71851.aspx _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|