OldSchoolHack

Registrieren / Anmelden Deutsch

Gdi+ DrawString gibt Symbole statt Text aus


icon Gdi+ DrawString gibt Symbole statt Text aus #1

Anmeldungsdatum: Okt 2011

Beiträge: 48

Ich zeichne mit Gdi+, Boxen und sowas gehen, aber wenn ich Strings ausgeben will werden nur wirre Zeichenkombinationen ausgegeben.


CPP Code:
  1. CDrawPlus()
  2. {
  3. GdiplusStartup(&this->dwGdiStartup, &gdiStartup, NULL);
  4. }
  5. //[...]
  6. void Init(HDC hdc, Color clr, char* fontname, int fontsize)
  7. {
  8. this->p_gdiGraph = new Graphics(hdc);
  9. this->p_pen = new Pen(clr, 1);
  10. this->p_font = new Font((WCHAR*)fontname, fontsize);
  11. this->p_brush = new SolidBrush(clr);
  12. }
  13. //[...]
  14. void DrawString(int x, int y, Color clr, char* text, ...)
  15. {
  16. va_list va_alist;
  17. char buffer[1024] = { 0 };
  18. va_start(va_alist, text);
  19. vsprintf(buffer, text, va_alist);
  20. va_end(va_alist);
  21.  
  22. this->p_brush->SetColor(clr);
  23. this->p_gdiGraph->DrawString((WCHAR*)buffer, -1, this->p_font, PointF(x,y), this->p_brush);
  24. }
edit: da in der zeile müsste das: char buffer[1024] = {'\0'}; stehen, und nix mit
TEXT Code:
  1. 0[/ code]
  2. [code=cpp]
  3. gDraw.Init(GetWindowDC(hWnd), Gdiplus::Color(255,255,255,255), "Arial", 12);
  4. //[...]
  5. gDraw.DrawString(iScreenPos[0], iScreenPos[1]-15, Gdiplus::Color(255,settings.ct_r, settings.ct_g, settings.ct_b), "HP: %i ", pPlayer[i].health);


Auf meinem Bildschirm wird dann sowas anstatt der HP angezeigt:
Um Links zu sehen, musst du dich registrieren

Jemand ne Idee woran das liegen könnte oder hatte den Fehler schonmal?

icon #2

Anmeldungsdatum: Aug 2007

Beiträge: 8643

Benutzer-Bewertung:

199 positiv
33 negativ
das liegt dadran, dass dein Projekt Unicode verwendet, du aber normale char's. Entweder stellst du dein Projekt auf MultiByte Character um oder du änderst deinen Code zu unicodefähigem.

CPP Code:
  1. void DrawString(int x, int y, Color clr, wchar_t* text, ...)
  2. {
  3. va_list va_alist;
  4. wchar_t buffer[1024] = { 0 };
  5. va_start(va_alist, text);
  6. vswprintf(buffer, text, va_alist);
  7. va_end(va_alist);
  8.  
  9. this->p_brush->SetColor(clr);
  10. this->p_gdiGraph->DrawString(buffer, -1, this->p_font, PointF(x,y), this->p_brush);
  11. }

Die Fehlermeldung wegzucasten ( (WCHAR*)buffer ) funktioniert nicht (wie du siehst )

greetz KN4CK3R

__________________

Hallo
icon #3

Anmeldungsdatum: Okt 2011

Beiträge: 48

Mein Projekt steht auf Multibyte, aber das mit wchar_t probier ich kurz mal...
Edit: Jop Distance und HP geht, Name noch nicht, aber darüber hattest du ja schon in nem andern Thread gepostet. (MultiByteToWideChar)
Edit2: Funktioniert wunderbar, danke!