/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Double buffer
Fra : David


Dato : 01-06-01 20:55

Dav. Jeg har lige lavet en tekst editor hvor man har mulighed for at ændre
tekstfarven og baggrundsfarven:
htext=CreateWindow("edit",BLA,BLA,BLA....
i WndProc'en
case WM_CTRLCOLOREDIT:
HDC hd=(HDC)wParam;
SetTextColor(hd,rgbfarve);
return (LRESULT)hbrush;
og så gentenger jeg tekstfeltet når brugeren har valgt en farve.
InvalidateRect(htext,NULL,TRUE);
Det virker altsammen men, der er ligesom at computeren ikke kan følge med
når jeg painter. Gamle bogstaver bliver ikke slettet og når man scrooler
står alle bogstaver oven i hinanden. Først når man så markerer teksten med
musen bliver tekstfeltet rigtigt gentenget. Jeg ville høre om der ikke var
en måde at løse det på. Jeg har hørt at man kan bruge Double buffer men
hvordan virker det?



 
 
Mogens Hansen (01-06-2001)
Kommentar
Fra : Mogens Hansen


Dato : 01-06-01 21:40


"David" <nma2818@vip.cybercity.dk> wrote in message
news:9f8r47$1rrp$1@news.cybercity.dk...

> Det virker altsammen men, der er ligesom at computeren ikke kan følge med
> når jeg painter. Gamle bogstaver bliver ikke slettet og når man scrooler
> står alle bogstaver oven i hinanden. Først når man så markerer teksten med
> musen bliver tekstfeltet rigtigt gentenget. Jeg ville høre om der ikke var
> en måde at løse det på. Jeg har hørt at man kan bruge Double buffer men
> hvordan virker det?
>


Det er en teknik man bruger/brugte for at undgå at skærmen flimrer, og for
at optimere gentegnings hastigheden.

Det virker på den måde, at man først tegner på et bitmap med vinduets
indhold i memory i stedet for at skrive direkte på skærmen.
Når man så skal tegne vinduet, overfører man blot bitmap'et fra memory til
skærmen.

Det er en caching mekanisme, som kan bruges hvis et vindue sjældent skifter
udseende eller blot veksler mellem et begrænset antal tilstande (f.eks. en
knap, der kan være "disable", "enable not pressed", "pressed").
Teknikken er ikke velegnet til store områder eller vinduer der ubegrænset
skifter tilstand (f.eks. en editor)

Jeg tvivler umiddelbart ikke at det vil løse dit problem.
Med mindre du kører på en _meget_ gammel maskine (i hvertfald mindre end
16MHz 386), så er det _intet_ problem at tegne tekst tilstrækkeligt hurtigt
på skærmen. Hvis du blot har umiddelbar adgang til den tekst, der skal
skrives og kun tegner det område du bliver bedt om.
For mig lyder det mere som at du har et par logik-fejl i dit program.

Husk de gode gamle råd om optimering:
1. Lad være - til at begynde med
2. Hvis 1 ikke er tilstrækkeligt, så _mål_ hvor problemet er
3. Ret problemet
4. _Mål_ at problemet er blevet rettet

Et lille råd om test:
Når jeg har skrevet Windows kontroller, hvor jeg har optimeret gentegningen,
så tager jeg og trækker et lille vindue (f.eks. notepad, gjort så lille som
muligt) og flytter rundt oven på den nyudviklede kontrol. Det kan ofte
afsløre problemer.

Venlig hilsen

Mogens Hansen



Thomas Jespersen (03-06-2001)
Kommentar
Fra : Thomas Jespersen


Dato : 03-06-01 16:07

"Mogens Hansen" <mogens_h@dk-online.dk> writes:

> Det er en caching mekanisme, som kan bruges hvis et vindue sjældent skifter
> udseende eller blot veksler mellem et begrænset antal tilstande (f.eks. en
> knap, der kan være "disable", "enable not pressed", "pressed").

Det er ikke helt rigtigt. Teknikken bruges også i f.eks. spil for at
få pæne, flydende animationer. Med moderne PCere er det ikke
usædvanligt at få opdateringshastigheder på over 60 billeder i sekundet.

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste