/**********************************************************************/ /** Microsoft Windows NT **/ /** Copyright(c) Microsoft Corp., 1992 **/ /**********************************************************************/ /* bltlhour.hxx The logon hours custom control FILE HISTORY: beng 12-May-1992 Created */ #ifndef _BLTLHOUR_HXX_ #define _BLTLHOUR_HXX_ #include "lhourset.hxx" #include "string.hxx" /********************************************************************** NAME: LOGON_HOURS_CONTROL SYNOPSIS: INTERFACE: LOGON_HOURS_CONTROL() - Ctor QueryHours() - Query and set the state of the control, SetHours() using the LOGON_HOURS_SETTING auxclass. DoPermitButton() - Hook for the dialog. DoBanButton() - Another hook for the dialog PARENT: CUSTOM_CONTROL, CONTROL_WINDOW USES: LOGON_HOURS_SETTING, RESOURCE_STR, XYDIMENSION, XYPOINT CAVEATS: NOTES: HISTORY: beng 12-May-1992 Created beng 18-May-1992 Enabled mouse and keyboard handling **********************************************************************/ DLL_CLASS LOGON_HOURS_CONTROL: public CONTROL_WINDOW, public CUSTOM_CONTROL { private: static const TCHAR * _pszClassName; HCURSOR _hcurCross; // Used within the grid. UINT _dyRow; // Size metrics, calc'd in CalcSizes, UINT _dxFirstColumn; // used all over the place UINT _dxColumn; INT _dxLabelFudge; RESOURCE_STR * _apnlsDayOfWeek[7]; // For button titles UINT _iButtonDown; // Index (1-based) of which button is depressed. // 0 = None; 1-7 = Day; 8-31 = Hour; 32 = Corner. // (Only one can be down at a time, so this works.) UINT _iWithFocus; // Index, similar to above, but followed by every call, // of which element within the control has the focus. // 0 denotes none; 1-32 = buttons; 33-200 = cells, // moving left to right, top to bottom in the control. UINT _iFocusSave; // Saves the above while control doesn't have focus BOOL _fSpaceIsDown; // In the middle of a spacebar sequence BOOL _fFocusVisible; // Focus rectangle displayed (i.e. needs erase // in some situations) BYTE _abSetting[24*7]; // The currently set logon hours. Representation // is an efficiency compromise between an array of // 168 full BOOLs and a packed bitfield. BOOL _fCellsSelected; // Set if some cells are selected UINT _iCellSelUpper; // Index of selected cell UINT _iCellSelLower; // If not same as previous, other corner of rect BOOL _fMouseTrap; // In mid-click-sequence. BOOL DrawBackground( PAINT_DISPLAY_CONTEXT &dc ) const; BOOL DrawGridWires( PAINT_DISPLAY_CONTEXT &dc ) const; BOOL DrawAllButtons( PAINT_DISPLAY_CONTEXT &dc ) const; VOID DrawOneCornerButton( PAINT_DISPLAY_CONTEXT &dc, const XYRECT &r, BOOL fDown, HBRUSH hbrFace, HPEN hpenShadow, HPEN hpenHlight ) const; VOID DrawOneFlatButton( PAINT_DISPLAY_CONTEXT &dc, const XYRECT &r, BOOL fDown, HBRUSH hbrFace, HPEN hpenShadow, HPEN hpenHlight ) const; BOOL DrawGridSetting( PAINT_DISPLAY_CONTEXT &dc ) const; BOOL DrawOneDayBar( PAINT_DISPLAY_CONTEXT &dc, INT iRow, INT iColHead, INT iColTail, HBRUSH hbrBar ) const; VOID DrawFocusOnCell( const DISPLAY_CONTEXT &dc, INT iCell ) const; VOID DrawFocusOnDayButton( const DISPLAY_CONTEXT &dc, INT iDay ) const; VOID DrawFocusOnHourButton( const DISPLAY_CONTEXT &dc, INT iHour ) const; VOID DrawFocusOnCornerButton( const DISPLAY_CONTEXT &dc ) const; VOID DrawFocusSomewhere( const DISPLAY_CONTEXT &dc, INT iFocus ) const; VOID DrawCurrentSelection( const DISPLAY_CONTEXT &dc ) const; VOID DrawSelectionOnCell( const DISPLAY_CONTEXT &dc, INT iCell ) const; VOID DrawSelectionOnCells( const DISPLAY_CONTEXT &dc, INT iFrom, INT iTo ) const; VOID EraseSelection( const DISPLAY_CONTEXT &dc ); VOID SetSelection( INT iCell ); VOID SetSelection( INT iFrom, INT iTo ); VOID MoveFocusTo( INT iNewFocus ); VOID MoveFocusUp(); VOID MoveFocusDown(); VOID MoveFocusLeft(); VOID MoveFocusRight(); VOID CalcGridRect( XYRECT * pr ) const; APIERR CalcSizes( XYDIMENSION dxy ); VOID CalcRectForCell( XYRECT * pr, INT iCell ) const; VOID CalcRectForHour( XYRECT * pr, INT iHour ) const; VOID CalcRectForDay( XYRECT * pr, INT iDay ) const; VOID CalcRectForCorner( XYRECT * pr ) const; INT CalcButtonFromPoint( XYPOINT xy ) const; APIERR LoadLabels( MSGID idDay0 ); VOID UnloadLabels(); VOID DoButtonDownVisuals(); VOID DoButtonUpVisuals( BOOL fTrigger = TRUE ); VOID DoButtonClick( INT iButton ); VOID SetSelectedCells( BOOL fPermit ); VOID InvalidateButton( INT iButtonOrCell ); VOID Beep() const; BOOL IsButtonACell( INT iButton ) const; protected: virtual BOOL OnPaintReq(); virtual BOOL OnFocus( const FOCUS_EVENT & ); virtual BOOL OnDefocus( const FOCUS_EVENT & ); virtual BOOL OnKeyDown( const VKEY_EVENT & ); virtual BOOL OnKeyUp( const VKEY_EVENT & ); virtual BOOL OnLMouseButtonDown( const MOUSE_EVENT & ); virtual BOOL OnLMouseButtonUp( const MOUSE_EVENT & ); virtual BOOL OnMouseMove( const MOUSE_EVENT & ); virtual BOOL OnQMouseCursor( const QMOUSEACT_EVENT & ); virtual ULONG OnQDlgCode(); virtual ULONG OnQHitTest( const XYPOINT & xy ); virtual ULONG OnQMouseActivate( const QMOUSEACT_EVENT & ); public: LOGON_HOURS_CONTROL( OWNER_WINDOW *powin, CID cid ); LOGON_HOURS_CONTROL( OWNER_WINDOW *powin, CID cid, XYPOINT xy, XYDIMENSION dxy ); ~LOGON_HOURS_CONTROL(); APIERR QueryHours( LOGON_HOURS_SETTING * plhours ) const; APIERR SetHours( const LOGON_HOURS_SETTING * plhours ); // External hooks with which a dialog coordinates this control // with its Permit and Ban buttons. VOID DoPermitButton(); VOID DoBanButton(); // subclasses and others can use this to determine the X-position // in pixels for a particular row separator, 1 <= iRow <= 25 // 1 for left midnight, 13 for noon, 25 for right midnight UINT QueryXForRow( INT nRow ); }; #endif // _BLTLHOUR_HXX_ - end of file