[gelöst] permanente Variablen über WM_LBUTTONDOWN



  • Hallo liebe Community,

    ich hoffe ich bin hier richtig mit meinem WInAPI Problem und bedanke mich schonmal im Vorraus für ewaige Lösungshilfen. 😉

    Ich programmier seid ungefähr 2 Wochen mit C und WINAPI und arbeite aktuell an einer Darstellung eines 3D Wellenmodells als 2D Fläche für meinen Arbeitgeber.

    Den Part habe ich soweit auch schon gelöst, ich habe einen Timer der regelmäßig in einem Array xyz Informationen für ein 500x500 Pixelfeld erzeugt und ich kann die Pixel anzeigen lassen.

    Der nächste Schritt ist nun eine Pause Funktion gesteuert über die Maus und da hab ich schwierigkeiten.

    Auszüge aus dem Quellcode:

    bool pause = false; (global)

    case WM_LBUTTONDOWN:
    {
    pause = true;
    return 0;
    }

    case WM_TIMER:
    {

    switch (wParam)
    {
    case ID_TIMER_COLOR:
    {

    if (pause == true) {
    [...]
    Hier wird mein Array berechnet + Fenster neu gezeichnet
    [...]
    }
    }
    return 0;
    }

    Nach meinem Verständis müsste es recht einfach sein. Die globale bool-Variable verhindert im Zusammenhang mit der If-Verzweigung das ein neues Array berechnet und das Fenster neu gezeichnet wird. Das Programm pausiert.

    Nun drücke ich die Maustaste. Die globale Variable wechselt auf true und die Schleife sollte ganz normal ausgeführt werden.

    Stattfinden tut aber, das das Zeichenpeogramm genau einen Arbeitschritt ausführt und dann wieder auf Pause geht, bis ich die Maustaste nochmal drücke. Als wenn am Ende der If-Verzweigung die bool Variable wieder auf false springt.

    Hat jemand ne Ahnung woran das liegen könnte?



  • Klingt, als ob die Variable pause nicht global, sondern innerhalb der Windowsprozedur deklariert wäre ...



  • Ich hab die Variable nun mal na möglichst hoher Stelle gesetzt und tatsächlich nun läuft es normal wie es soll. Ich versteh aber nicht den Unterschied zwischen beiden Positionen?

    Aufjedenfall schonmal Danke. 🙂

    Aktuell:

    #define STRICT
    #include <Windows.h>
    #include <math.h>
    [B]bool pause = false;[/B]
    const char szTitel[] = "BAW Wellenmodell 1";
    #define ID_TIMER_COLOR  1
    short matrix[500][500] = { 0 };
    bool bchange = true;
    double z = 1;
    const double pi = 3.14159;
    
    LRESULT CALLBACK WndProc(
    					HWND,
    					UINT,
    					WPARAM,
    					LPARAM);
    
    int WINAPI WinMain (
    					HINSTANCE hInstance,
    					HINSTANCE hPrevInstance,
    					PSTR szCmdLine,
    					int iCmdShow)
    

    Alt:

    #define STRICT
    #include <Windows.h>
    #include <math.h>
    const char szTitel[] = "BAW Wellenmodell 1";
    #define ID_TIMER_COLOR  1
    short matrix[500][500] = { 0 };
    bool bchange = true;
    double z = 1;
    const double pi = 3.14159;
    [B]bool pause = false; [/B]
    
    LRESULT CALLBACK WndProc(
    					HWND,
    					UINT,
    					WPARAM,
    					LPARAM);
    
    int WINAPI WinMain (
    					HINSTANCE hInstance,
    					HINSTANCE hPrevInstance,
    					PSTR szCmdLine,
    					int iCmdShow)
    


  • Larkis schrieb:

    Ich hab die Variable nun mal na möglichst hoher Stelle gesetzt und tatsächlich nun läuft es normal wie es soll. Ich versteh aber nicht den Unterschied zwischen beiden Positionen?

    Tja, bei den geposteten Versionen sollte es in der Tat keine Unterschiede geben!



  • Ok dann hake ich das unter Marotten des Maschinengeists ab. 😃

    Npchmal vielen Dank für die Hilfe. 🙂


Anmelden zum Antworten