OldSchoolHack

Register / Login English

Gdi+ DrawString gibt Symbole statt Text aus


icon Gdi+ DrawString gibt Symbole statt Text aus #1

Join Date: Oct 2011

Posts: 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:
Only registered and activated users can see links.

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

icon #2

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
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

Join Date: Oct 2011

Posts: 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!