swprintf formatiert nicht wie gewünscht



  • Grüsse,

    ich habe ein kleines Problemchen mit der Funktion swprintf.

    Und zwar ich mir bei einem Mausclick in einem Fenster die Position des Cursors aus (in der wndproc).

    Aus dem lParam der message (WM_LBUTTONDOWN) lese ich die x- und y-Koordinate aus, und möchte die dann erstmal mit swprintf in einen wchar-Array speichern um sie dann via TextOut(...) im Fenster zu printen.

    Die Koordinate wird auch korrekt ausgelesen (lasse nebenbei eine Konsole laufen und dort sind die Werte korrekt), allerdings formatiert mir swprintf den Wert ab und an korrekt - und manchmal eben nicht.

    Kurz der code (steht wie gesagt in wndproc):
    Hier wird jetzt nur die y-Koordinate gezeigt.

    case WM_LBUTTONDOWN: {
    		unsigned short xcoord = LOWORD(lparam);
    		unsigned short ycoord = HIWORD(lparam);
    		wchar_t coords[10] = {0};
    
    		int anzahlchars = swprintf(coords,L"%hd",ycoord);
    		std::wcout	<< L"swprintf: " 
    					<< anzahlchars
    					<< L" -- y-coord:"
    					<< coords[0]<<coords[1]<<coords[2]
    					<< L" -- Groesse: "
    					<<sizeof(HIWORD(lparam))<<"  "<<sizeof(ycoord)
    					<<std::endl;
    		TextOut(hDC,0,0,coords,anzahlchars);
    		break;
    }
    

    HIWORD() ist ein Makro und lautet:

    #define HIWORD(l)           ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff))
    

    Was mich wundert ist, dass es mit der x-Koordinate wunderbar klappt, aber bei der y-Koordinate Probleme gibt. Zwar wird sie meistens korrekt angezeigt, aber manchmal eben nicht.
    Was mir dabei aufgefallen ist - (hm wie soll ich das jetzt beschreiben?):
    War beispielsweise die y-coord des vorherigen clicks 156 (also 3 digits), und der aktuelle click ist bei 30 oder beispielsweise 8 (weniger als 3 digits), so wird zwar die neue Koordinate angezeigt aber gleichzeitig werden noch 1 oder 2 weitere Ziffern (sodass die Anzahl insgesamt wieder 3 ist) angehängt, und zwar die letzten beiden oder die letzte des vorherigen clicks.

    Beispiel:
    click --> Koordinate 24 --> wird richtig als 24 angezeigt
    click --> Koordinate 192 --> wird richtig als 192 angezeigt
    click --> Koordinate 8 --> wird falsch angezeigt als 892

    Am macro kann es eigentlich nicht liegen, da die Koordinaten in der Konsole richtig ausgegeben werden.
    Ich komm aber nicht drauf, warum das so ist.



  • ARGHL, ich nehm alles zurück Oo

    Problem erkannt, und hatte nichts mit swprintf zu tun.
    (sondern damit, dass das Fenster nicht neugezeichnet)

    heuuul - sowas einfaches und ich grübel hier seit Ewigkeiten Oo


Anmelden zum Antworten