c ++ - Hvordan kan jeg stoppe et vindue fra kort genoptagelse i sin sidste synlige position, når du går fra skjult til synlig?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et DirectX-vindue uden fuldskærm, der viser video, som jeg til applikationsformål skal flytte rundt og undertiden skifte fra skjult/synligt programmatisk.
Når du går fra skjult til synlig, kan vinduet nogle gange flyttes til en ny position, før det vises.


Jeg gemmer vinduet med ShowWindow(hWnd, SW\_HIDE).
Når jeg vil vise vinduet igen, i en ny position, flyttes jeg først med SetWindowPos ved hjælp af de nye koordinater og SWP\_NOREDRAW og SWP\_NOZORDER flag (jeg vil ikke røre med Z-ordren).


Så kalder jeg ShowWindow(hWnd, SW\_SHOW) for vinduet til at vises i den nye position. Dette virker fint, bortset fra at vinduet kort vises på den position, hvor det sidst var synligt, før det vises i sin nye korrekte position.


Jeg har forsøgt at bruge alternativerne MoveWindow (med repaint-option sat til false) og GetWindowPlacement sammen med SetWindowPlacement (med passende flag), men de giver det samme resultat.


Hvordan kan jeg tvinge vinduet til at dukke op i den rigtige position, når du går fra skjult til synlig?

Bedste reference


Vises problemet var ikke skylden enten Windows API eller DirectX, men en vanskelig fejl i den måde dekoderen blev håndteret på.
Placering af vinduet og dets synlighedsstatus er baseret på en værdi i frame brugerdata, der passeres gennem video-dekoderen. Når dekoderen ophørte med at modtage inputdata, der fandt sted, da netværksforbindelsen til encoderen blev brudt, ville det også stoppe med at give tilbagekald til dekodede rammer med data stadig i sin 'pipeline'. Når inputdata ankom i dekoderen igen, spyttede den nogle få af de 'faste' rammer med brugerdata, der ikke længere var gyldige.