Windows GDI problem
HejJeg arbejder lige for tiden med at lave et skakspil. Jeg har "udliciteret" GUI'en til en DLL, så jeg kan koncentrere mig om at arbejde med selve programmet, og så få andre til at lave det grafiske interface. Men problemet er at jeg vil opdatere mit standard interface, ved at effektivisere det. I første udgave tegner det på hver paint hele bordet op ( 64-cyklus loop der tegner hvert felt ). Det jeg så vil er at tegne dette en gang for alle, og så gemme det i en variabel jeg så kan BitBlt'e til mit primære DC. Dette kan jeg dog ABSOLUT ikke få til at virke, medmindre at jeg gør det som en normal double-buffering, hvor jeg optegner alt i WM_PAINT på et MemoryDC, og så bagefter blitter det til ScreenDC'en. Problemet er at dette jo ikke er en optimering, pointen er at jeg vil flytte optegningen af boardet i en funktion der kaldes til at initiere opsætningen af GUI'en. Så har jeg et par globale variable :
HBITMAP hBoardBMP;
HDC hBoardDC;
og i min init skriver jeg så følgende kode :
// lav et DC ud fra screenDC
// hDC = screendc
hBoardDC = CreateCompatibleDC(hDC);
hBoardBMP = CreateCompatibleBitmap(hDC, 400, 400);
// Brug hBoardBMP på hBoardDC
SelectObject(hBoardDC, hBoardBitmap);
// generate board :
for (int i = 0; i < 64; i++)
{
// windows GDI optegningskode på
// hBoardDC
}
når så jeg forsøger i den funktion der kaldes på WM_PAINT beskeder at gøre som følgende :
// blit boardet ind allerførst
BitBlt(hDC, 0, 0, 400, 400, hBoardDC, 0, 0, SRCCOPY);
// tegn de variable information op herefter på hDC
Dette vil simpelthen ikke virke!.... jeg får ikke baggrunden ( altså selve boardet ) med, mens de ting jeg tegner i WM_PAINT, brikkerne osv, alligevel dukker op. Dette irriterer mig groft.... Jeg har som sagt fået det til at virke ved at flytte koden fra init funktionen til paint funktionen, men det løser ikke rigtigt mit problem.
Glemmer jeg et eller andet?
BTW: jeg har skrevet koden ovenfor ud fra hukommelse, da jeg ikke p.t. har adgang til min kildekode. Håber I kan hjælpe alligevel....
På forhånd tak.
Med venlig hilsen
Ulrik Jensen
ulrik@qcom.dk