19. august 2004 - 13:14Der er
12 kommentarer og 1 løsning
Flimmer under invalidate C++
Hejsa,
Jeg har en Static control jeg skal have opdateret, hvis jeg opdaterer den flimrer det et kort sekund på skærmen, fordi den tegner hele den del af vinduet igen.
Jeg har kigget på noget double buffering men kunne ikke få det hen,
jeg har kigget på invalidaterect, og den syntes heller ikke og køre. og vil nu kigge lidt på RedrawWindow.
Nogle af jer der har en ide til hvad jeg kan gøre, eller komme med nogle kode eksempler på de andre funktioner ?
Det virker somom du bruger InvalidateRect og tegner din Static i OnPaint, det vil give noget/meget flimmer.
Du bør i stedet tegne fra det sted du vil have opdateret. Hent en DC med GetDC og brug den med de samme funktioner som du bruger i OnPaint. Du vil stadig have brug for at tegne i OnPaint.
Hvis ikke det hjælper nok skal du oprette en memory DC som du tegner på, og som du derpå BitBlt'er på den rigtige (skærm) DC.
Jeg går ud fra at det er en static på en DialogBox under Visual C++ med MFC? Jeg kan godt prøve at lave et eksempel.
Øh, jeg er lidt ny i c++, men lærer hver dag, jeg vil prøve og forklare hvad jeg laver....
Jeg har lavet en static box i et dialog. den nedarver jeg så til min egen klasse som hedder CTemperature. Iden bruger jeg onpaint til at tegne med, i den har jeg lagt tre funktioner som for dc med som reference altså (CDC &dc).
det jeg er ved at lave er et termometer, når temperaturen så skifter, kalder den en funktion der hedder set temperature, den sætter så en variabel med den korrekte temperatur og kalder invalidaterect, og det er det jeg ikke kan få til at spille....
men det du siger med bitblt har nogle andre snakket om at det nok er det rigtigt,
jeg kan sende min kode i morgen når jeg kommer på arbejde, men vil meget gerne se et eksempel
time_t Now; time(&Now); sprintf(Buf, "%s", ctime(&Now)); // Create a memory DC and a "bitmap" for it to draw on CDC MemoryDc; MemoryDc.CreateCompatibleDC(dc); CBitmap Bitmap; Bitmap.CreateCompatibleBitmap(dc, 200, 200); MemoryDc.SelectObject(&Bitmap);
// Create a memory DC and a "bitmap" for it to draw on CDC MemoryDc; MemoryDc.CreateCompatibleDC(dc); CBitmap Bitmap; Bitmap.CreateCompatibleBitmap(dc, 100, 300); MemoryDc.SelectObject(&Bitmap);
Juhuu, det ser faktisk ud til at virke nu, Problemet var at alt blev sort, men så startede jeg som det første bare med pDC->Rectangle(Rect). og male den grå, så var det jo faktisk det...
Jeg syntes faktisk du fortjener nogle points, så hvis du gider smide et svar...
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.