GDI lagger efter x sekunder

Tags:    c++

<< < 123 > >>
Hej.

Jeg har lavet et skrivekomponent magen til det i Visual Studio, hvor der er som bekendt en hel del grafiske elementer (linjeboksen, markeringsfunktionen, highlight af visse dele af teksten, etc.), men efter lidt tid eller et bestemt antal operationer (som at markere en linje frem og tilbage en masse gange hurtigt) giver GDI op.

Mit komponent ser således ud:
http://123login.dk/dexo/vse.png

Jeg kan desværre ikke vise, hvordan det ser ud, når GDI kokser, for da vil Windows ikke lade mig tage screenshots. Men jeg kan sige, at markeringen forsvinder og at der kommer en masse streger, der ligner komponentets caret (tekstmarkøren "IBeam"). Hvis jeg minimerer og gendanner vinduet, er komponentet helt sort (hvilket det er indstillet til at være ved programstart-up, inden WM_PAINT bearbejdes).

Jeg har førhen løst problemet med en timer, men det giver programmet en lidt "tung" fornemmelse. Jeg har også udtænkt en måde at "skåne" WM_PAINT på, så den ikke maler HELE komponentet hver gang, men den skal lige finpudses og omdannes til kode, hvilket jeg endnu ikke har gjort, i håb om end nemmere måde.



Thomas



Indlæg senest redigeret d. 14.04.2009 00:39 af Bruger #8985
22 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato

Problemet er, at GDI lagger. Så er spørgsmålet jo naturligvis indlysende: Hvordan forhindrer man det?

Det er ikke noget i min kode, der gør det; det er GDI selv.


Det var jo så lidt af en påstand som man nok ikke skal komme med. 99.99% af gangene vil fejlen være i éns egen kode.

Citat fra "The Pragmatic Programmer" (som by the way varmt kan anbefales): "``select’’ Isn’t Broken -
It is rare to find a bug in the OS or the compiler, or even a third-party product or library. The bug is most likely in the application."



Well, den var sand. Det var ikke noget i min kode, der var noget galt med. Det var det, der _ikke_ var i min kode, der skabte problemet. Altså min kodes mangler.

Men ja, jeg er enig med dig. Dog ser jeg ikke grund til at fortsætte med sådan en bagatel, når problemet (og trådens oprindelige emne) er blevet løst. Det er jo ikke skide relevant for tråden. Send mig hellere en PB, hvis du har noget direkte rettet til mig, som ikke har med trådens emne at gøre :)



<< < 123 > >>
t