On approximately 3/16/2004 11:50 AM, came the following characters from
the keyboard of Laurent ROCHER:
Hi,
So the set of #defines named PERLWIN32GUI_NEM_* are mostly to do with
that bit field. The DEACTIVATE, ACTIVATE, TERMINATE, MINIMIZE,
MAXIMIZE, and RESIZE seem to have two bits set... but no special
consideration is given to that in the code, as far as I can tell. So if
any of these are defined, it could cause all of the others to be looked
up in the hash? As well as SCROLL, and one of the ones from MOUSEMOVE
to CLICK?
Does anyone have an explanation for this?
I don't know why too.
For add NEM event, i think you have too place to change :
- ParseNEMEvent for parsing event
- NEM_WindowMsgLoop for handle event.
I think we need to redefine PERLWIN32GUI_NEM event constant for handle more
event per control.
For sample, if we modify event constant like below, we can win some extra
bit (and event).
We can win more bit by create specific event constant for each control.
But, i think it's ok for now and we don't need to change all constant every
where.
Yes, this approach would allow multiple controls to reuse the same bits
for orthogonal items. That would be more efficient than the "bundling"
I suggested. But I guess I'll bundle all the NotifyIcon ones, because
otherwise I'd need 3 bits, and there are only 2 left.
Laurent
GUI.h
// Common Event (All control)
#define PERLWIN32GUI_NEM_MOUSEMOVE 0x00000001
#define PERLWIN32GUI_NEM_MOUSEDOWN 0x00000002
#define PERLWIN32GUI_NEM_MOUSEUP 0x00000004
#define PERLWIN32GUI_NEM_KEYDOWN 0x00000008
#define PERLWIN32GUI_NEM_KEYUP 0x00000010
#define PERLWIN32GUI_NEM_TIMER 0x00000020
#define PERLWIN32GUI_NEM_PAINT 0x00000040
// Generic control Event constant
#define PERLWIN32GUI_NEM_CONTROL1 0x80000000
#define PERLWIN32GUI_NEM_CONTROL2 0x40000000
#define PERLWIN32GUI_NEM_CONTROL3 0x20000000
#define PERLWIN32GUI_NEM_CONTROL4 0x10000000
#define PERLWIN32GUI_NEM_CONTROL5 0x08000000
#define PERLWIN32GUI_NEM_CONTROL6 0x04000000
#define PERLWIN32GUI_NEM_CONTROL7 0x02000000
#define PERLWIN32GUI_NEM_CONTROL8 0x01000000
#define PERLWIN32GUI_NEM_CONTROL9 0x00800000
#define PERLWIN32GUI_NEM_CONTROL10 0x00400000
#define PERLWIN32GUI_NEM_CONTROL11 0x00200000
#define PERLWIN32GUI_NEM_CONTROL12 0x00100000
#define PERLWIN32GUI_NEM_CONTROL13 0x00080000
#define PERLWIN32GUI_NEM_CONTROL14 0x00040000
#define PERLWIN32GUI_NEM_CONTROL15 0x00020000
#define PERLWIN32GUI_NEM_CONTROL16 0x00010000
#define PERLWIN32GUI_NEM_CONTROL17 0x00008000
#define PERLWIN32GUI_NEM_CONTROL18 0x00004000
#define PERLWIN32GUI_NEM_CONTROL19 0x00002000
#define PERLWIN32GUI_NEM_CONTROL20 0x00001000
// Multiple control
#define PERLWIN32GUI_NEM_CLICK
PERLWIN32GUI_NEM_CONTROL20
#define PERLWIN32GUI_NEM_DBLCLICK
PERLWIN32GUI_NEM_CONTROL19
#define PERLWIN32GUI_NEM_GOTFOCUS
PERLWIN32GUI_NEM_CONTROL18
#define PERLWIN32GUI_NEM_LOSTFOCUS
PERLWIN32GUI_NEM_CONTROL17
#define PERLWIN32GUI_NEM_CHANGE
PERLWIN32GUI_NEM_CONTROL16
#define PERLWIN32GUI_NEM_CHANGING
PERLWIN32GUI_NEM_CONTROL15
// Common control ListView & Header & TreeView
#define PERLWIN32GUI_NEM_ITEMCLICK
PERLWIN32GUI_NEM_CONTROL14
#define PERLWIN32GUI_NEM_NODECLICK
PERLWIN32GUI_NEM_CONTROL14
// Specific Window & Dialog
#define PERLWIN32GUI_NEM_DEACTIVATE
PERLWIN32GUI_NEM_CONTROL1
#define PERLWIN32GUI_NEM_ACTIVATE
PERLWIN32GUI_NEM_CONTROL2
#define PERLWIN32GUI_NEM_TERMINATE
PERLWIN32GUI_NEM_CONTROL3
#define PERLWIN32GUI_NEM_MINIMIZE
PERLWIN32GUI_NEM_CONTROL4
#define PERLWIN32GUI_NEM_MAXIMIZE
PERLWIN32GUI_NEM_CONTROL5
#define PERLWIN32GUI_NEM_RESIZE
PERLWIN32GUI_NEM_CONTROL6
#define PERLWIN32GUI_NEM_SCROLL
PERLWIN32GUI_NEM_CONTROL7
// Specific ToolBar
#define PERLWIN32GUI_NEM_BUTTONCLICK
PERLWIN32GUI_NEM_CONTROL1
// Specific ToolTip
#define PERLWIN32GUI_NEM_NEEDTEXT
PERLWIN32GUI_NEM_CONTROL1
// Specific Rebar
#define PERLWIN32GUI_NEM_HEIGHTCHANGE
PERLWIN32GUI_NEM_CONTROL1
// Specific Listview
#define PERLWIN32GUI_NEM_ITEMCHECK
PERLWIN32GUI_NEM_CONTROL1
#define PERLWIN32GUI_NEM_COLUMNCLICK
PERLWIN32GUI_NEM_CONTROL2
// Specific Treeview
#define PERLWIN32GUI_NEM_COLLAPSE
PERLWIN32GUI_NEM_CONTROL1
#define PERLWIN32GUI_NEM_COLLAPSING
PERLWIN32GUI_NEM_CONTROL2
#define PERLWIN32GUI_NEM_EXPAND
PERLWIN32GUI_NEM_CONTROL3
#define PERLWIN32GUI_NEM_EXPANDING
PERLWIN32GUI_NEM_CONTROL4
// Specific Rebar
#define PERLWIN32GUI_NEM_BEGINTRACK
PERLWIN32GUI_NEM_CONTROL1
#define PERLWIN32GUI_NEM_ENDTRACK
PERLWIN32GUI_NEM_CONTROL2
#define PERLWIN32GUI_NEM_TRACK
PERLWIN32GUI_NEM_CONTROL3
#define PERLWIN32GUI_NEM_DIVIDERDBLCLICK
PERLWIN32GUI_NEM_CONTROL4
#define PERLWIN32GUI_NEM_ITEMDBLCLICK
PERLWIN32GUI_NEM_CONTROL5
--
Glenn -- http://nevcal.com/
===========================
The best part about procrastination is that you are never bored,
because you have all kinds of things that you should be doing.