Steve Pick wrote:
> Hello,
>
> Here's a nice idea:
mmm. that's nice, but not as nice as it may seem. I see many problems
with this one:
1) you can't easily (I mean, without a lot of effort) intercept all
kind of messages. this is due to the rather complex nature of
the Windows messaging system. just to make an example, WM_MOUSEMOVE
messages are always sent to the window itself (eg. the handle
of the window when the mouse moves over an *empty area* of the
window, the handle of a button when the mouse moves over a button
contained in the window). a click on the button, on the other
hand, is always sent to the *container* window in the form of
a WM_COMMAND message, so you won't get it attaching a "hook"
to the button itself. that's rather confusing. and that's also
why most of the complexity of Win32::GUI is there, otherwise it
would be a really linear and simple module.
2) getting out something useful from wParam and lParam may be really
hard sometimes, and you would need a lot of pack() and unpack()
and a deep knowledge of how C (and the Windows SDK) manages memory
or you risk to blow up things very easily.
3) this may clash with Win32::GUI's own message processing. what to
do when you hook something to WM_NOTIFY, for example? if this
comes before what Win32::GUI already does, you may break things
and your GUI will be completely disfunctional.
4) if not used properly, it could also slow things a lot. there
are some messages (like WM_SETCURSOR for example) that are
sent several times a second to a window. calling a Perl sub
each time such an event is seen will cause your program to be
as slow as a slug.
5) to summarize points 1-4, this is a nice feature when (and if) you
have the knowledge of the Windows GUI internals, but it has the
following drawbacks:
- is potentially dangerous and prone to be abused in all sorts
of nasty ways
- is absolutely impossible to document it properly, and this will
be an inevitable cause of frustration to the end user
- it may cause "cargo-cult" programming that in the long run
will do more harm than good (see the experience with -style)
all in all, I think this is a good idea (the very first version of
Win32::GUI used a message loop where all WM_* were sent directly to
a Perl subroutine, but soon I realized that this was not a Good
Thing at all). I don't think this should be categorized as NEM, but as
PUEM (Power User Event Model) instead, and this should be something
available only on *explicit* request by the programmer, or we may only
be causing more confusion than we can handle.
cheers,
Aldo
__END__
$_=q,just perl,,s, , another ,,s,$, hacker,,print;