Avatar billede ultik Nybegynder
16. februar 2002 - 20:53 Der er 1 kommentar og
1 løsning

Windows GDI problem

Hej

Jeg 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
Avatar billede ultik Nybegynder
16. februar 2002 - 20:54 #1
Det skal nok lige siges at jeg udvikler i VC++ 6.0 og at jeg IKKE bruger MFC, rent Windows API/GDI.
Avatar billede ultik Nybegynder
18. februar 2002 - 01:46 #2
løsning fundet, det som står i spørgsmålet virker faktisk......
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester