WindowsXP-SP1/admin/display/loghours/schedmat.h
2020-09-30 16:53:49 +02:00

863 lines
30 KiB
C++

//****************************************************************************
//
// Copyright (c) 1997-2001, Microsoft Corporation
//
// File: SCHEDMAT.H
//
// Definitions for the schedule matrix classes. These classes provide a basic
// schedule matrix control. The classes defined here are:
//
// CMatrixCell A data structure class for the CScheduleMatrix.
// CHourLegend Support window class that draws the matrix legend.
// CPercentLabel Support window class that draws percentage labels.
// CScheduleMatrix A class that displays daily or weekly schedule data.
//
// History:
//
// Scott Walker, SEA 3/10 Created.
//
//****************************************************************************
#ifndef _SCHEDMAT_H_
#define _SCHEDMAT_H_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// schedmat.h : header file
//
#define SCHEDMSG_GETSELDESCRIPTION WM_APP+1
#define SCHEDMSG_GETPERCENTAGE WM_APP+2
#ifndef UITOOLS_CLASS
#define UITOOLS_CLASS
#endif
// Classes defined in this file
class CMatrixCell;
class CScheduleMatrix;
// Schedule matrix types
#define MT_DAILY 1 // 1x24 matrix
#define MT_WEEKLY 2 // 7x24 matrix
// GetMergeState return codes
#define MS_UNMERGED 0
#define MS_MERGED 1
#define MS_MIXEDMERGE 2
// Matrix notification codes
#define MN_SELCHANGE (WM_USER + 175)
#define ON_MN_SELCHANGE(id, memberFxn) ON_CONTROL(MN_SELCHANGE, id, memberFxn)
/////////////////////////////////////////////////////////////////////////////
// CMatrixCell
#define DEFBACKCOLOR RGB(255,255,255) // White
#define DEFFORECOLOR RGB(0,0,128) // Dark blue
#define DEFBLENDCOLOR RGB(255,255,0) // Yellow
// Cell flags
#define MC_MERGELEFT 0x00000001
#define MC_MERGETOP 0x00000002
#define MC_MERGE 0x00000004
#define MC_LEFTEDGE 0x00000010
#define MC_RIGHTEDGE 0x00000020
#define MC_TOPEDGE 0x00000040
#define MC_BOTTOMEDGE 0x00000080
#define MC_BLEND 0x00000100
#define MC_ALLEDGES (MC_LEFTEDGE | MC_RIGHTEDGE | MC_TOPEDGE | MC_BOTTOMEDGE)
class UITOOLS_CLASS CMatrixCell : public CObject
{
DECLARE_DYNAMIC(CMatrixCell)
friend CScheduleMatrix;
// Construction
public:
CMatrixCell();
virtual ~CMatrixCell();
protected:
COLORREF m_crBackColor;
COLORREF m_crForeColor;
UINT m_nPercentage;
COLORREF m_crBlendColor;
DWORD m_dwUserValue;
LPVOID m_pUserDataPtr;
DWORD m_dwFlags;
};
/////////////////////////////////////////////////////////////////////////////
// CHourLegend window
class UITOOLS_CLASS CHourLegend : public CWnd
{
DECLARE_DYNAMIC(CHourLegend)
friend CScheduleMatrix;
// Construction
public:
CHourLegend();
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CHourLegend)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CHourLegend();
protected:
HICON m_hiconSun, m_hiconMoon;
HFONT m_hFont;
int m_nCharHeight, m_nCharWidth;
int m_nCellWidth;
CRect m_rLegend;
// Generated message map functions
protected:
//{{AFX_MSG(CHourLegend)
afx_msg void OnPaint();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
// CPercentLabel window
class UITOOLS_CLASS CPercentLabel : public CWnd
{
DECLARE_DYNAMIC(CPercentLabel)
friend CScheduleMatrix;
// Construction
public:
CPercentLabel();
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CHourLegend)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CPercentLabel();
protected:
CScheduleMatrix *m_pMatrix;
HFONT m_hFont;
int m_nCellWidth;
CRect m_rHeader;
CRect m_rLabels;
// Generated message map functions
protected:
//{{AFX_MSG(CPercentLabel)
afx_msg void OnPaint();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
// CScheduleMatrix window
// Schedule matrix command IDs
#define SM_ID_DAYBASE 100
#define SM_ID_ALL (SM_ID_DAYBASE + 0)
#define SM_ID_MONDAY (SM_ID_DAYBASE + 1)
#define SM_ID_TUESDAY (SM_ID_DAYBASE + 2)
#define SM_ID_WEDNESDAY (SM_ID_DAYBASE + 3)
#define SM_ID_THURSDAY (SM_ID_DAYBASE + 4)
#define SM_ID_FRIDAY (SM_ID_DAYBASE + 5)
#define SM_ID_SATURDAY (SM_ID_DAYBASE + 6)
#define SM_ID_SUNDAY (SM_ID_DAYBASE + 7)
#define SM_ID_HOURBASE 110
//****************************************************************************
//
// CLASS: CScheduleMatrix
//
// CScheduleMatrix inplements a basic schedule matrix control. This control
// provides the mechanics of a daily or weekly schedule UI but has no knowledge
// about the data it maintains. The matrix is an array of cells representing
// the hours in a day and optionally the days in a week. The cells can be
// rendered in a variety of ways to represent programmer-defined meaning in
// each cell. The following display properties can be set for individual cells
// or for a block of cells at once:
//
// BackColor Background color of the cell (defaults white).
// ForeColor ForeGround color of the cell (defaults dark blue).
// Percentage Percentage of foreground to background color. This is
// rendered as a histogram in the cell.
// BlendColor 50% dither color on a cell to represent some binary state
// of the cell as compared to another cell (defaults yellow).
// BlendState Specifies whether blend color is showing or not.
//
// A block of cells can be "merged" together to form a discreet block of color
// within the matrix grid. This is useful for schedule applications that want
// to assign a schedule function to a time range. It is the responsibility
// of the program to track these blocks and prevent or resolve any confusion
// from overlapping "merged" blocks.
//
// Each cell can contain two kinds of programmer-defined data that are
// maintained with the cell but not touched by the matrix control: a DWORD
// value and a pointer value. These values can be used to hold data representing
// schedule information for each hour in the matrix.
//
// The parent window receives a notification message (MN_SELCHANGE) whenever the
// user modifies the current selection in the matrix.
//
//?? Later: May add Icon and Text properties per cell.
//
// PUBLIC MEMBERS:
//
// CScheduleMatrix Constructor.
// ~CScheduleMatrix Destructor.
// SetType Sets the matrix type to MT_DAILY or MT_WEEKLY.
// Create Creates the control window.
//
// Selection:
//
// DeselectAll Deselects all cells.
// SelectAll Selects all cells.
// SetSel Selects a block of cells.
// GetSel Gets the current selection.
// GetSelDescription Gets text description of selection range
// CellInSel Tests if a cell is in the current selection
//
// GetCellSize Gets the size of a cell in the current matrix
// DrawCell Draws a sample cell in specified DC
//
// Block Data Functions:
//
// SetBackColor Sets color used to paint cell background.
// SetForeColor Sets color used to paint cell percentage.
// SetPercentage Sets percentage of foreground to background.
// SetBlendColor Sets color blended onto cells.
// SetBlendState Turns blend on or off.
// SetUserValue Sets user defined DWORD value.
// SetUserDataPtr Sets user defined data pointer.
// MergeCells Graphically merges cells so they render as a block.
// UnMergeCells Cancels merging for a block of cells.
// GetMergeState Returns merge state for a block of cells
//
// Cell Data Functions:
//
// GetBackColor Gets the back color of a cell.
// GetForeColor Gets the forecolor of a cell.
// GetPercentage Gets the percentage of foreground to background.
// GetBlendColor Gets the blend color of cell.
// GetBlendState Gets the blend state of a cell.
// GetUserValue Gets the user defined DWORD value of the cell.
// GetUserDataPtr Gets the user defined data pointer of the cell.
//
//============================================================================
//
// CScheduleMatrix::CScheduleMatrix
//
// Constructor. The constructor creates the data structure associated with
// the schedule matrix. As with other CWnd objects, the control itself must
// be instantiated with a call to Create.
//
// Parameters I:
//
// void Default constructor. Constructs a MT_WEEKLY
// schedule matrix.
//
// Parameters II:
//
// DWORD dwType Type constructor. CScheduleMatrix with initial
// type: MT_DAILY or MT_WEEKLY
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::SetType
//
// Sets the type of the matrix to MT_WEEKLY or MT_DAILY. Call this function
// after construction but before Create.
//
// Parameters:
//
// DWORD dwType Matrix Type: MT_DAILY or MT_WEEKLY
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::Create
//
// Create initializes the control's window and attaches it to the CScheduleMatrix.
//
// Parameters:
//
// DWORD dwStyle Specifies the window style of the control.
// const RECT& rect Specifies the position and size of the control.
// CWnd* pParentWnd Specifies the parent window of the control.
// UINT nID Specifies the control ID.
//
// Returns:
//
// BOOL bResult TRUE if successful.
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::DeselectAll
//
// Deselects all cells in the matrix.
//
// Returns:
//
// BOOL bChanged TRUE if selection changes.
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::SelectAll
//
// Selects all cells in the matrix.
//
// Returns:
//
// BOOL bChanged TRUE if selection changes.
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::SetSel
//
// Sets the selection to the specified block. The selection is a continuous
// block of cells defined by a starting hour/day pair and extending over a
// range of hours and days.
//
// Parameters:
//
// UINT nHour Starting hour for the selection.
// UINT nDay Starting day for the selection.
// UINT nNumHours Range of selection along the hour axis. (Default=1).
// UINT nNumDays Range of selection along the day axis. (Default=1).
//
// Returns:
//
// BOOL bChanged TRUE if selection changes.
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::GetSel
//
// Retrieves the current selection.
//
// Parameters:
//
// UINT &nHour Receiver for starting hour for the selection.
// UINT &nDay Receiver for starting day for the selection.
// UINT &nNumHours Receiver for range of selection along the hour axis.
// UINT &nNumDays Receiver for range of selection along the day axis.
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::GetDescription
//
// Returns a textual description of the specified block of cells. This is useful
// for applications that wish to provide feedback about merged or grouped blocks
// in the matrix.
//
// Parameters:
//
// CString &sText Receiver for description text.
// UINT nHour Starting hour for the block.
// UINT nDay Starting day for the block.
// UINT nNumHours Range of block along the hour axis. (Default=1).
// UINT nNumDays Range of block along the day axis. (Default=1).
//
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::GetSelDescription
//
// Returns a textual description of the current selection. This is useful for
// applications that wish to provide feedback about the selection.
//
// Parameters:
//
// CString &sText Receiver for description text.
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::CellInSel
//
// Returns TRUE if the specified cell is selected (i.e. is in the block of
// selected cells).
//
// Parameters:
//
// UINT nHour Hour position of the cell.
// UINT nDay Day position of the cell.
//
// Returns:
//
// BOOL bSelected TRUE if cell is selected.
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::GetCellSize
//
// Returns the size of a cell in the current matrix. This function may be used
// in conjunction with DrawCell (below) to render a sample cell for a legend.
//
// Returns:
//
// CSize size Size of the cell.
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::DrawCell
//
// Renders a cell with the specified properties. Use this function to create
// a legend defining the cell states in the matrix. The cell is drawn as a
// histogram with the specified background and foreground colors in a proportion
// specified by the percentage. If blend state is TRUE, the blend color is
// blended in with a 50% dither on top of the foreground and background.
//
// Parameters:
//
// CDC *pdc Display context to draw into.
// LPCRECT pRect Cell boundaries in the specified DC.
// UINT nPercent Percentage if foreground to background color.
// BOOL bBlendState Draw blend dither if TRUE (Default = FALSE).
// COLORREF crBackColor Background color (Default = DEFBACKCOLOR).
// COLORREF crForeColor Foreground color (Default = DEFFORECOLOR).
// COLORREF crBlendColor Blend color (Default = DEFBLENDCOLOR).
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::SetBackColor
//
// Sets the background color for the specified block of cells.
//
// Parameters:
//
// COLORREF crColor New color property for the block of cells.
// UINT nHour Starting hour for the block.
// UINT nDay Starting day for the block.
// UINT nNumHours Range of block along the hour axis. (Default=1).
// UINT nNumDays Range of block along the day axis. (Default=1).
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::SetForeColor
//
// Sets the foreground color for the specified block of cells.
//
// Parameters:
//
// COLORREF crColor New color property for the block of cells.
// UINT nHour Starting hour for the block.
// UINT nDay Starting day for the block.
// UINT nNumHours Range of block along the hour axis. (Default=1).
// UINT nNumDays Range of block along the day axis. (Default=1).
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::SetPercentage
//
// Sets the percentage of foreground to background color for the specified block
// of cells. This percentage is rendered as a histogram of one color to the
// other with foreground color on the bottom.
//
// Parameters:
//
// UINT nPercent Percentage of foreground to background color.
// UINT nHour Starting hour for the block.
// UINT nDay Starting day for the block.
// UINT nNumHours Range of block along the hour axis. (Default=1).
// UINT nNumDays Range of block along the day axis. (Default=1).
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::SetBlendColor
//
// Sets the blend color for the specified block of cells. Blend color is
// overlayed in a 50% dither pattern on the foreground and background colors
// of the cells.
//
// Parameters:
//
// COLORREF crColor New color property for the block of cells.
// UINT nHour Starting hour for the block.
// UINT nDay Starting day for the block.
// UINT nNumHours Range of block along the hour axis. (Default=1).
// UINT nNumDays Range of block along the day axis. (Default=1).
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::SetBlendState
//
// If blend state is TRUE for a block of cells, then the blend color is applied
// in a 50% dither pattern.
//
// Parameters:
//
// BOOL bState Apply blend if TRUE.
// UINT nHour Starting hour for the block.
// UINT nDay Starting day for the block.
// UINT nNumHours Range of block along the hour axis. (Default=1).
// UINT nNumDays Range of block along the day axis. (Default=1).
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::SetUserValue
//
// Store a user-defined DWORD with each cell in the block.
//
// Parameters:
//
// DWORD dwValue User-defined value to store.
// UINT nHour Starting hour for the block.
// UINT nDay Starting day for the block.
// UINT nNumHours Range of block along the hour axis. (Default=1).
// UINT nNumDays Range of block along the day axis. (Default=1).
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::SetUserDataPtr
//
// Store a user-defined pointer with each cell in the block.
//
// Parameters:
//
// LPVOID lpData User-defined pointer to store.
// UINT nHour Starting hour for the block.
// UINT nDay Starting day for the block.
// UINT nNumHours Range of block along the hour axis. (Default=1).
// UINT nNumDays Range of block along the day axis. (Default=1).
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::MergeCells
//
// Visually merges the specified block of cells to give them the appearance
// of a contiguous block. A merged block of cells does not contain the grid
// lines that normally separate each cell. Use this function to create
// block areas that represent an event in the schedule. Note that merged
// blocks do not actually become a managed object in the matrix and that it
// is therefore possible to merge a block of cells that intersects a
// previously merged block. It is the application's responsibility to track
// these blocks and prevent or resolve any confusion from overlapping "merged"
// blocks.
//
// Parameters:
//
// UINT nHour Starting hour for the block.
// UINT nDay Starting day for the block.
// UINT nNumHours Range of block along the hour axis. (Default=1).
// UINT nNumDays Range of block along the day axis. (Default=1).
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::UnMergeCells
//
// Removes the merge effect imposed by MergeCells.
//
// Parameters:
//
// UINT nHour Starting hour for the block.
// UINT nDay Starting day for the block.
// UINT nNumHours Range of block along the hour axis. (Default=1).
// UINT nNumDays Range of block along the day axis. (Default=1).
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::GetMergeState
//
// Retrieves the merge state of the specified block of cells. A block can
// have one of the following merge states:
//
// MS_UNMERGED No cell in the specified block is merged.
// MS_MERGED All cells in the specified block have been merged and
// in fact represent a "perfect" merge, i.e. all edges
// of the merged block have been accounted for. An
// incomplete part of a merged block returns MS_MIXEDMERGE.
// MS_MIXEDMERGE The specified block is a mixture of merged and unmerged
// cells or an incomplete portion of a merged block has
// been specified.
//
// Parameters:
//
// UINT nHour Starting hour for the block.
// UINT nDay Starting day for the block.
// UINT nNumHours Range of block along the hour axis. (Default=1).
// UINT nNumDays Range of block along the day axis. (Default=1).
//
// Returns:
//
// UINT nState MS_UNMERGED, MS_MERGED, or MS_MIXEDMERGE.
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::GetBackColor
//
// Retrieves the background color of the specified cell.
//
// Parameters:
//
// UINT nHour Hour position of the cell.
// UINT nDay Day position of the cell.
//
// Returns:
//
// COLORREF crColor Current color property for the cell.
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::GetForeColor
//
// Retrieves the foreground color of the specified cell.
//
// Parameters:
//
// UINT nHour Hour position of the cell.
// UINT nDay Day position of the cell.
//
// Returns:
//
// COLORREF crColor Current color property for the cell.
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::GetPercentage
//
// Retrieves the percentage of foreground to background color in the specified
// cell.
//
// Parameters:
//
// UINT nHour Hour position of the cell.
// UINT nDay Day position of the cell.
//
// Returns:
//
// UINT nPercent Current percentage of foreground to background.
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::GetBlendColor
//
// Retrieves the blend color of the specified cell.
//
// Parameters:
//
// UINT nHour Hour position of the cell.
// UINT nDay Day position of the cell.
//
// Returns:
//
// COLORREF crColor Current color property for the cell.
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::GetBlendState
//
// Retrieves the blend state of the specified cell. If blend state is TRUE,
// the cell is currently being rendered with a 50% blend on top of the foreground
// and background colors.
//
// Parameters:
//
// UINT nHour Hour position of the cell.
// UINT nDay Day position of the cell.
//
// Returns:
//
// BOOL bState TRUE if blend is turned on for this cell.
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::GetUserValue
//
// Returns the user-defined DWORD value associated with the specified cell.
//
// Parameters:
//
// UINT nHour Hour position of the cell.
// UINT nDay Day position of the cell.
//
// Returns:
//
// DWORD dwValue User-defined DWORD value.
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::GetUserDataPtr
//
// Returns the user-defined data pointer associated with the specified cell.
//
// Parameters:
//
// UINT nHour Hour position of the cell.
// UINT nDay Day position of the cell.
//
// Returns:
//
// LPVOID lpData User-defined pointer.
//
//----------------------------------------------------------------------------
//
// CScheduleMatrix::~CScheduleMatrix
//
// Destructor.
//
//****************************************************************************
class UITOOLS_CLASS CScheduleMatrix : public CWnd
{
DECLARE_DYNAMIC(CScheduleMatrix)
// Construction
public:
CScheduleMatrix();
CScheduleMatrix(UINT nType);
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CScheduleMatrix)
public:
//}}AFX_VIRTUAL
virtual BOOL Create(LPCTSTR lpszWindowName, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
// Implementation
public:
void SetType(UINT nType);
BOOL DeselectAll();
BOOL SelectAll();
BOOL SetSel(UINT nHour, UINT nDay, UINT nNumHours, UINT nNumDays);
void GetSel(UINT& nHour, UINT& nDay, UINT& nNumHours, UINT& nNumDays);
void GetSelDescription(CString &sText);
BOOL CellInSel(UINT nHour, UINT nDay);
CSize GetCellSize();
void DrawCell(CDC *pdc, LPCRECT pRect, UINT nPercent, BOOL bBlendState = FALSE,
COLORREF crBackColor = DEFBACKCOLOR, COLORREF crForeColor = DEFFORECOLOR,
COLORREF crBlendColor = DEFBLENDCOLOR);
void SetBackColor(COLORREF crColor, UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
void SetForeColor(COLORREF crColor, UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
void SetPercentage(UINT nPercent, UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
void SetBlendColor(COLORREF crColor, UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
void SetBlendState(BOOL bState, UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
void SetUserValue(DWORD dwValue, UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
void SetUserDataPtr(LPVOID lpData, UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
void MergeCells(UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
void UnMergeCells(UINT nHour, UINT nDay, UINT nNumHours, UINT nNumDays=1);
UINT GetMergeState(UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
COLORREF GetBackColor(UINT nHour, UINT nDay);
COLORREF GetForeColor(UINT nHour, UINT nDay);
UINT GetPercentage(UINT nHour, UINT nDay);
COLORREF GetBlendColor(UINT nHour, UINT nDay);
BOOL GetBlendState(UINT nHour, UINT nDay);
DWORD GetUserValue(UINT nHour, UINT nDay);
LPVOID GetUserDataPtr(UINT nHour, UINT nDay);
void GetDescription(CString &sText, UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
virtual ~CScheduleMatrix();
protected:
CHourLegend m_HourLegend;
CPercentLabel m_PercentLabel;
UINT m_nType;
// Data
CMatrixCell m_CellArray[24][7];
// Metrics
UINT m_nCellWidth;
UINT m_nCellHeight;
CRect m_rHourLegend;
CRect m_rAllHeader;
CRect m_rHourHeader;
CRect m_rDayHeader;
CRect m_rCellArray;
CRect m_rPercentLabel;
CString m_DayStrings[8];
// Selection
UINT m_nSelHour, m_nSelDay, m_nNumSelHours, m_nNumSelDays;
UINT m_nSaveHour, m_nSaveDay, m_nNumSaveHours, m_nNumSaveDays;
// Work vars
CBrush m_brBlend, m_brMask;
CBitmap m_bmBlend, m_bmMask;
HFONT m_hFont;
CPoint m_ptDown, m_ptFocus;
BOOL m_bShifted;
// Generated message map functions
protected:
CString FormatTime (UINT nHour) const;
//{{AFX_MSG(CScheduleMatrix)
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnPaint();
afx_msg void OnSetFocus(CWnd* pOldWnd);
afx_msg void OnKillFocus(CWnd* pNewWnd);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg UINT OnGetDlgCode();
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
//}}AFX_MSG
afx_msg LRESULT OnSetFont( WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnGetFont( WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnGetObject (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnGetSelDescription (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnGetPercentage (WPARAM wParam, LPARAM lParam);
BOOL SetSelValues(UINT nHour, UINT nDay, UINT nNumHours, UINT nNumDays);
void InvalidateCells(UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1,
BOOL bErase = TRUE);
void SetMatrixMetrics(int cx, int cy);
void CellToClient(LONG &nX, LONG &nY);
void ClientToCell(LONG &nX, LONG &nY);
void DrawCell(CDC *pdc, CMatrixCell *pCell, int x, int y, int w, int h);
void DrawHeader(CDC *pdc, LPCRECT lpRect, LPCTSTR pszText, BOOL bSelected);
void Press(CPoint pt, BOOL bExtend);
void Extend(CPoint pt);
void Release(CPoint pt);
DECLARE_MESSAGE_MAP()
private:
CString GetLocaleDay (LCTYPE lcType) const;
};
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif // _SCHEDMAT_H_