Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

__stdcall*

Treue Seele

  • »__stdcall*« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Dauchingen

Beruf: Schüler

  • Private Nachricht senden

1

26.11.2005, 09:19

Windows Timer Tutorial

Hallo Leute,

Kennt ihr ein gutes Tutorial über Windows Timer?

Hab da was für MFC gefunden, will die Timer aber mit der WinAPI benutzen.

__stdcall*

Anonymous

unregistriert

2

26.11.2005, 10:47

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// ########################################################################### 

// Datei:        main.cpp 

// ########################################################################### 

// Autor:        Patrick Ullmann 

// Erstellt:     21.02.2005 

// Änderungen:   21.02.2005 (Patrick)  Datei erstellt 

// ########################################################################### 

// Beschreibung: Hauptdatei 


// I N C L U D E S ########################################################### 

#include <windows.h> 

// D E F I N I T I O N E N ################################################### 

const unsigned int TIMER_ID_1 = 0; 

// F U N K T I O N E N ####################################################### 

    // Testet ob die maus bewegt wurde zwischen 2 Funktionsaufrufen 

inline bool cursormoved (void) 
{ 
        // Statische Objekte für die Positionen! 

    static ::POINT pos_old; 
    static ::POINT pos_curr; 
  
        // Momentane Position holen 

    ::GetCursorPos (&pos_curr); 

        // Vergleichen und ggf. 'false' zurück geben 

    if (pos_old.x == pos_curr.x && pos_old.y && pos_curr.y) 
        return (false); 

        // Aus neu mach alt, so ist das halt im Leben! 

    pos_old.x = pos_curr.x; 
    pos_old.y = pos_curr.y; 

        // Maus wurde bewegt ;) 

    return (true); 
} 

    // Einsprungspunkt des Programmes 

int __stdcall WinMain (HINSTANCE__* instance, HINSTANCE__* prevInstance, char* command, int show) 
{ 
        // Nachrichtenstruktur 

    ::MSG message; 

        // Struktur nullen 

    ::ZeroMemory (&message, sizeof(::MSG)); 

        // Timer 'TIMER_ID_1' auf 2.000 Millisekunden stellen 

    ::SetTimer (NULL, TIMER_ID_1, 2000, NULL); 
  
        // Nachrichten holen und evtl. Fehler kompensieren 

    while ((::GetMessage(&message, NULL, NULL, NULL) !=  0) && 
           (::GetMessage(&message, NULL, NULL, NULL) != -1)) 
    { 
            // Ist die Message der Timer? ACHTUNG: Hier wird die 

            // Fensternachricht benutzt obwohl kein Fenster vorhanden ist! 

            // Da es kein HWND gibt, wird der globale WindowsTimer benutzt 

            // und dem Programm zur Verfügung gestellt. 

        if (message.message == WM_TIMER) 
        { 
                // Wurde der Mauscursor seit der letzten Nachricht vor 2.000 

                // Millisekunden nicht mehr bewegt? 

            if (!cursormoved()) 
            { 
                    // Schöne message ausgeben! 

                switch (::MessageBox (NULL, "Die Maus wurde seit 2.000 Millisekunden nicht mehr bewegt!\n" 
                                            "Möchten Sie Windows runterfahren um Energie zu sparen?\n\n" 
                                            "Denn Ihre letzte RWE-Rechnung war extrem hoch!", 
                                            "Hinweis", MB_YESNOCANCEL)) 
                { 
                    // Wenn 'JA' gedrückt wurde, geben wir einen schönen Text aus und beenden 

                    // das Programm! Hier kannst Du dann Deine ShutDown-Funktion einbauen. 

                case IDYES: { ::MessageBox (0, "fahre runter!", "Hinweis", MB_OK); return 0;    } break; 

                    // Wenn 'NEIN' gedrückt wurde beenden wir das Programm ganz einfach ohne 

                    // 'wenn und aber'. 

                case IDNO:  { return 0;                                                         } break; 

                    // Alles andere interessiert den Verlauf des Programmes nicht! 

                    // Das Programm soll weiterlaufen. 

                default : break; 
                } 
            } 
        } 
  
            // Übersetze die Virtuellen Key-Codes und verarbeite diese 

        ::TranslateMessage(&message); 
        ::DispatchMessage(&message); 
    } 

        // Nicht vergessen: TIMER zerstören! 

    ::KillTimer (NULL, TIMER_ID_1); 

        // Hier nix mit 'EXIT_SUCCESS'! Eine 0 soll her und kein 

        // #define, zum Xten male! ;) 

    return 0; 
}


Ansonsten msdn.microsoft.com << WM_TIMER, KillTimer, SetTimer. Da gibt es mehr aus genügend Infos mit Samples

edit: Also ich muss schon sagen: Kursive Kommentare sehen nicht nur scheiße aus sondern sind auch noch extrem schwer in Massen zu lesen. Kann man das Kursiv nicht rausmachen? Ist ja grauenhaft.