Question

I'm trying to make an application that needs to draw on the desktop, behind the icons so it appears to replace the desktop wallpaper. I've found a few solutions to this, but most of them didn't work very well (lots of flickering). One solution seems to be what I'm looking for, but I don't really get it. I've done mostly C# applications using either higher-level graphics libraries or just Windows Forms, and some C++ but only on non-Windows platforms.

If anyone could "translate" it for me or provide me with an alternative solution, it would be much appreciated!

Was it helpful?

Solution

I never found the solution I wanted, but here are the best (only?) alternatives:

  • Draw to the "SysListView32" window (ProgMan -> SHELLDLL_DefView -> SysListView32). This will draw behind the desktop icons, but will flicker when animation is used. How to: Link (you'll have to use interop in .NET).

  • Use DirectDraw overlays. You set the desktop color to a certain obscure color and everything with that color will be replaced with what's on the overlay. This is used in the example in my question and in the VLC wallpaper mode. However, this is incompatible with Aero. How to: Link (I guess you could use Managed DirectX in .NET?).

OTHER TIPS

You can find inspiration in the VLC media player code. there's a wallpaper mode that does what you're looking for.

Yes, with interop, see this thread.

Seen this question in passing and I did partially solve the problem (But not in a way I can give any useful code) to make some cool games although might not have the application you want:

  • Set desktop background back to normal and take a screenshot of the desktop
  • Set desktop background black and take a screenshot of the desktop
  • Set desktop background white and take a screenshot of the desktop
  • Combine the black and white versions to make a mask and the first screenshot as the overlay setting pixel values that are different transparent.

Now on your form draw the following in order:

  1. Draw the first screenshot
  2. Draw your form stuff
  3. Draw the desktop overlay you created

This is what I did for a full screen form but could be adapted for non full screen forms quite easily I think. Essentially you have recreated the desktop but with the ability to do anything with it including some cool games. The draw speed and performance is satisfactory for any application but desktop interactivity is an issue... :( Here is a pic of a tanks game using the principle except I set the background white and made all white backgrounds transparent too!

My Tanks Game

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top