Hello,

I am implementing a magnifying tool with overlays on Windows. I draw
my overlay using DirectX, move it, etc, but when I move it the windows
behind it are not repainted, so I see some corrupted images.

Now, I was trying to figure out how can I tell all the visible windows
on the screen to repaint themselves. But this seams harder then I
initially thougth ... I tryed invalidating the desktop window and
sending a message to it. But that doesn´t work.

I should probably post this on ms newsgroups, but no-one answered my
last questions there, so I don't have much hope anyone would answer
this.

procedure RepaintScreen();
var
 screenDC: HDC;
 screenRect: RECT;
begin
 // DC for the screen
 screenDC := GetWindowDC(GetDesktopWindow);

 screenRect.left := 0;
 screenRect.top := 0;
 screenRect.right := mPluginData.GlassWidth^;
 screenRect.bottom := mPluginData.GlassHeight^;

 InvalidateRect(screenDC, screenRect, True);

 DeleteDC(screenDC);

 SendMessage(GetDesktopWindow(), WM_PAINT, 0, 0);
end;

I also tryed to iterate througth all windows and tell them all to repaint:

procedure RepaintScreen();
var
 wndDC: HDC;
 screenRect: RECT;
 Wnd: HWnd;
begin
 Wnd := GetWindow(GetDesktopWindow(), gw_HWndFirst);
 while Wnd <> 0 do
 begin
   wndDC := GetWindowDC(Wnd);

   screenRect.left := 0;
   screenRect.top := 0;
   screenRect.right := mPluginData.GlassWidth^;
   screenRect.bottom := mPluginData.GlassHeight^;

   InvalidateRect(wndDC, screenRect, True);

   DeleteDC(wndDC);

   SendMessage(Wnd, WM_PAINT, 0, 0);

   Wnd := GetWindow(Wnd, gw_HWndNext)
 end
end;

but nothing works.

thanks,
--
Felipe Monteiro de Carvalho
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to