Toon posts:

[visual C++] tijd

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben met visual c++ bezig en heb nu een statusbalk met de tijd. Alleen krijg ik dus de tijd te zien op het moment dat het scherm gecreeerd wordt. Weet iemand hoe je een bepaalde module uit een class om de seconde kan aanroepen ofzo, zodat de tijd loopt?

  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 19-08 19:06
je kan toch bij de waarde die je in het begin krijgt elke seconde 1 sec bij optellen? dan heb je een lopende tijd

  • whoami
  • Registratie: December 2000
  • Laatst online: 20:10
Kijk eens in de help naar de CTimer class.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ik zit te klooien met die berichten, maar echt lukken wil het niet. Als ik de message in WM_SIZE zet en dan de boel resize werkt het perfect. Ik kan er alleen nog niet achter komen hoe ik een bericht elke seconde kan laten plaatsvinden. Kan dat in de switch die alles verwerkt??

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:35

.oisyn

Moderator Devschuur®

Demotivational Speaker

SetTimer ()

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Heb je misschien ook een voorbeeld???

Verwijderd

Nou zeg, als je weet hoe je een WM_SIZE afvangt kun je ook wel achter SetTimer() en WM_TIMER komen.

Volgens de MSDN (heb je toch wel gelezen?) ziet SetTimer() er zo uit:
UINT_PTR SetTimer(
HWND hWnd, // handle to window
UINT_PTR nIDEvent, // timer identifier
UINT uElapse, // time-out value
TIMERPROC lpTimerFunc // timer procedure
);
Als je nou die lpTimerFunc gewoon NULL laat (staat ook in de MSDN) dan post windows elk timerinterval een WM_TIMER in je applicatie's messagequeue...

Verwijderd

Topicstarter
Op zaterdag 18 mei 2002 19:12 schreef Qlone het volgende:
Nou zeg, als je weet hoe je een WM_SIZE afvangt kun je ook wel achter SetTimer() en WM_TIMER komen.

Volgens de MSDN (heb je toch wel gelezen?) ziet SetTimer() er zo uit:
[..]

Als je nou die lpTimerFunc gewoon NULL laat (staat ook in de MSDN) dan post windows elk timerinterval een WM_TIMER in je applicatie's messagequeue...
Ik heb inderdaad ook de msdn gelezen, maar mij gaat het er om waar ik SetTimer neer moet zetten? Plus die timerId.. Ik heb de timer geen id gegeven dus wat moet ik daar invullen en hetzelfde geld voor de 3 variabele....

Verwijderd

Vlak nadat je je window en statusbalk hebt gecreeerd lijkt me een nette plek?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13:44
Denk eraan dat een Windows timer een 'soft timer' is; dat wil zeggen dat je er niet van uit kunt gaan dat je je events met een bepaalde nauwekeurigheid of periode ontvangt.

Als je, als respons op een timer event, je klok bijwerkt ('n seconde erbij ofzo) dan is de kans dus groot dat de weergegeven tijd op den duur gaat verlopen ten op zichte van de 'echte' tijd.

Verwijderd

Als je, als respons op een timer event, je klok bijwerkt ('n seconde erbij ofzo) dan is de kans dus groot dat de weergegeven tijd op den duur gaat verlopen ten op zichte van de 'echte' tijd.
Maar zo'n timer is redelijk nauwkeurig. Ok... je moet niet op een paar honderdste seconden gaan kijken en 't hangt maar helemaal af van hoe een programma zijn messages verwerkt, maar voor 't bijhouden van iets knulligs als een klokje werkt 't prima. Dan springt ie maar eens per half uur 2 seconden door ipv 1 :).
Ik heb inderdaad ook de msdn gelezen, maar mij gaat het er om waar ik SetTimer neer moet zetten? Plus die timerId.. Ik heb de timer geen id gegeven dus wat moet ik daar invullen en hetzelfde geld voor de 3 variabele....
hWnd: Handle naar je main window of in ieder geval 't window wat de message moet ontvangen. Dat window heb je zelf gemaakt, dus die handle heb je.

nIDEvent: Vul maar in wat je leuk vindt. Als je maar 1 timer hebt hoef je hier niet eens op te controleren in je WM_TIMER handler. Als je meerdere timers hebt, vul hier dan een nummertje in zodat je 'm terug kan vinden als de message komt.

uElapse: Doh.

lpTimerFunc: NULL, want je wilt WM_TIMER messages ontvangen ipv er een callback voor schrijven.

Ik snap niet helemaal hoe je aan je vraag komt eigenlijk. Windows programmeren is niet makkelijk en als je al zo ver komt dat je een window kunt maken en WM_SIZE af kunt vangen enzo, waarom kom je dan hier niet achter? (geen flame, no offence, gewoon benieuwd :))

Verwijderd

Op zaterdag 18 mei 2002 23:50 schreef Qlone het volgende:
Windows programmeren is niet makkelijk en als je al zo ver komt dat je een window kunt maken en WM_SIZE af kunt vangen enzo, waarom kom je dan hier niet achter? (geen flame, no offence, gewoon benieuwd :))
Met de appwizard kan je 'n aardig eindje komen hoor..

Verwijderd

Met de appwizard kan je 'n aardig eindje komen hoor..
In sommige gevallen zou ik zeggen 'jammer genoeg wel'. Het programmeergebeuren wordt op deze manier zo enorm onderschat...

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13:44
Op zaterdag 18 mei 2002 23:50 schreef Qlone het volgende:
Maar zo'n timer is redelijk nauwkeurig. Ok... je moet niet op een paar honderdste seconden gaan kijken en 't hangt maar helemaal af van hoe een programma zijn messages verwerkt, maar voor 't bijhouden van iets knulligs als een klokje werkt 't prima. Dan springt ie maar eens per half uur 2 seconden door ipv 1 :).
Ik moet zeggen dat ik 't nooit onderzocht heb, maar ik kan me voorstellen dat als je een CD'tje brand of iets uitprint zo'n timer message aardig vertraagd kan worden.
In sommige gevallen zou ik zeggen 'jammer genoeg wel'. Het programmeergebeuren wordt op deze manier zo enorm onderschat...
Nou, ik heb hele applicaties in C geschreven en mijn ervaring is dat dat gewoon veel tijd kost in vergelijking met het gebruik van de AppWizard (of de MFC C++ wrapper classes, ik heb die dingen nooit los gebruikt). Ik denk dus dat dat ding zeker wel handig is.

Ik ben wel met je eens dat, om er goed gebruik van te maken, je moet weten hoe het onderliggende systeem werkt (en hoe je het dus 'handmatig' zou hebben moeten doen). Dat is echter geen argument om de AppWizard niet te gebruiken.

Verwijderd

Dat is echter geen argument om de AppWizard niet te gebruiken.
Dat heb ik ook niet gezegd :). Ik vind zelf die wizards erg handig, juist omdat ze me een boel tijd besparen. Maar er zijn te veel mensen die denken 'ooh, dat kan iedereen met die wizards... koekie' zonder door te hebben hoe het onderliggende systeem werkt. Vandaar mijn 'In sommige gevallen' uitspraak... maargoed, we dwalen een beetje af :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 20:10
Kijk eens naar de SetTimer() function en vang de WM_TIMER message op.

Of anders: buy a book.


Note: je kunt een timer id toevoegen/maken door een resource bij te maken. Op het resource - tabblad rechtsklikken, Resource symbols, New; daar geef je dan een naam en een value aan een nieue resource. In dit geval bv: ID_MY_TIMER en als value 1. die ID_MY_TIMER kun je dan als timerid gebruiken in SetTimer()

https://fgheysels.github.io/


Verwijderd

Op zondag 19 mei 2002 02:57 schreef whoami het volgende:
Kijk eens naar de SetTimer() function en vang de WM_TIMER message op.
Grin, draadje niet gelezen voor je op reply ramde ? >:)

Verwijderd

Topicstarter
Het is allemaal gelukt...bedankt voor de reacties :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:35

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op zaterdag 18 mei 2002 23:01 schreef Soultaker het volgende:
Denk eraan dat een Windows timer een 'soft timer' is; dat wil zeggen dat je er niet van uit kunt gaan dat je je events met een bepaalde nauwekeurigheid of periode ontvangt.

Als je, als respons op een timer event, je klok bijwerkt ('n seconde erbij ofzo) dan is de kans dus groot dat de weergegeven tijd op den duur gaat verlopen ten op zichte van de 'echte' tijd.
Die timer wordt alleen maar gebruikt om de tijd van de statusbalk te updaten. En het lijkt me nou niet echt bepaald handig om bij de start van het programma de tijd op te vragen, en dan bij elke WM_TIMER een seconde erbij op te tellen :) (bovendien kan de message queue maar 1 WM_TIMER message bevatten, dus als je even een seconde je messages niet opvangt, dan loopt het klokje al een seconde achter)

Voor het doel van de timer (de klok updaten) speelt precisie dus totaal geen rol :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1