Groups | Blog | Home
all groups > dotnet windows forms > may 2004 >

dotnet windows forms : Make a window "Click-through"



Martijn Coppoolse
5/14/2004 11:50:19 PM
Hello everyone,

I've got two little apps which are able to create a window that displays
something on the desktop, but are not clickable. Instead, when you
click on the window, the item 'behind' or 'under' that window gets clicked.

I'd like to know how to do this, using VB6, VB.Net, Windows Forms, or
API functions.

Any ideas?

PS. The apps in question are (both freeware):
Desktop Logo - http://mt.smolyan.info/desktoplogo.php
ClocX - http://www.tenzor.cz/clocx/

Thanks in advance,
--
DalePres
5/15/2004 8:40:40 AM
Another opportunity to advertise one of my favorite API functions:
SendMessage. Use the SendMessage Win32 API method to send a WM_LBUTTONDOWN
message, adding the appropriate parameters as described in
http://www.mangovision.com/vbapi/ref/w/wm_lbuttondown.html to pass the click
location to the target application.

There may be other ways, but based on my knowledge and experience, this is
how I would begin to tackle the problem.

Dale

[quoted text, click to view]

Justin Rogers
5/15/2004 12:20:47 PM
The problem is a bit more complicated. It requires that you enumerate windows
on the machine to find
the window that is immediately below you. GetWindow and GetNextWindow are prime
candidates.
Another possibility is to create you window with WS_EX_NOACTIVE (or is it
NO_ACTIVATE, can't
remember), and then set it top-most. It'll be top visible, but it won't be the
*foreground* window and so
it won't receive the input. I haven't tried this later one, but I did some
research yesterday after the original
post to try and find a concrete answer.

The biggest problem is that getting the window underneath you is not easy.
Z-Ordering in windows is not
easy to control or get information about. The closest I could come is that
GetNextWindow might allow
you to cycle windows in z-ordered order, so you could find the window at your
point, that was immediately
behind your window.


--
Justin Rogers
DigiTec Web Consultants, LLC.
Blog: http://weblogs.asp.net/justin_rogers

[quoted text, click to view]

yEaH rIgHt
5/15/2004 4:33:10 PM
The reason you can click through with ClocX is because it's drawn directly
to the main screen (if you set it to click through). Otherwise, it sits on
its own form and you can't click through. A simple trick.


[quoted text, click to view]

Bob Powell [MVP]
5/15/2004 10:33:55 PM
I too went through some experimental code and created a form that handled
the WM_NCHITTEST message. This works a treat for controls but not forms and
top-level windows.

I created a clock that showed up semi-transparent on the desktop but I
couldn't click through it. I can set a transparency key and click through
that but the numerals on the clock are never transparent to clicks.

I'd post the code but it doesn't do what's needed so I won't bother. :-(

--
Bob Powell [MVP]
Visual C#, System.Drawing

Image transition effects, automatic persistent configuration and
design time mouse operations all in April's issue of Well Formed
http://www.bobpowell.net/wellformed.htm

Answer those GDI+ questions with the GDI+ FAQ
http://www.bobpowell.net/gdiplus_faq.htm

The GDI+ FAQ RSS feed: http://www.bobpowell.net/faqfeed.xml
Windows Forms Tips and Tricks RSS: http://www.bobpowell.net/tipstricks.xml
Bob's Blog: http://royo.is-a-geek.com/siteFeeder/GetFeed.aspx?FeedId=41





[quoted text, click to view]

Nitin Koshy
5/16/2004 5:46:15 AM
I guess the functionality you desire could be achieved wit
Form.TransparencyKe

[?

-Niti

----- Martijn Coppoolse wrote: ----

Hello everyone

I've got two little apps which are able to create a window that displays
something on the desktop, but are not clickable. Instead, when you
click on the window, the item 'behind' or 'under' that window gets clicked

I'd like to know how to do this, using VB6, VB.Net, Windows Forms, or
API functions

Any ideas

PS. The apps in question are (both freeware)
Desktop Logo - http://mt.smolyan.info/desktoplogo.ph
ClocX - http://www.tenzor.cz/clocx

Thanks in advance
-
groups.google.com NO[at]SPAM martijn.coppoolse.com
5/18/2004 12:34:41 AM
[quoted text, click to view]

How could that be done, then?

Drawing directly onto the desktop's hDC wouldn't show on screen, if
there's a window on top of it, would it?

In the meantime, I'll look into figuring out what other window's
supposed to get the clicks. Thanks for the pointers!
--
Martijn Coppoolse
5/18/2004 8:42:05 PM
[quoted text, click to view]

I'm afraid not; AFAIK, Form.TransparencyKey doesn't 'ignore' clicks on
the form. What I'm looking to make, is a kind of ghost form:
you can see it, but if you click on it, it's as if the form didn't exist...

Thanks anyway,
--
AddThis Social Bookmark Button