Avatar billede tokelil Nybegynder
04. februar 2004 - 17:09 Der er 5 kommentarer og
1 løsning

Vindue der glider ind/ud af skærmbilledet

I et plug-in jeg er ved at skrive bruger jeg følgende kode til få programmet til at glide ud af skærmen:

void QCDSlideOut()
{
  RECT rcPlayer;
  GetWindowRect(hwndPlayer, &rcPlayer);

  for (INT i = 0; i <= rcPlayer.bottom - rcPlayer.top; i++)
  {
    SetWindowPos(hwndPlayer, HWND_TOP, rcPlayer.left, rcPlayer.top - i, 0, 0,
      SWP_NOOWNERZORDER | SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER | SWP_ASYNCWINDOWPOS);

    Sleep(50);
  }
}

Det virker sådan set fint nok. Problemmet er når jeg skal have det til at glide ind igen, hvor jeg har rcPlayer.top + i, så glider vinduet ikke, men kommer helt frem på en gang efter (rcPlayer.bottom - rcPlayer.top) * 50 ms. Programmet bliver altså ikke gentegnet for hver loop når det skal glide ind.

Nogen der har en god ide til at løse det eller måske en bedre måde at lade en program glide ind/ud af skærmen?
Avatar billede bertelbrander Novice
04. februar 2004 - 19:18 #1
Jeg tror at du er nødt til at lave en timer (SetTimer(...)) og flytte vinduet ved timeout.

Problemet er at den event der skal tegne vinduet ikke kommer så længe du kører i loopen.

Man kan måske også løse det ved at polle på beskeder i loopen.
Avatar billede tokelil Nybegynder
04. februar 2004 - 20:34 #2
Er bare sjovt at den tegner det fint når viduet flyttes ud, men ikke når det flyttes ind. ?

Jeg har også prøvet at køre koden i en anden thread end den some DLL filen bliver loaded i, men med samme resultat.
Avatar billede bertelbrander Novice
04. februar 2004 - 20:47 #3
Når du flytter vinduet ud kopierer windows indholdet af vinduet, men når det skal flyttes ind er du nødt til selv at tegne vinduet.

Du kan måske også tegne vinduet i loopen hver gang du har flyttet det.
Avatar billede tokelil Nybegynder
04. februar 2004 - 22:49 #4
Ser ud til at jeg har fundet ud af det via threads uden selv at tegne vinduet. Tak for ideerne! Smider du et svar?
Avatar billede bertelbrander Novice
04. februar 2004 - 22:53 #5
Det forekommer mig at være en anelse overkill at bruge threads for at løse problemet, men hvis det virker ...

Jeg forsøger at undgå point.
Avatar billede tokelil Nybegynder
04. februar 2004 - 23:00 #6
Ja du kan have ret i det er lidt overkill med Threads. Jeg tror jeg vil prøve om jeg kan få det til at virke via timers i stedet.

Endnu en gang tak for hjælpen!
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