/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corp., 1991 **/ /**********************************************************************/ /* bltevent.hxx Event types, as used by the client-window classes EVENT FOCUS_EVENT CONTROL_EVENT SCROLL_EVENT TIMER_EVENT ACTIVATION_EVENT SIZE_EVENT MOVE_EVENT KEY_EVENT VKEY_EVENT CHAR_EVENT MOUSE_EVENT FILE HISTORY: beng 01-May-1991 Created beng 10-May-1991 Implementations added beng 14-May-1991 More implementations added; GENERIC_EVENT removed beng 08-Oct-1991 Win32 conversion beng 05-Dec-1991 Added scroll events beng 18-May-1992 Added QMOUSEACT_EVENT beng 28-May-1992 All WORD2DWORD replaced with UINT */ #ifndef _BLT_HXX_ #error "Don't include this file directly; instead, include it through blt.hxx" #endif // _BLT_HXX_ #ifndef _BLTEVENT_HXX_ #define _BLTEVENT_HXX_ #include "bltmisc.hxx" /************************************************************************* NAME: EVENT SYNOPSIS: Base class in EVENT hierarchy INTERFACE: QueryMessage() - return wMsg arg QueryWParam() - return wParam arg QueryLParam() - reutrn lParam arg SendTo() - passes the event along, via SendMessage PostTo() - passes the event along, via PostMessage CAVEATS: Do not use this class unless you know what you are doing. Otherwise you may hose Win16-Win32 single-source compatibility. NOTES: Should these members be protected? Need to make some friends. HISTORY: beng 01-May-1991 Created beng 10-May-1991 Added friend decl's beng 14-May-1991 Made APP_WINDOW's dispatcher a friend, too Folded in GENERIC_EVENT beng 08-Oct-1991 Win32 conversion beng 27-May-1992 Added SendTo, PostTo **************************************************************************/ DLL_CLASS EVENT { private: // C7 CODEWORK - make these "const" when we leave Glock UINT _nMsg; WPARAM _wParam; LPARAM _lParam; public: EVENT( UINT nMsg, WPARAM wParam, LPARAM lParam ) : _nMsg(nMsg), _wParam(wParam), _lParam(lParam) {} UINT QueryMessage() const { return _nMsg; } WPARAM QueryWParam() const { return _wParam; } LPARAM QueryLParam() const { return _lParam; } LRESULT SendTo( HWND hwndDest ) const { return ::SendMessage( hwndDest, _nMsg, _wParam, _lParam ); } BOOL PostTo( HWND hwndDest ) const { return ::PostMessage( hwndDest, _nMsg, _wParam, _lParam ); } }; /************************************************************************* NAME: CONTROL_EVENT SYNOPSIS: Describe a message sent by a control to its owner INTERFACE: QueryCid() - return control ID of notifier QueryCode() - return code passed by control QueryHwnd() - return hwnd of sending control. PARENT: EVENT USES: CID CAVEATS: NOTES: This event maps to WM_COMMAND. So if QueryHwnd is 0, it actually came from a menu item, in which case the CID is actually a MID. HISTORY: beng 10-May-1991 Implemented beng 07-Oct-1991 Renamed QueryCid for CONTROL_WINDOW compat beng 08-Oct-1991 Win32 conversion beng 15-Oct-1991 Added QueryHwndSender **************************************************************************/ DLL_CLASS CONTROL_EVENT: public EVENT { public: CONTROL_EVENT( UINT wMsg, WPARAM wParam, LPARAM lParam ) : EVENT( wMsg, wParam, lParam ) {} // This alternate ctor lets BLT assemble a phony notification event // portably. CONTROL_EVENT( CID cid, UINT nNotification ) #if defined(WIN32) : EVENT(WM_COMMAND, (WPARAM)MAKELONG(cid, (WORD)nNotification), (LPARAM)0) {} #else : EVENT(WM_COMMAND, (WPARAM)cid, (LPARAM)MAKELONG(0, nNotification)) {} #endif CID QueryCid() const { #if defined(WIN32) return (CID)LOWORD(QueryWParam()); #else return (CID)QueryWParam(); #endif } UINT QueryCode() const { #if defined(WIN32) return (UINT)HIWORD(QueryWParam()); #else return (UINT)HIWORD(QueryLParam()); #endif } HWND QueryHwnd() const { #if defined(WIN32) return (HWND) QueryLParam(); #else return (HWND) LOWORD(QueryLParam()); #endif } }; /* This is a WIN32 manifest. See wincon.h. */ #ifdef FOCUS_EVENT #undef FOCUS_EVENT #endif /************************************************************************* NAME: FOCUS_EVENT SYNOPSIS: Describe losing or gaining the input focus INTERFACE: QueryOtherHwnd() - returns hwnd of window which gained or lost the focus PARENT: EVENT CAVEATS: Note that the interface returns a Windows HWND, not a WINDOW. NOTES: Too much hassle to provide a WINDOW* - will do only at explicit request of clients. This event maps to WM_SETFOCUS and WM_KILLFOCUS. HISTORY: beng 10-May-1991 Implemented beng 08-Oct-1991 Win32 conversion **************************************************************************/ DLL_CLASS FOCUS_EVENT: public EVENT { public: FOCUS_EVENT( UINT wMsg, WPARAM wParam, LPARAM lParam ) : EVENT( wMsg, wParam, lParam ) {} HWND QueryOtherHwnd() const { return (HWND) QueryWParam(); } }; /************************************************************************* NAME: SCROLL_EVENT SYNOPSIS: Describe activity in a scrollbar INTERFACE: QueryCommand() - returns one of scmdLineDown scmdLineUp scmdPageDown scmdPageUp scmdThumbPos scmdThumbTrack scmdBottom scmdTop IsVertical() - TRUE if vertical scrollbar IsHorizontal() - TRUE if horizontal scrollbar PARENT: CONTROL_EVENT NOTES: If command is scmdThumbPos or scmdThumbTrack, then this object is actually a SCROLL_THUMB_EVENT. HISTORY: beng 11-Oct-1991 Documented beng 05-Dec-1991 Ported to Win32 beng 18-May-1992 Added IsVertical, IsHorizontal **************************************************************************/ DLL_CLASS SCROLL_EVENT: public CONTROL_EVENT { public: SCROLL_EVENT( UINT wMsg, WPARAM wParam, LPARAM lParam ) : CONTROL_EVENT( wMsg, wParam, lParam ) {} enum SCROLL_COMMAND { scmdLineDown = 0, scmdLineUp, scmdPageDown, scmdPageUp, scmdThumbPos, scmdThumbTrack, scmdBottom, scmdTop }; SCROLL_COMMAND QueryCommand() const #if defined(WIN32) { return (SCROLL_COMMAND)LOWORD(QueryWParam()); } #else { return (SCROLL_COMMAND)QueryWParam(); } #endif BOOL IsVertical() const { return (QueryMessage() == WM_VSCROLL); } BOOL IsHorizontal() const { return (QueryMessage() == WM_HSCROLL); } }; /************************************************************************* NAME: SCROLL_EVENT SYNOPSIS: Describe thumb activity in a scrollbar INTERFACE: QueryCommand() - returns one of tcmdThumbPos tcmdThumbTrack QueryPos() - returns position within scrollbar PARENT: SCROLL_EVENT NOTES: See also SCROLL_EVENT::IsVertical() et al. HISTORY: beng 11-Oct-1991 Documented beng 05-Dec-1991 Ported to Win32 **************************************************************************/ DLL_CLASS SCROLL_THUMB_EVENT: public SCROLL_EVENT { public: SCROLL_THUMB_EVENT( UINT wMsg, WPARAM wParam, LPARAM lParam ) : SCROLL_EVENT( wMsg, wParam, lParam ) {} enum THUMB_COMMAND { tcmdThumbPos=4, tcmdThumbTrack }; THUMB_COMMAND QueryCommand() const #if defined(WIN32) { return (THUMB_COMMAND)LOWORD(QueryWParam()); } #else { return (THUMB_COMMAND)QueryWParam(); } #endif UINT QueryPos() const #if defined(WIN32) { return HIWORD(QueryWParam()); } #else { return LOWORD(QueryLParam()); } #endif }; /************************************************************************* NAME: TIMER_EVENT SYNOPSIS: Describe the detonation of a fuse INTERFACE: QueryID() - state which timer did it PARENT: EVENT USES: TIMER_ID NOTES: This event maps to WM_TIMER. HISTORY: beng 07-Oct-1991 Returns TIMER_ID instead of WORD beng 08-Oct-1991 Win32 conversion **************************************************************************/ DLL_CLASS TIMER_EVENT: public EVENT { public: TIMER_EVENT( UINT wMsg, WPARAM wParam, LPARAM lParam ) : EVENT( wMsg, wParam, lParam ) {} TIMER_ID QueryID() const { return (TIMER_ID)QueryWParam(); } }; /************************************************************************* NAME: ACTIVATION_EVENT SYNOPSIS: Describe the activation of a window INTERFACE: IsActivating() - returns TRUE if window will be active PARENT: EVENT NOTES: This event maps to WM_ACTIVATE. HISTORY: beng 07-Oct-1991 Added header beng 08-Oct-1991 Win32 conversion **************************************************************************/ DLL_CLASS ACTIVATION_EVENT: public EVENT { public: ACTIVATION_EVENT( UINT wMsg, WPARAM wParam, LPARAM lParam ) : EVENT( wMsg, wParam, lParam ) {} #if defined(WIN32) BOOL IsActivating() const { return (LOWORD(QueryWParam()) != 0); } #else BOOL IsActivating() const { return (QueryWParam() != 0); } #endif }; /************************************************************************* NAME: SIZE_EVENT SYNOPSIS: Received after the window is resized INTERFACE: IsMaximized() IsMinimized() IsNormal() QueryHeight() QueryWidth() PARENT: EVENT NOTES: Maybe add a XYDIMENSION QueryDim method? This event maps to WM_SIZE. HISTORY: beng 15-May-1991 Documented beng 08-Oct-1991 Win32 conversion **************************************************************************/ DLL_CLASS SIZE_EVENT: public EVENT { public: SIZE_EVENT( UINT wMsg, WPARAM wParam, LPARAM lParam ) : EVENT( wMsg, wParam, lParam ) {} BOOL IsMaximized() const { return (QueryWParam() == SIZEFULLSCREEN); } BOOL IsMinimized() const { return (QueryWParam() == SIZEICONIC); } BOOL IsNormal() const { return (QueryWParam() == SIZENORMAL); } UINT QueryWidth() const { return LOWORD(QueryLParam()); } UINT QueryHeight() const { return HIWORD(QueryLParam()); } }; /************************************************************************* NAME: MOVE_EVENT SYNOPSIS: Received after a window is moved INTERFACE: QueryPos() PARENT: EVENT USES: XYPOINT NOTES: This event maps to WM_MOVE. HISTORY: beng 15-May-1991 Changed QueryPos to return XYPOINT beng 08-Oct-1991 Win32 conversion **************************************************************************/ DLL_CLASS MOVE_EVENT: public EVENT { public: MOVE_EVENT( UINT wMsg, WPARAM wParam, LPARAM lParam ) : EVENT( wMsg, wParam, lParam ) {} XYPOINT QueryPos() const { return XYPOINT(QueryLParam()); } }; /* This is a WIN32 manifest. See wincon.h. */ #ifdef KEY_EVENT #undef KEY_EVENT #endif /************************************************************************* NAME: KEY_EVENT SYNOPSIS: Describe a keystroke (literal) INTERFACE: QueryRepeat() QueryScan() IsExtended() IsAltContext() IsDownPreviously() IsInTransition() PARENT: EVENT CAVEATS: If these seem confusing, well, the SDK ain't no clearer. NOTES: This event maps to the common base of WM_CHAR, WN_KEYUP, and WM_KEYDOWN. HISTORY: beng 07-Oct-1991 Added header beng 08-Oct-1991 Win32 conversion **************************************************************************/ DLL_CLASS KEY_EVENT: public EVENT { public: KEY_EVENT( UINT wMsg, WPARAM wParam, LPARAM lParam ) : EVENT( wMsg, wParam, lParam ) {} UINT QueryRepeat() const { return LOWORD(QueryLParam()); } BYTE QueryScan() const { return LOBYTE(HIWORD(QueryLParam())); } BOOL IsExtended() const { return HIBYTE(HIWORD(QueryLParam())) & 0x1; } BOOL IsAltContext() const { return HIBYTE(HIWORD(QueryLParam())) & 0x20; } BOOL IsDownPreviously() const { return HIBYTE(HIWORD(QueryLParam())) & 0x40; } BOOL IsInTransition() const { return HIBYTE(HIWORD(QueryLParam())) & 0x80; } }; /************************************************************************* NAME: VKEY_EVENT SYNOPSIS: Describes a translated-into-virtual-kbd keystroke INTERFACE: QueryVKey() - returns the virtual key value PARENT: KEY_EVENT CAVEATS: For the literal pre-translation keystroke, use the KEY_EVENT within. Note that a virtual keystroke may be synthesized from multiple hard keystrokes, in which case you only get the last key here. NOTES: This event maps to WM_KEYUP and WM_KEYDOWN. HISTORY: beng 07-Oct-1991 Added header beng 08-Oct-1991 Win32 conversion **************************************************************************/ DLL_CLASS VKEY_EVENT: public KEY_EVENT { public: VKEY_EVENT( UINT wMsg, WPARAM wParam, LPARAM lParam ) : KEY_EVENT( wMsg, wParam, lParam ) {} WPARAM QueryVKey() const { return QueryWParam(); } }; /************************************************************************* NAME: CHAR_EVENT SYNOPSIS: Even more translation - this time, to ANSI charset INTERFACE: QueryChar() PARENT: KEY_EVENT CAVEATS: See VKEY_EVENT NOTES: This event maps to WM_CHAR. HISTORY: beng 07-Oct-1991 Added header beng 08-Oct-1991 Win32 conversion **************************************************************************/ DLL_CLASS CHAR_EVENT: public KEY_EVENT { public: CHAR_EVENT( UINT wMsg, WPARAM wParam, LPARAM lParam ) : KEY_EVENT( wMsg, wParam, lParam ) {} #if defined(WIN32) TCHAR QueryChar() const { #if defined(UNICODE) return LOWORD(QueryWParam()); #else return LOBYTE(LOWORD(QueryWParam())); #endif } #else WCHAR QueryChar() const { return (WCHAR)QueryWParam(); } #endif }; /* This is a WIN32 manifest. See wincon.h. */ #ifdef MOUSE_EVENT #undef MOUSE_EVENT #endif /************************************************************************* NAME: MOUSE_EVENT SYNOPSIS: Describe mouse activity INTERFACE: QueryPos() - return position of mouse relative to window IsLeftButtonDown() - return whether the mouse button was down IsMiddleButtonDown() IsRightButtonDown() IsControlDown() - return whether the modifier-key was down IsShiftDown() PARENT: EVENT USES: XYPOINT NOTES: This event maps to WM_MOUSEMOVE and the various WM_xBUTTONyyy messages. HISTORY: beng 07-Oct-1991 Added header beng 08-Oct-1991 Win32 conversion **************************************************************************/ DLL_CLASS MOUSE_EVENT: public EVENT { public: MOUSE_EVENT( UINT wMsg, WPARAM wParam, LPARAM lParam ) : EVENT( wMsg, wParam, lParam ) {} XYPOINT QueryPos() const { return XYPOINT(QueryLParam()); } BOOL IsLeftButtonDown() const { return ((QueryWParam() & MK_LBUTTON) != 0); } BOOL IsMiddleButtonDown() const { return ((QueryWParam() & MK_MBUTTON) != 0); } BOOL IsRightButtonDown() const { return ((QueryWParam() & MK_RBUTTON) != 0); } BOOL IsControlDown() const { return ((QueryWParam() & MK_CONTROL) != 0); } BOOL IsShiftDown() const { return ((QueryWParam() & MK_SHIFT) != 0); } }; /* This, too, is a WIN32 manifest. See wincon.h. */ #ifdef MENU_EVENT #undef MENU_EVENT #endif /************************************************************************* NAME: MENU_EVENT SYNOPSIS: Announce the pulldown of a menu INTERFACE: QueryMenu() - state which menu was pulled. (Not terribly useful.) PARENT: EVENT NOTES: This event maps to WM_INITMENU. HISTORY: beng 07-Oct-1991 Added header beng 08-Oct-1991 Win32 conversion **************************************************************************/ DLL_CLASS MENU_EVENT: public EVENT { public: MENU_EVENT( UINT wMsg, WPARAM wParam, LPARAM lParam ) : EVENT( wMsg, wParam, lParam ) {} HMENU QueryMenu() const { return (HMENU)QueryWParam(); } }; /************************************************************************* NAME: MENUITEM_EVENT SYNOPSIS: Describe activity within a menu. This event may be used to synchronize the contents of a status line with the current menu selection, a la 1-line help. INTERFACE: QueryMID() IsChecked() IsBitmap() IsDisabled() IsGrayed() IsOwnerDraw() IsSystem() PARENT: EVENT CAVEATS: This event lacks "OnMenuClose" support. Will add if needed. NOTES: This event maps to WM_MENUSELECT. HISTORY: beng 07-Oct-1991 Added header beng 08-Oct-1991 Win32 conversion **************************************************************************/ DLL_CLASS MENUITEM_EVENT: public EVENT { private: WORD QueryFlags() const { #if defined(WIN32) return HIWORD(QueryWParam()); #else return LOWORD(QueryLParam()); #endif } public: MENUITEM_EVENT( UINT wMsg, WPARAM wParam, LPARAM lParam ) : EVENT( wMsg, wParam, lParam ) {} MID QueryMID() const { #if defined(WIN32) return (MID)LOWORD(QueryWParam()); #else return (MID)QueryWParam(); #endif } BOOL IsChecked() const { return (QueryFlags() & MF_CHECKED); } BOOL IsBitmap() const { return (QueryFlags() & MF_BITMAP); } BOOL IsDisabled() const { return (QueryFlags() & MF_DISABLED); } BOOL IsGrayed() const { return (QueryFlags() & MF_GRAYED); } BOOL IsOwnerDraw() const { return (QueryFlags() & MF_OWNERDRAW); } BOOL IsSystem() const { return (QueryFlags() & MF_SYSMENU); } }; /************************************************************************* NAME: QMINMAX_EVENT SYNOPSIS: Return min/max info about a window INTERFACE: QueryMaxWidth() QueryMaxHeight() QueryMaxPos() QueryMinTrackWidth() QueryMinTrackHeight() QueryMaxTrackWidth() QueryMaxTrackHeight() SetMaxWidth() SetMaxHeight() SetMaxPos() SetMinTrackWidth() SetMinTrackHeight() SetMaxTrackWidth() SetMaxTrackHeight() PARENT: EVENT USES: CAVEATS: NOTES: Maybe should return XYDIMENSIONs as well? This event maps to WM_GETMINMAXINFO. HISTORY: beng 14-May-1991 Created beng 08-Oct-1991 Win32 conversion **************************************************************************/ DLL_CLASS QMINMAX_EVENT: public EVENT { private: POINT * CalcPoint( INT iWhich ) const { return ( ((POINT*)QueryLParam()) + iWhich ); } public: QMINMAX_EVENT( UINT wMsg, WPARAM wParam, LPARAM lParam ) : EVENT( wMsg, wParam, lParam ) {} UINT QueryMaxWidth() const { return CalcPoint(1)->x; } UINT QueryMaxHeight() const { return CalcPoint(1)->y; } XYPOINT QueryMaxPos() const { return XYPOINT(*(CalcPoint(2))); } UINT QueryMinTrackWidth() const { return CalcPoint(3)->x; } UINT QueryMinTrackHeight() const { return CalcPoint(3)->y; } UINT QueryMaxTrackWidth() const { return CalcPoint(4)->x; } UINT QueryMaxTrackHeight() const { return CalcPoint(4)->y; } VOID SetMaxWidth( INT dx ) { CalcPoint(1)->x = dx; } VOID SetMaxHeight( INT dy ) { CalcPoint(1)->y = dy; } VOID SetMaxPos( XYPOINT xy ) { CalcPoint(2)->x = xy.QueryX(); CalcPoint(2)->y = xy.QueryY(); } VOID SetMinTrackWidth( INT dx ) { CalcPoint(3)->x = dx; } VOID SetMinTrackHeight( INT dy ) { CalcPoint(3)->y = dy; } VOID SetMaxTrackWidth( INT dx ) { CalcPoint(4)->x = dx; } VOID SetMaxTrackHeight( INT dy ) { CalcPoint(4)->y = dy; } }; /************************************************************************* NAME: SYSCHANGE_EVENT SYNOPSIS: Announce a system configuration change INTERFACE: Completely unknown PARENT: EVENT CAVEATS: This class exists as a placeholder. HISTORY: beng 07-Oct-1991 Added this useless header beng 08-Oct-1991 Win32 conversion **************************************************************************/ DLL_CLASS SYSCHANGE_EVENT: public EVENT { public: SYSCHANGE_EVENT( UINT wMsg, WPARAM wParam, LPARAM lParam ) : EVENT( wMsg, wParam, lParam ) {} // totally unspecified for now }; /************************************************************************* NAME: QMOUSEACT_EVENT SYNOPSIS: Return whether a mousedown activates a control. INTERFACE: QueryHitTest() - the value returned at OnQHitTest time. QueryMouseMsg() - the value of the mouse message which generated this event. PARENT: EVENT NOTES: This event maps to WM_MOUSEACTIVATE. Should this wrap QueryMouseMsg() further? HISTORY: beng 18-May-1992 Created **************************************************************************/ DLL_CLASS QMOUSEACT_EVENT: public EVENT { public: QMOUSEACT_EVENT( UINT wMsg, WPARAM wParam, LPARAM lParam ) : EVENT( wMsg, wParam, lParam ) {} UINT QueryMouseMsg() const { return (UINT) HIWORD(QueryLParam()); } UINT QueryHitTest() const { return (UINT) LOWORD(QueryLParam()); } }; #endif // _BLTEVENT_HXX_ - end of file