[C++] Windows.h ->string anzeigen

Jacal

Mitglied
Hallo zusammen,

Ich möchte mitr windows.h auf dem Bildschirm einen String erscheinen lassen.
Dazu habe ich folgendes geschrieben in meiner Datei:
Code:
         int  iKeyLength;
         
         hDC = BeginPaint(hWnd, &ps);
         string test;
         test = "Test";
         

            iKeyLength = wsprintf(szKeyStatus, "%d",test);
            
            GetTextExtentPoint32(hDC, szKeyStatus, iKeyLength, &size);                                  
 
            TextOut(hDC, rect.right / 2, rect.bottom / 2, szKeyStatus, iKeyLength);

         EndPaint(hWnd, &ps);

Wenn ich das Programm nun allerdings starte stürzt es einfach ab.
Wie kann ich jetzt einen String mittel windows.h erscheinen lassen?

Beste Grüße, Jacal
 
Hallo zusammen,

Ich möchte mitr windows.h auf dem Bildschirm einen String erscheinen lassen.
Dazu habe ich folgendes geschrieben in meiner Datei:
Code:
         int  iKeyLength;
         
         hDC = BeginPaint(hWnd, &ps);
         string test;
         test = "Test";
         

            iKeyLength = wsprintf(szKeyStatus, "%d",test);
Was willst du denn damit bezwecken? Du gibst mit dem Formatstring "%d" an, das das Argument danach ein Integer ist, du übergibst allerdings ein std::string Objekt. Das kann natürlich nicht funktionieren.

Vermutlich ist für szKeyStatus auch kein Speicher oder nicht genug Speicher reserviert? Du mußt schon etwas mehr von deinem Code rausrücken. Dann solltest du auch mal mit dem Debugger nachschauen, an welcher Stelle das Programm abstürzt.

Gruß
 
;) Das Problem wird dann noch sein, wenn er es dann alles korrigiert hat, das er nen MultiByte-String in nen WideByte-String umwandeln will ;)

C++:
typedef std::basic_string<TCHAR> tstring;

// Zeichenblock
::HDC hDC(::BeginPaint(hWnd, &ps));
{
    tstring str_sample("sample");

    // get string dimensions (in px)
    ::SIZE size;
    ::GetTextExtentPoint32(hDC, str_sample.c_str(), str_sample.length(), &size);                                  
    // print text at center (width / 2 - string.width / 2 | height / 2 - string.height / 2)
    ::TextOut(hDC, ((rect.right - rect.left) - size.cx) >> 1, ((rect.bottom - rect.top) - size.cy) >> 1, str_sample.c_str(), str_sample.length());
}
::EndPaint(hWnd, &ps);
 
;) Das Problem wird dann noch sein, wenn er es dann alles korrigiert hat, das er nen MultiByte-String in nen WideByte-String umwandeln will ;)

C++:
typedef std::basic_string<TCHAR> tstring;

// Zeichenblock
::HDC hDC(::BeginPaint(hWnd, &ps));
{
    tstring str_sample("sample");

    // get string dimensions (in px)
    ::SIZE size;
    ::GetTextExtentPoint32(hDC, str_sample.c_str(), str_sample.length(), &size);                                  
    // print text at center (width / 2 - string.width / 2 | height / 2 - string.height / 2)
    ::TextOut(hDC, ((rect.right - rect.left) - size.cx) >> 1, ((rect.bottom - rect.top) - size.cy) >> 1, str_sample.c_str(), str_sample.length());
}
::EndPaint(hWnd, &ps);

Danke, das hat soweit geklappt :)
Eine frage noch:
was bedeitet hinter str_sample das
- c_str()
-lenght()?
 
Nja du arbeitest mit der Klasse std::basic_string, dieser hat als Memberfunktion c_str, welche einen const-Zeiger auf den angegebenen Template-Parameter (in dem Fall TCHAR).
length() ist ebenfalls eine Memberfunktion und gibt einen std::string::size_type mit der Anzahl an Zeichen der Zeichenkette zurück
 
Zurück