Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Cyianor Super JLI'ler
Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 03.01.2003, 13:59 Titel: Aktion Verzögern |
|
|
wie kann ich es machen, das eine Variable nur jede Sekunde um 2 erhöht wird?? |
|
Nach oben |
|
|
Jörg JLI MVP
Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 03.01.2003, 16:02 Titel: |
|
|
Zum Beispiel mit einem Timer, der einmal pro Sekunde ein Event sendet. Schaue fuer Informationen dazu in die MSDN unter dem Stichwort SetTimer oder WM_TIMER. _________________ www.messiahzone.de.vu |
|
Nach oben |
|
|
DaN00b JLI'ler
Anmeldedatum: 10.08.2002 Beiträge: 159
Medaillen: Keine
|
Verfasst am: 03.01.2003, 23:53 Titel: |
|
|
oder man macht sich selber en timer mit timeGetTime() _________________ Carpe Diem - Seize the day - Nütze den Tag! |
|
Nach oben |
|
|
Cyianor Super JLI'ler
Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 04.01.2003, 10:40 Titel: |
|
|
Hi, also ich hab in der MSDN nach SetTimer gesucht und dann auch was gefunden:
Code: | UINT SetTimer(
HWND hWnd, // handle of window for timer messages
UINT nIDEvent, // timer identifier
UINT uElapse, // time-out value
TIMERPROC lpTimerFunc // address of timer procedure
);
|
Also der erste und dritte Parameter sind mir klar, aber was muss man beim zweiten und dritten Parameter angeben.
PS: Ich hab des in der MSDN leider net ganz verstanden, bin noch nicht so gut in Englisch. |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 04.01.2003, 11:04 Titel: |
|
|
Hallo,
für
UINT nIDEvent
übergist du einen beliebigen (aber in deinem Programm eindeutigen) Wert.
Wenn du z.B. mehrere Timer verwendest, dient dieser Wert dazu den Timer zu identifizieren.
TIMERPROC lpTimerFunc brauchst du nur, wenn du dir eine eingene Timer-Behandlungsroutine schreiben willst und keine WM_TIMER Nachrícht in der Callback Funktion bekommen willst. z.B.:
Code: |
#define MY_TIMER_1 1001
SetTimer(hWnd,MY_TIMER_1,100,0);
...
KillTimer(hWnd,MY_TIMER_1);
|
Christian |
|
Nach oben |
|
|
Cyianor Super JLI'ler
Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 04.01.2003, 11:57 Titel: |
|
|
In meiner Callbackfunktion kann ich WM_TIMER nicht gebrauchen, da ich den Timer in na Klasse verwende und da soll dann auch was passieren wenn der Timer abgelaufen ist. |
|
Nach oben |
|
|
Cyianor Super JLI'ler
Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 04.01.2003, 11:58 Titel: |
|
|
Aber was muss ich dann machen?? |
|
Nach oben |
|
|
Jörg JLI MVP
Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 04.01.2003, 12:59 Titel: |
|
|
Eine Klassenmethode kannst du als Callback-Funktion leider nicht verwenden, es sei denn, sie ist statisch. Du könntest das so machen, das in deiner WindowsProc(), wenn WM_TIMER gesendet wurde, die Klassenmethode von da aus aufgerufen wird, also etwa so:
Code: |
CKlasse instanz;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_TIMER:
if (wParam==MY_TIMER_1)
instanz.TimerEvent();
break;
...
}
}
|
_________________ www.messiahzone.de.vu |
|
Nach oben |
|
|
Jörg JLI MVP
Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 04.01.2003, 13:09 Titel: |
|
|
Noch ne einfachere Möglichkeit, das zu machen und die mir grad noch eingefallen ist, ist, indem du als Timer-ID die Adresse der Klasseninstanz nimmst, die die Timernachricht erhalten soll.
Beispielsweis so:
Code: |
class CKlasse
{
public:
CKlasse() //konstruktor
{
SetTimer(g_hWnd,(UINT_PTR)this,1000,(TIMERPROC)WndProc);
m_nVariable=0;
}
void TimerEvent()
{
m_nVariable++;
}
private:
int m_nVariable;
};
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_TIMER:
((CKlasse*)wParam)->TimerEvent();
break;
}
}
|
Wenn du jetzt eine Instanz von CKlasse anlegst, registriert sie automatisch einen Timer, der TimerEvent() dieser Instanz aufruft. Denk noch daran, den Timer im Destruktor oder sonstwo zu killen.
Jörg _________________ www.messiahzone.de.vu |
|
Nach oben |
|
|
|