in reply to Non-rectangular mainwindow

The way this is usually done is using transparent background. The window as managed by the system is still rectangular, but some parts of it (eg. the corners of the square for a round window (Shades of Jeremy:)) are specified as being transparent, so the user perceives a round window.

However, for this to work, the underlying windowing system has to support the transparent background concept. This didn't become available on Win32 until Win2K or later. I'm not sure about X and others, but I think the Mac had this ages since.

Then it's a case of does the windowing API (Tk etc.) you are using expose this. Often 'advanced features' of the underlying systems are not exposed by cross-platform toolkits unless that feature is available on all the supported platforms.

You have some reading to do I think:)


Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"When I'm working on a problem, I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong." -Richard Buckminster Fuller
If I understand your problem, I can solve it! Of course, the same can be said for you.

Replies are listed 'Best First'.
Re: Re: Non-rectangular mainwindow
by Corion (Patriarch) on Aug 25, 2003 at 08:17 UTC

    Under Win32, no transparent background is needed (and no DirectX either), as the SetWindowRgn() call allows to specify a complex region as the window border. I can't find a good example to copy online, but it would be raw GDI calls and I'm not sure how to manage the region memory that gets owned by GDI after the call - I suppose one would have to keep the structure alive as long as the window handle is valid.

    In principle, this should be possible from Perl, but it will be hard to find a toolkit that supports it natively. One could hack it, as long as one gets to the hWnd of the window. A problem with this approach is, that many windowing toolkits destroy and recreate windows at various stages, so the "funky shape" might get lost when hiding/reshowing the window or minimizing/restoring the window. Also, the window metrics will most likely become unusable.

    perl -MHTTP::Daemon -MHTTP::Response -MLWP::Simple -e ' ; # The $d = new HTTP::Daemon and fork and getprint $d->url and exit;#spider ($c = $d->accept())->get_request(); $c->send_response( new #in the HTTP::Response(200,$_,$_,qq(Just another Perl hacker\n))); ' # web
      Here is a pretty cool example by the cult of the dead cow. I can't find it anywhere anymore, it's a good thing I saved it. It creates a cowskull shaped window (i'll see about a screenshot).

      update: Screen shot here. It's an Alt+PrtScrn of me resizing the window.

      MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!"
      I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README).
      ** The third rule of perl club is a statement of fact: pod is sexy.

Re: Re: Non-rectangular mainwindow
by Flame (Deacon) on Aug 25, 2003 at 03:09 UTC
    I run Win98SE and I have several programs that use unusually shaped windows. Might have to do with DirectX.



    My code doesn't have bugs, it just develops random features.

    Flame ~ Lead Programmer: GMS (DOWN) | GMS (DOWN)