Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Stringzuweisung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.12.2004, 06:41 Uhr
StarMan



Hallo ;-)

Folgendes Experimentierfeld....


C++:
#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

char str[] = "Dies ist ein Test";       // Teststring

~ ~


LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
HWND hwndButton1;

switch (message)
{
   case WM_PAINT:
        BeginPaint (hwnd, &ps);
        SetTextColor(ps.hdc, RGB(124,236,120) );
        SetBkMode(ps.hdc, TRANSPARENT);
        TextOut (ps.hdc, 20, 80, str, sizeof(str)-1);
        EndPaint (hwnd, &ps);
        break;

   case WM_CREATE :
        hwndButton1 = CreateWindow ( "button", "TEST",
                                    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                                    150, 20, 100, 40, hwnd, (HMENU)1,
                                    (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE), NULL);
        break;

   case WM_COMMAND:
        if(LOWORD(wParam) == 1)
        {                          
        char str[] = "Hallo";        // Neuer Teststring... wird nicht angezeigt :-(          
        InvalidateRect(hwnd, NULL, TRUE);   // neu zeichnen
        }    
        break;
      
   case WM_CLOSE:
        DestroyWindow(hwnd);
        break;
      
   case WM_DESTROY:
        PostQuitMessage (0);
        break;
      
   default:
        return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}


Ich kapiere nicht warum es nicht möglich ist,
im case-Zweig: "WM_COMMAND" dem char str[]
einen neuen Text zuzuweisen? Es wird nach wie vor der ganz oben
stehende String: "Dies ist ein Test" ausgegeben.

Dieser Post wurde am 12.12.2004 um 06:43 Uhr von StarMan editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.12.2004, 09:31 Uhr
Oliver
S2-Pixelgeneral


Probier's mal so (ungetestet):


C++:
#include <windows.h>
#include <cstring>
using namespace std;
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

char str[] = "Dies ist ein Test";       // Teststring

~ ~


LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
HWND hwndButton1;

switch (message)
{
   case WM_PAINT:
        BeginPaint (hwnd, &ps);
        SetTextColor(ps.hdc, RGB(124,236,120) );
        SetBkMode(ps.hdc, TRANSPARENT);
        TextOut (ps.hdc, 20, 80, str, sizeof(str)-1);
        EndPaint (hwnd, &ps);
        break;

   case WM_CREATE :
        hwndButton1 = CreateWindow ( "button", "TEST",
                                    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                                    150, 20, 100, 40, hwnd, (HMENU)1,
                                    (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE), NULL);
        break;

   case WM_COMMAND:
        if(LOWORD(wParam) == 1)
        {                          
        strcpy(str,"Hallo");        // Neuer Teststring... wird nicht angezeigt :-(          
        InvalidateRect(hwnd, NULL, TRUE);   // neu zeichnen
        }    
        break;
      
   case WM_CLOSE:
        DestroyWindow(hwnd);
        break;
      
   case WM_DESTROY:
        PostQuitMessage (0);
        break;
      
   default:
        return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}


--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.12.2004, 11:34 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Weil dein 2ter String nur lokal innerhalb von
if(LOWORD(wParam) == 1)
{
}
gültig ist.

Wenn du da nun InvalidateRect wird nur die entsprechende Nachricht an deinen Message Queue angehangen und WndProc erneut mit dieser Nachricht aufgerufen. Dabei wird dann in den WM_PAINT Teil gegangen wo er nur die globale Variable str kennt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.12.2004, 11:47 Uhr
StarMan



Ja danke Oliver, das geht
Jetzt frage ich aber immer noch, warum das mit einem Kopierbefehl und nicht
mit dem simplen Zuweisungsoperrator ( geht?
Weil, in der dritten Zeile gings doch auch damit?

Und wo der Code schon mal gepostet ist.
Wie sieht das eigentlich mit der "Switch-Anweisung" aus:
Wie verläst man eigentlich sinnvoll die einzelnen case-Zweige,
mit "break" oder "return 0" ?
Manche schreiben das so, mache so.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.12.2004, 11:57 Uhr
StarMan



Hallo Guybrush Threepwood,

aaah ja, danke

Dieser Post wurde am 12.12.2004 um 12:00 Uhr von StarMan editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.12.2004, 15:00 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Du hast das glaube ich immer noch nicht verstanden. Du hast deinem String keinen neuen Wert zugewiesen sondern eine komplett neue Variable angelegt die nichts mit der anderen zu tun hatte.

break und return sind zwei komplett verschiedene Sachen. Break verlässt den aktuellen Block also was zwischewn {} steht.
return beendet die aktuelle Funktion.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: