13. december 2003 - 13:08Der er
12 kommentarer og 1 løsning
SetTimer problem (Windows)
Jeg er ved at lave et rent Win32 program. I den forbindelse skal jeg bruge en timer. Jeg kalder SetTimer således: SetTimer(hwnd,ID_TIMER,upd_interval,NULL);
Sådan som jeg læser dokumentationen, burde systemet nu poste WM_TIMER messages til mit vindue hver gang der er gået upd_interval millisekunder. Men det virker ikke. Hvad gør jeg galt ? (SetTimer returnerer værdien af ID_TIMER, som det også er beskrevet i dokumentationen).
Dit eksempel virker fint. Det gør eksemplet i tutorial'en på winprog.org også. Jeg kan ikke se hvorfor mit program ikke virker. Jeg har nu flyttet SetTimer kaldet ud i min WndProc under WM_CREATE, oprindeligt blev det kaldt i en klasses constructor. Men det virker heller ikke.
switch(msg) { // WM_CREATE sendes én gang, når vinduet vises på skærmen. Her kan vi lave initialisering. case WM_CREATE: { if ( ptrBall == 0 ) { ptrBall = new Ball(hwnd,makePoint(0,0),makePoint(2,2) ,DEF_UPDATE_INTERVAL); if ( ptrBall == 0 ) { MessageBox(hwnd,ERR_CREATE,TITLE,MB_ICONSTOP); PostQuitMessage(0); }
// program entry point int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // initier window class WNDCLASSEX wc; HWND hwnd; MSG Msg;
Jeg kan ikke se hvad ptrBall->draw(); gør, men hvis ikke den kalder BeginPaint() og EndPaint() vil windows sende WM_PAINT igen og igen. WM_PAINT beskeder har højere prioritet en WM_TIMER, så WM_TIMER vil aldrig blive sendt.
Prøv at udkommentere håndtering af WM_PAINT, så DefWindowProc() bliver kaldt for WM_PAINT, og se så om ikke WM_TIMER kommer.
Ja, det har jeg så konstateret ;-) Tak for hjælpen i hvert fald. Jeg lukker spørgsmålet.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.