OldSchoolHack

Register / Login English

Text Zentrieren (D3D)


icon Text Zentrieren (D3D) #1

Join Date: Apr 2010

Posts: 168

Ein Beispiel wie ich meinen Text zetriere.

[Editiert]

Parameter:
- text: Der zu Schreibende Text
- x1: Startpunkt auf der X-Achse
- x2: Endpunkt auf der X-Achse
- pFont: Ziel-Schriftart

CPP Code:
  1.  
  2. /* Berechnent die Startposition des Textes, welcher zentriert auf einen X-Achsenabschnitt gezeichnet werden soll ;-) */
  3. /* Textlängenberechnung: KN4CK3R @ oldschoolhack.de */
  4. INT CD3DMenu::GetCenterPosition(LPCWSTR text, INT x1, INT x2, LPD3DXFONT pFont)
  5. {
  6. if(pFont != NULL && (x1 + x2) > 0 && text != L"")
  7. {
  8. // Mittelpunkt der Zielfläche
  9. INT xM = x1 + (x2 - x1) / 2;
  10.  
  11. // Ziel-Rechteck
  12. RECT tmpRect = { 0, 0, 0, 0};
  13.  
  14. // Text zeichnen (Unsichtbar)
  15. pFont->DrawText(NULL, text, -1, &tmpRect, DT_CALCRECT, 0x0);
  16.  
  17. // Breite des Textes
  18. INT iLen = tmpRect.right;
  19.  
  20. return xM - (iLen / 2);
  21. }
  22.  
  23. return 0;
  24. }
  25.  


Benutzen könnte man dies dann so:

CPP Code:
  1.  
  2. // Zentrierte Textstartposition
  3. INT TEXT_START_POS = CD3DMenu::GetCenterPosition(L"ZeRoKiLLeR", 30, 180, pFont_Title);
  4.  

Danke an KN4CK3R für die tatsächliche Textlängenbrechnung !  

__________________

mfg ZeRoKiLLeR

*Hax? Nur solange man mit Hack besser als ohne ist * :schaden:

Only registered and activated users can see links.

Let's Rock ! :schaden:
icon #2

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
kann man auch einfacher haben

CPP Code:
  1. int Functions::GetCharLen(LPD3DXFONT Font, LPCTSTR szString)
  2. {
  3. RECT rect = {0,0,0,0};
  4. Font->DrawText(NULL, szString, -1, &rect, DT_CALCRECT, 0);
  5.  
  6. return rect.right;
  7. }
  8.  
  9. oshicod.pFunctions->DrawString(oshicod.pFunctions->SteamFont,300-(oshicod.pFunctions->GetCharLen(oshicod.pFunctions->SteamFont,"maybe someone can use this")/2),15,oshicod.pGui->STEAM_GELB,"maybe someone can use this");

__________________

Hallo
icon #3

Join Date: Apr 2010

Posts: 168

Danke KN4CK3R

Ich machs mir immer unnötig kompliziert

mFg

__________________

mfg ZeRoKiLLeR

*Hax? Nur solange man mit Hack besser als ohne ist * :schaden:

Only registered and activated users can see links.

Let's Rock ! :schaden:
icon #4

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
vorallem ist deine Version auch nicht genau.

CPP Code:
  1. INT iLen = (INT)(iTLen * tMetric.tmAveCharWidth - tMetric.tmMaxCharWidth);

anzunehmen, dass jeder Buchstabe so ungefähr dem Durchschnitt entspricht, ist nicht die beste Lösung

greetz KN4CK3R

__________________

Hallo
icon #5

Join Date: Apr 2010

Posts: 168

Vorallem bei einer Schriftart wie "Chiller" ;-)

Thx nochmal!

__________________

mfg ZeRoKiLLeR

*Hax? Nur solange man mit Hack besser als ohne ist * :schaden:

Only registered and activated users can see links.

Let's Rock ! :schaden: