Jeg har skrevet et program med MFC som, via GDI, tegner nogle rektangler (som skal forestille små vinduer) i et vindue, og lader brugeren trække rundt med dem på skærmen som om de var "rigtige" vinduer. Nydeligt.
Problemet er at det flimrer temmeligt meget når man trækker rundt med disse "vinduer". Specielt når der er mange af dem på skærmen på én gang. Jeg går ud fra dette skyldes at vinduet kun har én buffer...
Så derfor er mit spørgsmål:
Er det muligt at implementere dobbelt buffering i et vindue uden at ty til et andet API som DirectX eller OpenGL, så man stadig kan tegne i det med GDI objekter?
Dette kan jo besvares blot med "ja" eller "nej", men jeg forbeholder mig retten til at give pointene til den første som kan forklare hvordan det gøres eller, hvis der argumeteres meget overbevisende, at det ikke kan lade sig gøre.
Tak for linket selvom om det er lidt pinligt at få sit åh så store problem besvaret med et link man selv burde have googlet sig frem til. Nå, men jeg skal lige bruge lidt tid til at forstå koden og overføre det til MFC før jeg kan acceptere - det bliver tidligst i aften måske først i morgen.
Hej, du må sgu undskylde jeg ikke har givet lyd fra mig, jeg glemte det fuldstændigt efter jeg startede i skole her i mandags (weekenden inden var jeg fuld det meste af tiden...) Jeg har forsøgt at overføre principperne i eksemplet til mit MFC program, men der ikke nogen synlig forbedring. Her er noget af koden fra View-klassen der gerne skulle have dobbelt buffering:
Fra F00View.h
class CF00View : public CView { private: (...) CRect m_clientRect; CDC m_backBufferDC; CBitmap m_backBufferBmp; };
Det er efterhånen så lang tid siden jeg har rørt det double buffering stads at jeg overhovedet ikke kan huske det. Bare lige så du ikke sidder og venter på svar fra mig.
Mit forsøg på at lave et generelt kode eksempel går lidt i vasken når jeg begynder at blande CF00View og klassens egentlige navn, CInstrumentView sammen. Jeg har også ændret en anden lille uhensigtsmæssighed, så jeg prøver lige igen:
Fra F00View.h
class CF00View : public CView { private: (...) CRect m_clientRect; CDC m_backBufferDC; CBitmap m_backBufferBmp; CBrush m_brush; };
[Her tegner jeg nu en masse "vinduer"... "Vinduerne" er objekter af en klasse med en paint(CDC *pDC) funktion, så de kan tegne sig selv når de får en pointer til et DC, i dette tilfælde &m_backBufferDC]
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.