// XTPDatePickerControl.h: interface for the CXTPDatePickerControl class. // // This file is a part of the XTREME CALENDAR MFC class library. // (c)1998-2012 Codejock Software, All Rights Reserved. // // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN // CONSENT OF CODEJOCK SOFTWARE. // // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A // SINGLE COMPUTER. // // CONTACT INFORMATION: // support@codejock.com // http://www.codejock.com // ///////////////////////////////////////////////////////////////////////////// //{{AFX_CODEJOCK_PRIVATE #if !defined(_XTPDATEPICKERCONTROL_H__) #define _XTPDATEPICKERCONTROL_H__ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 //}}AFX_CODEJOCK_PRIVATE // XTPDatePickerControl.h : header file // ///////////////////////////////////////////////////////////////////////////// // CXTPDatePickerControl window class CXTPDatePickerPaintManager; class CXTPDatePickerItemMonth; class CXTPDatePickerDaysCollection; class CXTPDatePickerList; class CXTPDatePickerControl; class CXTPNotifyConnection; class CXTPNotifySink; //=========================================================================== // Summary: // This structure represents a set of parameters which are // used to display day items. // 1. There could be customized foreground and background colors. // 2. Also you can text font for the displayed day text. // 3. And as the last thing you can customize a day picture displayed there, // using OLE PICTUREDISP interface and OleSetPicture method. //=========================================================================== struct _XTP_EXT_CLASS XTP_DAYITEM_METRICS : public CXTPCmdTarget { //----------------------------------------------------------------------- // Summary: // Get day item font.. // Returns: // A pointer to the font object. // Remarks: // Return a day font stored by the structure. //----------------------------------------------------------------------- CFont* GetFont(); //----------------------------------------------------------------------- // Summary: // Set a new font for the day item. // Parameters: // pFont - Pointer to a CFont object. //----------------------------------------------------------------------- void SetFont(CFont* pFont); COLORREF clrForeground; // A COLORREF object that contains the item's foreground color. COLORREF clrBackground; // A COLORREF object that contains the item's background color. //{{AFX_CODEJOCK_PRIVATE XTP_DAYITEM_METRICS(); virtual ~XTP_DAYITEM_METRICS(){}; private: CFont m_fntText; // A CFont object that contains the item's text font. //}}AFX_CODEJOCK_PRIVATE }; //=========================================================================== // Summary: // Structure used to send button notification messages. // Remarks: // This structure represents a set of parameters which are sent // to the Main window in a WM_NOTIFY message from DatePicker control // and notify the main window when a button event occurs. //=========================================================================== struct XTP_NC_DATEPICKER_BUTTON { NMHDR hdr; // Contains information about a notification message. int nID; // Date picker button ID (could be XTP_IDS_DATEPICKER_TODAY or XTP_IDS_DATEPICKER_NONE) }; //--------------------------------------------------------------------------- // Summary: // Callback function definition for the IsITEMMETRICS function. // Remarks: // First three arguments are required. The pUserData can be NULL. // pDatePicker - is CXTPDatePickerControl* type to provide DatePicker // control pointer. // rDateTime - is COleDateTime reference type to provide date time // storage object. // pDayItemMetrics - is XTP_DAYITEM_METRICS* pointer type to provide display // metrics. // pUserData - is void* pointer to any additional user's defined parameter, // this value can be NULL. //--------------------------------------------------------------------------- typedef void (CALLBACK* PFNITEMMETRICS)(CXTPDatePickerControl* pDatePicker, const COleDateTime& rDateTime, XTP_DAYITEM_METRICS* pDayItemMetrics, void* pUserData); //{{AFX_CODEJOCK_PRIVATE const UINT XTP_NC_DATEPICKER_BUTTON_CLICK = (NM_FIRST - 50); // Notify ID to parent window. const UINT XTP_NC_DATEPICKER_SELECTION_CHANGED = (NM_FIRST - 51); // Notify ID to parent window. const UINT XTP_DATEPICKER_TIMERID = 255; // Date picker timer ID. const UINT XTP_DATEPICKER_TIMER_INTERVAL = 200; // Date picker timer interval. const UINT XTP_SELECTION_INFINITE = (UINT)-1; // Infinite number of selected days. //}}AFX_CODEJOCK_PRIVATE // ---------------------------------------------------------------------- // Summary: // Border style of Date picker control // ---------------------------------------------------------------------- enum XTPDatePickerBorderStyle { xtpDatePickerBorderNone, // No border. xtpDatePickerBorder3D, // 3D border. xtpDatePickerBorderOffice, // Office-like border xtpDatePickerBorderStatic // Static border. }; // ---------------------------------------------------------------------- // Summary: // This class represents a DatePicker button. // Remarks: // CXTPDatePickerButton provides storage for all parameters needed to // display and handle a button. // ---------------------------------------------------------------------- class _XTP_EXT_CLASS CXTPDatePickerButton { public: //----------------------------------------------------------------------- // Summary: // Default button constructor. // Remarks: // Default button constructor handles all necessary // initialization. //----------------------------------------------------------------------- CXTPDatePickerButton(); //----------------------------------------------------------------------- // Summary: // Destroys a CXTPDatePickerButton object, handles cleanup // and de-allocation. //----------------------------------------------------------------------- virtual ~CXTPDatePickerButton() { } //----------------------------------------------------------------------- // Summary: // Get a button caption. // Remarks: // Load from resources string using ID stored in m_nID member or // value which was set by SetCaption() call. // Returns: // Returns a button caption. // See Also: m_nID, SetCaption //----------------------------------------------------------------------- virtual CString GetCaption() const; //----------------------------------------------------------------------- // Summary: // Set a button caption. // Parameters: // pcszCaption - A caption string. // Remarks: // If pcszCaption is empty string - GetCaption will the m_nID to load // caption string from resources. // See Also: GetCaption, m_nID //----------------------------------------------------------------------- virtual void SetCaption(LPCTSTR pcszCaption); public: int m_nID; // This member variable is used to specify the identifier of the // button. Also it used as resource ID for a caption string. CRect m_rcButton; // This member variable is used to specify the bounding rectangle // coordinates of a button. BOOL m_bVisible; // This member variable is used to indicate if a button is visible. BOOL m_bPressed; // This member variable is used to indicate if a button is pressed. BOOL m_bHighlight; // This member variable is used to indicate if a button is // highlighted. protected: CString m_strCaption; // This member variable is used to specify the caption of the button. }; // ---------------------------------------------------------------------- // Summary: // Class CXTPDatePickerButtons represents a collection of buttons. // Remarks: // CXTPDatePickerButtons inherits most of the behavior of the // standard MFC CArray. The DatePicker control can display and handle // any number of buttons. CXTPDatePickerButtons provides the basic // functionality to handle the collection.

// Create a CXTPDatePickerButtons object by calling the default // constructor without parameters. Furthermore, add buttons to // collection using standard CArray member functions. // See Also: // CArray // ---------------------------------------------------------------------- class _XTP_EXT_CLASS CXTPDatePickerButtons : public CArray { public: // ---------------------------------------------------------------------- // Summary: // Call this member function to retrieve the current count of visible // buttons. // Returns: // Integer value that contains the current number of visible buttons // that are in the collection. // ---------------------------------------------------------------------- int GetVisibleButtonCount() const; // ------------------------------------------------------------------ // Summary: // This member function finds buttons by their ID property. // Remarks: // Walks through the collection and looks for the button with the // provided ID. // Returns: // A pointer to the CXTPDatePickerButton structure. NULL if no // matching button ID is found. // Parameters: // nID : An int that contains the ID to search for. // ------------------------------------------------------------------ CXTPDatePickerButton* Find(int nID) const; // ---------------------------------------------------------------------- // Summary: // This member function determines which button is affected by the // mouse pointer. // Parameters: // point : Point to test. // Remarks: // Call this member function to test a mouse event occurring on one // of the buttons rectangle areas. If no buttons are found then NULL // is returned. // Returns: // The DatePicker button at the specified position, if any, otherwise // NULL. // ---------------------------------------------------------------------- CXTPDatePickerButton* HitTest(CPoint point) const; }; // ---------------------------------------------------------------------- // Summary: // Class CXTPDatePickerControl encapsulates the functionality of a // date and time picker control. // Remarks: // A CXTPDatePickerControl object implements a calendar-like user // interface. This provides the user with a very intuitive and // recognizable method of entering or selecting a date. The control // also provides the application with the means to obtain and set the // date information in the control using existing data types. By // default, the date picker control displays the current day and // month. However, the user is able to scroll to the previous and // next months and select a specific month and/or year. The user can // select a date or a range of dates. Also, the user can change the // display by: // // * Scrolling backward and forward, from month to month. // * Clicking the Today text to select the current day. // * Clicking the None text to remove the selection. // * Picking a month or a year from a pop-up menu. // // The date picker control is customize by applying a variety of // additional settings. Look at the control's class members list to // see available customization options.

// The date picker control can display more than one month, and it // can indicate special days (such as holidays) by modifying the // date's style. Furthermore, CXTPDatePickerControl contains methods // similar to the MFC CMonthCalCtrl. Use the methods in the same way // as the MFC CMonthCalCtrl. // See Also: // CMonthCalCtrl // ---------------------------------------------------------------------- class _XTP_EXT_CLASS CXTPDatePickerControl : public CWnd { //{{AFX_CODEJOCK_PRIVATE friend class CXTPDatePickerItemMonth; friend class CXTPDatePickerDaysCollection; friend class CXTPCalendarController; //}}AFX_CODEJOCK_PRIVATE public: //=========================================================================== // Summary: // Enumeration of operational mouse modes. // Remarks: // DatePickerControl handles several Mouse states. // This enumeration helps to clearly identify each of these states. //=========================================================================== enum DatePickerMouseMode { mouseNothing, // No mouse activity by the user. mouseScrollingLeft, // User pressed left scroll triangle and is holding the button. mouseScrollingRight, // User pressed right scroll triangle and is holding the button. mouseSelecting, // User pressed left mouse down on unselected day item and is now selecting a range of day items. mouseDeselecting, // User pressed left mouse down on selected day item and is now de-selecting a range of day items. mouseTrackingHeaderList // User is tracking pop-up month list window. }; // Construction public: // ------------------------------------------------------------------------------------------------------------- // Summary: // Default constructor is used to construct a CXTPDatePickerControl object. // Remarks: // Construct a CXTPDatePickerControl object in two steps. First, call // the constructor CXTPDatePickerControl and then call the Create // method, which initializes the window. // Example: // // // Declare a local CXTPDatePickerControl object. // CXTPDatePickerControl myDatePicker; // // // Declare a dynamic CXTPDatePickerControl object. // CXTPDatePickerControl* pMyDatePicker = new CXTPDatePickerControl(); // // // Create a window // if (!myDatePicker.Create(WS_CHILD | WS_TABSTOP | WS_VISIBLE, CRect(0, 0, 200, 200), this, ID_DATEPICKER_CONTROL)) // { // TRACE(_T("Failed to create the date picker window\\n")); // } // // See Also: // Create // ------------------------------------------------------------------------------------------------------------- CXTPDatePickerControl(); //----------------------------------------------------------------------- // Summary: // Destroys a CXTPDatePickerControl object, handles cleanup // and de-allocation. //----------------------------------------------------------------------- virtual ~CXTPDatePickerControl(); public: // ----------------------------------------------------------------------- // Summary: // This member function is used to create the Date Picker Control // Window. // Parameters: // dwStyle : Specifies the window style attributes. // rect : A RECT object that contains the coordinates of the // window, in the client coordinates of pParentWnd. // pParentWnd : A CWnd pointer to the parent window. // nID : A UINT that contains the ID of the child window. // pContext : A CCreateContext pointer that contains the create context // of the window. // Returns: // Nonzero if successful. Otherwise 0. // ----------------------------------------------------------------------- virtual BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL); // ---------------------------------------------------------------------- // Summary: // This member function implements pop-up window behavior for the // Date Picker control. // Parameters: // rect : Rectangle that contains the size and position of the // window, in client coordinates of pParentWnd. // pParentWnd : Pointer to the parent window. // Returns: // TRUE if successful, FALSE otherwise. // See Also: // IsModal // ---------------------------------------------------------------------- virtual BOOL GoModal(const RECT& rect, CWnd* pParentWnd = NULL); // ---------------------------------------------------------------------- // Summary: // Is the control runs in modal mode. // Returns: // TRUE when the control is used as a pop-up window, // FALSE otherwise. // See Also: // GoModal // ---------------------------------------------------------------------- BOOL IsModal() const; // ---------------------------------------------------------------------- // Summary: // This member function returns a pointer to the associated paint // manager. // Remarks: // Call this member function to obtain a pointer to the paint manager // \object. The paint manager object is used for drawing the date // picker window. // Returns: // Pointer to the paint manager object. // See Also: // SetTheme, SetPaintManager // ---------------------------------------------------------------------- CXTPDatePickerPaintManager* GetPaintManager() const; //----------------------------------------------------------------------- // Summary: // This member function redraws the control windows. // Remarks: // Call this member function to redraw all control windows // according to the stored parameter values. The window will be // updated immediately: CWnd::UpdateWindow() will be called. // See Also: // _RedrawControl //----------------------------------------------------------------------- virtual void RedrawControl(); // --------------------------------------------------------------------- // Summary: // This member function sets the new control drawing theme. // Parameters: // pPaintManager : Pointer of the new paint manager object or derived // class like CXTPDatePickerThemeOffice2007. // if NULL - the default paint manager object is set. // Remarks: // Call this member function to set the paint manager object that is // used for drawing a date picker window. // See Also: // GetPaintManager // --------------------------------------------------------------------- void SetTheme(CXTPDatePickerPaintManager* pPaintManager = NULL); // --------------------------------------------------------------------- // Summary: // This function is called to determine if AutoSize mode is set. // Remarks: // Call this member function to determine whether the control's auto // size mode is enabled. // Returns: // A boolean value that specifies is AutoSize is enabled.

// TRUE if AutoSize is enabled.

// Otherwise return FALSE. // See Also: // SetAutoSize // --------------------------------------------------------------------- BOOL IsAutoSize() const; //----------------------------------------------------------------------- // Summary: // This function sets the AutoSize mode. // Parameters: // bAuto - Boolean value. If bAuto is TRUE, then AutoSize // is enabled. If this parameter is FALSE, then // AutoSize is disabled. // Remarks: // Set AutoSize mode to TRUE if you want the control to automatically // calculate the number of month items according to control's size. // When this mode is enabled and there is enough space on control's // client area, the control adds a row or a column of month items // and centers them both horizontally and vertically. // See Also: IsAutoSize //----------------------------------------------------------------------- void SetAutoSize(BOOL bAuto = TRUE); // ------------------------------------------------------------------- // Summary: // This member function sets the user defined day metrics callback // function. // Parameters: // pFunc : Pointer to the callback function. // pParam : Pointer to any user defined parameter provided to the // callback function. // Remarks: // Call this member function to set up the user defined callback // function to manipulate the 'special day's attributes'. // See Also: // PFNITEMMETRICS, GetCallbackDayMetrics, GetDayMetrics // ------------------------------------------------------------------- virtual void SetCallbackDayMetrics(PFNITEMMETRICS pFunc, void* pParam = NULL); // --------------------------------------------------------------------- // Summary: // This member function returns the day metrics callback function. // Remarks: // Call this member function to obtain a pointer to the user defined // day metrics callback function. // Returns: // Pointer to the callback function. // See Also: // PFNITEMMETRICS, SetCallbackDayMetrics, GetDayMetrics // --------------------------------------------------------------------- PFNITEMMETRICS GetCallbackDayMetrics() const; // -------------------------------------------------------------------- // Summary: // This member function returns the day item drawing metrics. // Parameters: // dtDay : Reference to the DateTime value to check. // pDayMetics : Pointer to the day metrics structure. // Remarks: // Determines whether or not a given date is special. This function // calls a callback function to make this determination. // See Also: // GetCallbackDayMetrics, SetCallbackDayMetrics // -------------------------------------------------------------------- virtual void GetDayMetrics(COleDateTime& dtDay, XTP_DAYITEM_METRICS* pDayMetics); // ---------------------------------------------------------------------- // Summary: // This member function sets the day of the week that is displayed in // the leftmost column of the calendar. // Parameters: // nDay : An integer value representing which day is set as the first day // of the week. This value must be one of the day numbers. See // GetFirstDayOfWeek for a description of the day numbers. // See Also: // GetFirstDayOfWeek // ---------------------------------------------------------------------- void SetFirstDayOfWeek(int nDay); // ---------------------------------------------------------------------- // Summary: // This member function obtains the first day of the week that is // displayed in the leftmost column of the calendar. // Returns: // An integer value that represents the first day of the week. The // days of the week are represented as integers, as follows. // * 1 - Sunday // * 2 - Monday // * 3 - Tuesday // * 4 - Wednesday // * 5 - Thursday // * 6 - Friday // * 7 - Saturday // See Also: // SetFirstDayOfWeek // ---------------------------------------------------------------------- int GetFirstDayOfWeek() const; // ---------------------------------------------------------------------- // Summary: // This member function sets the required number of this year days // in the first week of the year. // Parameters: // nDays : An integer value representing the required number of // days of the new year in the first week of the year. // The value should be between 1 (default) and 7 (full week). // See Also: // GetFirstWeekOfYearDay // Example: // // // Setup German style of week numbers calculation. // pMyDatePicker->SetFirstWeekOfYearDays(4); // // ---------------------------------------------------------------------- void SetFirstWeekOfYearDays(int nDays); // ---------------------------------------------------------------------- // Summary: // This member function obtains the current required number of year days // in the first week of the year. // Returns: // An integer value that represents the required number of // days of the new year in the first week of this year. // The value should be between 1 (by default) and 7 (full week). // See Also: // SetFirstWeekOfYearDays // ---------------------------------------------------------------------- int GetFirstWeekOfYearDays() const; // ---------------------------------------------------------------------- // Summary: // This function sets visibility for the "Today" and "None" buttons. // Parameters: // bShowToday : Provide TRUE to show the "Today" button, or FALSE to // hide it. // bShowNone : Provide TRUE to show the "None" button, or FALSE to // hide it. // Remarks: // Call this member function to hide or show any of the control's // service buttons. // See Also: // IsTodayButtonVisible, IsNoneButtonVisible // ---------------------------------------------------------------------- virtual void SetButtonsVisible(BOOL bShowToday, BOOL bShowNone); // ------------------------------------------------------------------------ // Summary: // This member function is used to obtain the value of the visibility // flag for the "Today" button. // Remarks: // Call this member function to determine the visibility of the // "Today" service button. // Returns: // A boolean value that specifies if the "Today" button is visible.

// TRUE if the "Today" button is visible.

// Otherwise FALSE. // See Also: // IsNoneButtonVisible, SetButtonsVisible // ------------------------------------------------------------------------ virtual BOOL IsTodayButtonVisible(); // ----------------------------------------------------------------------- // Summary: // This function returns the boolean visibility flag of the "None" // button. // Remarks: // Call this member function to determine the visibility of the // "None" service button. // Returns: // A boolean value that specifies if the "None" button is visible.

// TRUE when the "None" button is visible.

// Otherwise FALSE. // See Also: // IsTodayButtonVisible, SetButtonsVisible // ----------------------------------------------------------------------- virtual BOOL IsNoneButtonVisible(); // ---------------------------------------------------------------------- // Summary: // Call this member function to enable or disable highlighting of the // "Today" cell. // Parameters: // bValue : Boolean value determines if the "Today" cell is // highlighted. // Remarks: // The "Today" cell is determined and changed using the SetToday and // GetToday member functions. When highlighting is enabled, the cell // is surrounded by a rectangle frame of the specific color. // See Also: // GetHighlightToday, SetToday, GetToday, // CXTPDatePickerPaintManager::GetHighlightTodayColor // ---------------------------------------------------------------------- void SetHighlightToday(BOOL bValue); // ------------------------------------------------------------------- // Summary: // Call this member function to determine whether the "Today" cell // highlighting is enabled or disabled. // Remarks: // This member function returns a boolean flag that specifies the // "Today" button highlighting mode. // Returns: // A BOOL that indicates if the "Today" cell is highlighted.

// TRUE if the "Today" cell is highlighted. Otherwise FALSE. // See Also: // GetHighlightToday, SetToday, GetToday, // CXTPDatePickerPaintManager::GetHighlightTodayColor // ------------------------------------------------------------------- BOOL GetHighlightToday() const; //----------------------------------------------------------------------- // Summary: // Call this member to set right-to-left mode. // Parameters: // bRightToLeft - TRUE to set right-to-left reading-order properties. //----------------------------------------------------------------------- virtual void SetLayoutRTL(BOOL bRightToLeft); // ------------------------------------------------------------------------ // Summary: // Call this member function to show or hide the week numbers. // Parameters: // bValue : Boolean value determines whether week numbers are visible. // Remarks: // Week numbers are shown for each week in each month at the very // left column of the month, separated by the vertical line from the // \other week days. This member function controls the visibility // mode of the week numbers. // See Also: // GetShowWeekNumbers, // CXTPDatePickerPaintManager::GetWeekNumbersBackColor, // CXTPDatePickerPaintManager::GetWeekNumbersTextColor, // CXTPDatePickerPaintManager::GetWeekNumbersTextFont // ------------------------------------------------------------------------ virtual void SetShowWeekNumbers(BOOL bValue); // ---------------------------------------------------------------------- // Summary: // Call this member function to determine if the week numbers are // visible. // Remarks: // The week numbers are shown for each week in each month as the very // left column of the month, separated by the vertical line from the // \other week days. This member function determines if the week // numbers are shown. // Returns: // Boolean value that determines if the week numbers are set to be // shown.

// TRUE - If the week numbers are visible.

// FALSE - If the week numbers are not visible. // See Also: // SetShowWeekNumbers, // CXTPDatePickerPaintManager::GetWeekNumbersBackColor, // CXTPDatePickerPaintManager::GetWeekNumbersTextColor, // CXTPDatePickerPaintManager::GetWeekNumbersTextFont // ---------------------------------------------------------------------- BOOL GetShowWeekNumbers() const; // ------------------------------------------------------------------- // Summary: // Call this member function to show or hide non-month days. // Parameters: // bShow : Boolean value determines if the non month days are // shown. // TRUE If the non\-month days are visible. // FALSE If the non\-month days are not visible. // Remarks: // Non-month days are shown in a special color or font. Non-month // days are shown just before and after regular days of a specific // month. // Note: // For a control showing more than 1 month, non-month days will be // shown before the first month, and after the last one. // See Also: // GetShowNonMonthDays, // CXTPDatePickerPaintManager::GetNonMonthDayBackColor, // CXTPDatePickerPaintManager::GetNonMonthDayTextColor, // CXTPDatePickerPaintManager::GetNonMonthDayTextFont // ------------------------------------------------------------------- void SetShowNonMonthDays(BOOL bShow); // --------------------------------------------------------------------- // Summary: // Call this member function to determine if the non-month days are // visible. // Remarks: // Non-month days are shown in a special color or font just before // and after regular days of a specific month. // Note: // For a control showing more than 1 month, non-month days are shown // before the first month, and after the last month. // Returns: // A boolean value that specifies if the "non-month days" are // visible.

// TRUE if non-month days are visible.

// FALSE otherwise. // See Also: // SetShowNonMonthDays, // CXTPDatePickerPaintManager::GetNonMonthDayBackColor, // CXTPDatePickerPaintManager::GetNonMonthDayTextColor, // CXTPDatePickerPaintManager::GetNonMonthDayTextFont // --------------------------------------------------------------------- BOOL GetShowNonMonthDays() const; // ---------------------------------------------------------------------- // Summary: // Call this member function to set borders style // around the control. // Parameters: // borderStyle - XTPDatePickerBorderStyle value determines whether border style // See Also: // GetBorderStyle, CXTPDatePickerPaintManager::DrawBorder, XTPDatePickerBorderStyle // ---------------------------------------------------------------------- void SetBorderStyle(XTPDatePickerBorderStyle borderStyle); // ---------------------------------------------------------------------- // Summary: // Call this member function to determine if the border is // visible. // Returns: // XTPDatePickerBorderStyle value that specifies the border style.

// See Also: // SetBorderStyle, CXTPDatePickerPaintManager::DrawBorder, XTPDatePickerBorderStyle // ---------------------------------------------------------------------- XTPDatePickerBorderStyle GetBorderStyle() const; // ---------------------------------------------------------------------- // Summary: // Call this member function to set the number of months in the // control's grid. // Parameters: // nRows : int that contains the new rows count value. // nCols : int that contains the new columns count value. // bRestrictMode : BOOL flag used for resizing // Remarks: // This member function is called in the AutoSize mode. It sets the // new number of columns and rows in the control's months grid. Also, // the function redraws each month within the existing control's // coordinates, reducing or enlarging the size of each month item as // necessary. // Note: // This function does nothing when AutoSize mode is enabled. // See Also: // GetRows, GetCols // ---------------------------------------------------------------------- virtual void SetGridSize(int nRows, int nCols, BOOL bRestrictMode = FALSE); //----------------------------------------------------------------------- // Summary: // Call this member function to obtain the number of rows in the // months grid. // Returns: // The number of rows in the control's months grid. // See Also: GetCols, SetGridSize //----------------------------------------------------------------------- int GetRows() const; // ---------------------------------------------------------------------- // Summary: // Call this member function to obtain the number of columns in the // months grid. // Returns: // An int that contains the number of columns in the control's months // grid. // See Also: // GetRows, SetGridSize // ---------------------------------------------------------------------- int GetCols() const; //----------------------------------------------------------------------- // Summary: // This member function finds the month item at the provided point. // Parameters: // ptMouse - The mouse coordinates to test. // pMCHitTest - A pointer to a MCHITTESTINFO structure // containing hit testing points for the // date picker control. // Remarks: // Call this function to retrieve a pointer to the month item // at the specified position. // // This HitTest(PMCHITTESTINFO pMCHitTest) function determines which date portion of the // picker control, if any, is at a specified position. It implements the behavior of the // CMonthCalCtrl::HitTest function. // Returns: // A pointer to the month item where the mouse was clicked. // Returns NULL if the mouse was clicked outside the months grid area. // // HitTest(PMCHITTESTINFO pMCHitTest) returns a DWORD value. Equal to the uHit member of the MCHITTESTINFO structure. // See Also: HitTest, CMonthCalCtrl::HitTest, MCHITTESTINFO //----------------------------------------------------------------------- virtual CXTPDatePickerItemMonth* HitTest(CPoint ptMouse) const; virtual DWORD HitTest(PMCHITTESTINFO pMCHitTest) const; // // -------------------------------------------------------------------------- // Summary: // This member function scrolls the control's months grid to the left // by the specified number of months. // Parameters: // nMonthCount : Integer value that specifies how many months to scroll. // The default value is 1. // Remarks: // Call this member function to scroll the months grid to the left by // nMonthCount positions. // See Also: // ScrollRight // -------------------------------------------------------------------------- virtual void ScrollLeft(int nMonthCount = 1); // -------------------------------------------------------------------------- // Summary: // This member function scrolls the control's months grid to the // right by the specified amount of months. // Parameters: // nMonthCount : Integer value that specifies how many months to scroll. // The default value is 1. // Remarks: // Call this member function to scroll the months grid to the right // by nMonthCount positions. // See Also: // ScrollLeft // -------------------------------------------------------------------------- virtual void ScrollRight(int nMonthCount = 1); // ----------------------------------------------------------------------------------- // Summary: // Call this member function to send notifications to the parent // window. // Parameters: // nMessage : An int that contains the identifier of the message. See remarks // section for a list of valid values. // pNMHDR : Pointer to the XTP_NC_DATEPICKER_BUTTON notification // structure. // Remarks: // The following values are valid for nMessage: // * XTP_NC_DATEPICKER_BUTTON_CLICK - Notifies that one of date // picker buttons was clicked. // * XTP_NC_DATEPICKER_SELECTION_CHANGED - Notifies that the date // picker selection has changed. // This function notifies the parent window that something happened. // For the example of how to catch these messages see below. // Example: // // // First, add the message handler to your message map. // ON_NOTIFY(XTP_NC_DATEPICKER_BUTTON_CLICK, 1000, OnButtonPressed) // // // Then implement the message handler like the example below // void YourDlg::OnButtonPressed(NMHDR* pNotifyStruct, LRESULT*) // { // XTP_NC_DATEPICKER_BUTTON* pNMButton = (XTP_NC_DATEPICKER_BUTTON*)pNotifyStruct; // // switch (pNMButton-\>nID) // { // case XTP_IDS_DATEPICKER_TODAY: // TRACE(_T("TODAY BUTTON PRESSEDn")); // break; // case XTP_IDS_DATEPICKER_NONE: // TRACE(_T("NONE BUTTON PRESSEDn")); // break; // } // } // // Returns: // An LRESULT that is used to indicate the success of the function. Non-zero // if the message is sent successfully, zero otherwise. // ----------------------------------------------------------------------------------- virtual LRESULT SendMessageToParent(int nMessage, NMHDR* pNMHDR = NULL); // --------------------------------------------------------------------- // Summary: // This function checks a specific date to determine if it is // contained in the control's selection. // Parameters: // dtDay : A date to check. // Remarks: // Call this member function to determine whether dtDay is selected. // Returns: // A boolean value that specifies if the date is contained in the // current selection.

// TRUE when the day is selected.

// Otherwise FALSE. // See Also: // Select, Deselect // --------------------------------------------------------------------- virtual BOOL IsSelected(const COleDateTime& dtDay) const; // --------------------------------------------------------------------- // Summary: // This function checks a specific date to determine if it is // focused. // Parameters: // dtDay : A date to check. // Remarks: // Focused item is used only for the keyboard navigation and selecting. // It is initialized by keyboard using first day of the current // selection or if selection is empty the first day of the first // visible month is used. // Focused item is cleared by mouse or by set selection externally. // Returns: // TRUE when the day is focused, FALSE otherwise. // See Also: // ClearFocus // --------------------------------------------------------------------- virtual BOOL IsFocused(const COleDateTime& dtDay) const; // --------------------------------------------------------------------- // Summary: // This function clear focused attribute if it is set. // Remarks: // Focused item is used only for the keyboard navigation and selecting. // It is initialized by keyboard using first day of the current // selection or if selection is empty the first day of the first // visible month is used. // Focused item is cleared by mouse or by set selection externally. // See Also: // IsFocused // --------------------------------------------------------------------- virtual void ClearFocus(); // ----------------------------------------------------------------- // Summary: // Call this member function to select a specific day. // Parameters: // dtDay : Date to be selected. // Remarks: // This function determines if one more item can be added to the // collection of selected days. If yes, then the selected day is // added to the list of selected items. // See Also: // Deselect, IsSelected // ----------------------------------------------------------------- virtual void Select(const COleDateTime& dtDay); // -------------------------------------------------------------------- // Summary: // Call this member function to de-select the specified day. // Parameters: // dtDay : Date to be deselected. // Remarks: // This member function removes the provided day from the control's // selected days collection. // See Also: // Select, IsSelected // -------------------------------------------------------------------- virtual void Deselect(const COleDateTime& dtDay); // --------------------------------------------------------------------- // Summary: // Call this member function to ensure that the COleDateTime item is // visible. // Parameters: // dtDate : The date to test. // Remarks: // If necessary, the function scrolls the month grid on the control // to make the day visible. // See Also: // EnsureVisibleSelection // --------------------------------------------------------------------- virtual void EnsureVisible(const COleDateTime& dtDate); // --------------------------------------------------------------------- // Summary: // Call this member function to ensure that the selection range is // visible. // Remarks: // If necessary, the function scrolls the month grid on the control // to make all selected days visible. // See Also: // EnsureVisible, EnsureVisibleFocus // --------------------------------------------------------------------- virtual void EnsureVisibleSelection(); // Summary: // Call this member function to ensure that the focused item is visible. // Remarks: // Focused item is used only for the keyboard navigation and selecting. // It is initialized by keyboard using first day of the current // selection or if selection is empty the first day of the first // visible month is used. // Focused item is cleared by mouse or by set selection externally. // See Also: // EnsureVisible, EnsureVisibleSelection // --------------------------------------------------------------------- virtual void EnsureVisibleFocus(); // ------------------------------------------------------------------------------ // Summary: // This member function sets the user-defined month name. // Parameters: // nMonth : An int that contains the Month number corresponding to the // month name. i.e. 1 = January, 2 = February, 3 = March, ... // Valid values are from 1 to 12. // strMonthName : A CString that contains the New month name. // Remarks: // Use this function to change the shown month name to any preferred // \or localized values. // See Also: // GetMonthName, SetDayOfWeekName, GetDayOfWeekName // ------------------------------------------------------------------------------ void SetMonthName(int nMonth, LPCTSTR strMonthName); // ---------------------------------------------------------------------- // Summary: // This member function returns the month name of the given integer // value. // Parameters: // nMonth : Month number. The valid range is 1 \<= nMonth \>= 12. // Remarks: // Call this member function to retrieve the name of the month which // was previously set by SetMonthName function. If month name was not // set by SetMonthName function, it will return the default value, // which is the default localized month name. // Returns: // If nMonth is a valid integer value, then the function returns the // name of the month. If nMonth is not valid, then the function // \returns an empty string. // See Also: // SetMonthName, SetDayOfWeekName, GetDayOfWeekName // ---------------------------------------------------------------------- CString GetMonthName(int nMonth) const; //----------------------------------------------------------------------- // Summary: // This member function sets the user-defined DayOfWeek name. // Parameters: // nDayOfWeek - DayOfWeek number to set new name for. // strDayOfWeekName - New DayOfWeek name. // Remarks: // Valid day-of-week range is between 1 and 7, where // 1 = Sunday, 2 = Monday, and so on. // See Also: GetDayOfWeekName, SetMonthName, GetMonthName //----------------------------------------------------------------------- void SetDayOfWeekName(int nDayOfWeek, LPCTSTR strDayOfWeekName); //----------------------------------------------------------------------- // Summary: // This member function returns the DayOfWeek name associated // with the integer value of nDayOfWeek. // Parameters: // nDayOfWeek - DayOfWeek number. // Remarks: // Valid day-of-week range is between 1 and 7, where // 1 = Sunday, 2 = Monday, and so on. // Returns: // If nDayOfWeek is a valid integer value, then the function // returns the name of the week associated with the integer value // of nDayOfWeek. If nDayOfWeek is not a valid integer value, then // the function returns an empty string. // See Also: SetDayOfWeekName, SetMonthName, GetMonthName //----------------------------------------------------------------------- CString GetDayOfWeekName(int nDayOfWeek) const; // ---------------------------------------------------------------------- // Summary: // This member function retrieves date information representing the // upper and lower limits of the date range currently selected by the // user. // Parameters: // refMinRange : A reference to a COleDateTime object containing the // minimum date allowed. // refMaxRange : A reference to a COleDateTime object containing the // maximum date allowed. // Remarks: // This member function implements the behavior of the // CMonthCalCtrl::GetSelRange function. // Returns: // Nonzero if successful. Otherwise 0. // See Also: // SetSelRange, CMonthCalCtrl::GetSelRange // ---------------------------------------------------------------------- virtual BOOL GetSelRange(COleDateTime& refMinRange, COleDateTime& refMaxRange) const; //----------------------------------------------------------------------- // Summary: // This member function sets the selection for a date picker // control to a given date range. // Parameters: // refMinRange - A reference to a COleDateTime object containing the // date at the lowest end of the range. // refMaxRange - A reference to a COleDateTime object containing the // date at the highest end of the range. // Remarks: // This member function implements the behavior of the // CMonthCalCtrl::SetSelRange function. // // Please note that this method doesn't refresh the control, and in // order to update control's picture you'll have to call RedrawControl // method after changing a selection. // Returns: // Nonzero if successful. Otherwise 0. // See Also: GetSelRange, CMonthCalCtrl::SetSelRange //----------------------------------------------------------------------- virtual BOOL SetSelRange(const COleDateTime& refMinRange, const COleDateTime& refMaxRange); // -------------------------------------------------------------------------- // Summary: // This member function retrieves the minimum size required to show a // full month in the date picker control or a // specified number of full month items in a date picker control. // Parameters: // pRect : A pointer to a RECT structure that receives the bounding // rectangle information. This parameter must be a valid address // and cannot be NULL. // nRows : A number of months in a row inside the calculated rectangle. // nCols : A number of months in a column inside the calculated rectangle. // Remarks: // This member function implements the behavior of the // CMonthCalCtrl::GetMinReqRect function. // // GetMinReqRect(RECT* pRect, int nRows, int nCols) retrieves the minimum // size required to show a specified number of full month items in // a date picker control. The functionality implemented by this function is similar to the // CMonthCalCtrl::GetMinReqRect, but instead of calculating a // rectangle size for 1 month only, it can also calculate a rectangle // size for any specified number of month items. // Returns: // If successful, this member function returns nonzero and pRect // receives the applicable bounding rectangle information. If // unsuccessful, the member function returns 0. // See Also: // CMonthCalCtrl::GetMinReqRect // -------------------------------------------------------------------------- virtual BOOL GetMinReqRect(RECT* pRect) const; virtual BOOL GetMinReqRect(RECT* pRect, int nRows, int nCols) const; // // ---------------------------------------------------------------------------- // Summary: // This member function adjusts the date picker control to the // minimum size required to display one month. // Parameters: // bRepaint : A BOOL that specifies whether the control is to be // repainted. By default, TRUE. If FALSE, no repainting occurs. // Remarks: // Calling SizeMinReq successfully displays the entire date picker // control for one month's calendar. // Returns: // Nonzero if the date picker control is sized to its minimum. // Otherwise 0. // See Also: // GetMinReqRect, CMonthCalCtrl::SizeMinReq // ---------------------------------------------------------------------------- virtual BOOL SizeMinReq(BOOL bRepaint = TRUE); //----------------------------------------------------------------------- // Summary: // This member function retrieves the scroll rate for the date // picker control. // Remarks: // This member function implements the behavior of the // CMonthCalCtrl::GetMonthDelta function. // The scroll rate is the number of months that the control // moves its display when the user clicks a scroll button once. // Returns: // The scroll rate for the date picker control. // See Also: SetMonthDelta, CMonthCalCtrl::GetMonthDelta //----------------------------------------------------------------------- int GetMonthDelta() const; // ---------------------------------------------------------------------------- // Summary: // This member function sets the scroll rate for the date picker // control. // Parameters: // iDelta : The number of months set as the control's scroll rate. If this // value is zero, the month delta is reset to the default, which // is the number of months displayed in the control. // Remarks: // This member function implements the behavior of the // CMonthCalCtrl::SetMonthDelta function. // See Also: // GetMonthDelta, CMonthCalCtrl::SetMonthDelta // ---------------------------------------------------------------------------- void SetMonthDelta(int iDelta); // ---------------------------------------------------------------------- // Summary: // This member function retrieves the system time as indicated by the // currently-selected date. // Parameters: // refDateTime : A reference to a COleDateTime object. Receives the // currently selected time. // Remarks: // This member function fails if more than 1 date is selected. // Returns: // A BOOL that indicates the success of the function.

// TRUE if the function is successfully able to retrieve the system // time.

// FALSE if more than one date is selected. // See Also: // SetCurSel, CMonthCalCtrl::GetCurSel // ---------------------------------------------------------------------- virtual BOOL GetCurSel(COleDateTime& refDateTime) const; //----------------------------------------------------------------------- // Summary: // This member function sets the currently selected date for the // date picker control. // Parameters: // refDateTime - A reference to a COleDateTime object, which // contains a date to select. // Remarks: // This member function clears the selection of a date picker // control and selects a specified date. // Returns: // Nonzero if successful. Otherwise 0. // See Also: GetCurSel, CMonthCalCtrl::GetCurSel //----------------------------------------------------------------------- virtual BOOL SetCurSel(const COleDateTime& refDateTime); // ---------------------------------------------------------------------- // Summary: // This member function retrieves the current maximum number of days // that can be selected in a date picker control. // Remarks: // This member function implements the behavior of the // CMonthCalCtrl::GetMaxSelCount function. // Returns: // An integer value that represents the total number of days that can // be selected for the control. XTP_SELECTION_INFINITE if selection // is not bounded. // See Also: // SetMaxSelCount, CMonthCalCtrl::GetMaxSelCount, AllowNoncontinuousSelection // ---------------------------------------------------------------------- int GetMaxSelCount() const; //----------------------------------------------------------------------- // Summary: // This member function sets the maximum number of days that can be // selected in a date picker control. // Parameters: // nMax : The value that is set to represent the maximum number of // selectable days. XTP_SELECTION_INFINITE if selection is not // bounded. // Remarks: // This member function implements the behavior of the // CMonthCalCtrl::SetMaxSelCount function. // See also: // GetMaxSelCount, AllowNoncontinuousSelection, CMonthCalCtrl::SetMaxSelCount //----------------------------------------------------------------------- void SetMaxSelCount(int nMax = XTP_SELECTION_INFINITE); //----------------------------------------------------------------------- // Summary: // This member function sets the flag which shows whether control // allows non-continuous days selection or not. // Parameters: // bAllow - TRUE to allow non-continuous days selection (default value), // FALSE to disallow. // Remarks: // Allowing continuous days selection means that user will be able // to select only a single days interval between 2 dates, where all // dates will be selected inside. // Non-continuous days selection means that user will be able to // select any specific dates totally up to MaxSelCount count. // See Also: // IsAllowNoncontinuousSelection, SetMaxSelCount, GetMaxSelCount //----------------------------------------------------------------------- void AllowNoncontinuousSelection(BOOL bAllow = TRUE); //----------------------------------------------------------------------- // Summary: // This member function returns the flag which shows whether control // allows non-continuous days selection or not. // Remarks: // Allowing continuous days selection means that user will be able // to select only a single days interval between 2 dates, where all // dates will be selected inside. // Non-continuous days selection means that user will be able to // select any specific dates totally up to MaxSelCount count. // Returns: // TRUE when non-continuous days selection is allowed, // FALSE otherwise. // See Also: // AllowNoncontinuousSelection, SetMaxSelCount, GetMaxSelCount //----------------------------------------------------------------------- BOOL IsAllowNoncontinuousSelection() const; //----------------------------------------------------------------------- // Summary: // Determines if the multiple selection mode is enabled. // Returns: // TRUE if the multiple selection mode is enabled. // See Also: SetMultiSelectionMode //----------------------------------------------------------------------- BOOL IsMultiSelectionMode() const; //----------------------------------------------------------------------- // Summary: // Enables/disables the multiple selection mode for the control. // Parameters: // bMultiSelectionMode - TRUE for enabling, FALSE for disabling. // Remarks: // Sets the flag that determines whether the report is in multiple selection mode. // See Also: IsMultiSelectionMode //----------------------------------------------------------------------- void SetMultiSelectionMode(BOOL bMultiSelectionMode); //----------------------------------------------------------------------- // Summary: // This member function retrieves the date information for the date // specified as "Today" for the date picker control. // Parameters: // refDateTime : A reference to a COleDateTime object indicating the // current day. // Remarks: // This member function implements the behavior of the // CMonthCalCtrl::GetToday function. // Returns: // Nonzero if successful. Otherwise 0. // See Also: // GetHighlightToday, SetHighlightToday, SetToday, // CMonthCalCtrl::GetToday //----------------------------------------------------------------------- virtual BOOL GetToday(COleDateTime& refDateTime) const; //----------------------------------------------------------------------- // Summary: // This member function sets the calendar control to the current day. // Parameters: // refDateTime - A reference to a COleDateTime object that // contains the current date. // Remarks: // This member function implements the behavior of the // CMonthCalCtrl::SetToday function. // See Also: GetHighlightToday, SetHighlightToday, SetToday, GetToday, // CMonthCalCtrl::SetToday //----------------------------------------------------------------------- virtual void SetToday(const COleDateTime& refDateTime); // -------------------------------------------------------------------------- // Summary: // This member function retrieves the current minimum and maximum // dates set in a date picker control. // Parameters: // pMinRange : A pointer to a COleDateTime object containing the date at // the lowest end of the range. // pMaxRange : A pointer to a COleDateTime object containing the date at // the highest end of the range. // Remarks: // This member function implements the behavior of the // CMonthCalCtrl::GetRange function. // Returns: // A DWORD that can be zero (no limits are set) or a combination of // the following values that specify limit information. // // * GDTR_MAX - A maximum limit is set for the control. // pMaxRange is valid and contains the applicable date information. // * GDTR_MIN - A minimum limit is set for the control. // pMinRange is valid and contains the applicable date information. // Example: // See CMonthCalCtrl::GetRange documentation for the example. // See Also: // SetRange, CMonthCalCtrl::GetRange // -------------------------------------------------------------------------- virtual DWORD GetRange(COleDateTime* pMinRange, COleDateTime* pMaxRange) const; //----------------------------------------------------------------------- // Summary: // This member function sets the minimum and maximum allowable // dates for a date picker control. // Parameters: // pMinRange - A pointer to a COleDateTime object containing the // date at the lowest end of the range. // pMaxRange - A pointer to a COleDateTime object containing the // date at the highest end of the range. // Remarks: // This member function implements the behavior of the // CMonthCalCtrl::GetRange function. // Returns: // Nonzero if successful. Otherwise 0. // See Also: GetRange, CMonthCalCtrl::SetRange //----------------------------------------------------------------------- virtual BOOL SetRange(const COleDateTime* pMinRange, const COleDateTime* pMaxRange); //----------------------------------------------------------------------- // Summary: // This member function retrieves date information representing // the high and low limits of a date picker control's display. // Parameters: // refMinRange - A reference to a COleDateTime object containing // the minimum date allowed. // refMaxRange - A reference to a COleDateTime object containing // the maximum date allowed. // dwFlags - Value specifying the scope of the range limits // to be retrieved. This value must be one of the // following // // * GMR_DAYSTATE - Include preceding and // trailing months of visible range that are only // partially displayed. // * GMR_VISIBLE - Include only those months // that are entirely displayed. // // Remarks: // This member function implements the behavior of the // CMonthCalCtrl::GetMonthRange function. // Returns: // An integer that represents the range, in months, spanned by the // two limits indicated by refMinRange and refMaxRange. // See Also: CMonthCalCtrl::GetMonthRange //----------------------------------------------------------------------- virtual int GetMonthRange(COleDateTime& refMinRange, COleDateTime& refMaxRange, DWORD dwFlags) const; //----------------------------------------------------------------------- // Summary: // This member function retrieves first and last displayed days dates. // Parameters: // refFirstVisibleDay - A first displayed day date. // refLastVisibleDay - A last displayed day date. // Returns: // TRUE if succeeded, otherwise FALSE; // See Also: GetMonthRange //----------------------------------------------------------------------- virtual BOOL GetVisibleRange(COleDateTime& refFirstVisibleDay, COleDateTime& refLastVisibleDay) const; //----------------------------------------------------------------------- // Summary: // This member function allow scrolling between FirstDay and LastDay and // try to show initial visible range between FirstVisibleDay and LastVisibleDay // Parameters: // FirstVisibleDay - A first displayed day date. // LastVisibleDay - A last displayed day date. // FirstDay - A first allowed day date. // LastDay - A last allowed day date. //----------------------------------------------------------------------- virtual void SetDesiredVisibleAndFullRange(COleDateTime FirstVisibleDay, COleDateTime LastVisibleDay, COleDateTime FirstDay, COleDateTime LastDay); //----------------------------------------------------------------------- // Summary: // This member function returns the number of CXTPDatePickerButton // items shown on the control. // Remarks: // Call this member function to determine the number of buttons // currently used on the control. // Returns: // A number of CXTPDatePickerButton items shown on the control. // See Also: GetButton, AddButton //----------------------------------------------------------------------- int GetButtonCount() const; // ---------------------------------------------------------------------- // Summary: // This member function returns a pointer to the CXTPDatePickerButton // \object using its numeric index. // Parameters: // nIndex : The index of the CXTPDatePickerButton to retrieve. // Remarks: // Call this member function to retrieve a pointer to the button // \object using its numeric index. // Returns: // A pointer to the CXTPDatePickerButton object. // See Also: // GetButtonCount, AddButton // ---------------------------------------------------------------------- CXTPDatePickerButton* GetButton(int nIndex) const; // --------------------------------------------------------------------- // Summary: // This member function adds one more buttons to the control. // Parameters: // nID : ID of the string resource item. This is the caption of the // new button. // Remarks: // Call this member function to add one more CXTPDatePickerButton // \objects to the control's collection. // See Also: // GetButton, GetButtonCount // --------------------------------------------------------------------- virtual void AddButton(UINT nID); // ------------------------------------------------------------------------- // Summary: // This member function obtains a notification connection object // pointer. // Remarks: // Used to subscribe (Advice) for notifications events from the control. // Returns: // A CXTPNotifyConnection pointer to the connection object. // See Also: // CXTPNotifyConnectionoverview, IXTPNotificationSink overview // ------------------------------------------------------------------------- CXTPNotifyConnection* GetConnection() const; // ----------------------------------------------------------------------- // Summary: // Returns a collection of the days, selected in the date picker. // Remarks: // Call this member function to return a CXTPDatePickerDaysCollection // collection of the days, selected in the date picker control. // Returns: // Pointer to the collection of the selected days. // If you want to use pointer to this collection lately in your code, // you should increment and decrement references to the object manually. // See Also: // m_pSelectedDays // ----------------------------------------------------------------------- CXTPDatePickerDaysCollection* GetSelectedDays() const; // ---------------------------------------------------------------------- // Summary: // This member function adjusts the layout of all sub-items depending // on the current window client size. // Remarks: // AdjustLayout depends on the AutoSize flag (changing control size // or item fonts correspondingly). // See Also: // AdjustLayout(CRect rcClient), IsAutoSize // ---------------------------------------------------------------------- virtual void AdjustLayout(); //----------------------------------------------------------------------- // Summary: // This member function is used to obtain current paint theme. // Returns: // A paint theme ID from enum XTPCalendarTheme. //----------------------------------------------------------------------- XTPCalendarTheme GetPaintTheme() const; //----------------------------------------------------------------------- // Summary: // This member function is used to set current paint theme. // Parameters: // ePaintTheme - A paint theme ID from enum XTPCalendarTheme. //----------------------------------------------------------------------- void SetPaintTheme(XTPCalendarTheme ePaintTheme); // ----------------------------------------------------------------- // Summary: // This member function registers the window class if it has not // already been registered. // Parameters: // hInstance - Instance of resource where control is located // Returns: // A boolean value that specifies if the window is successfully // registered.

// TRUE if the window class is successfully registered.

// Otherwise FALSE. // ----------------------------------------------------------------- BOOL RegisterWindowClass(HINSTANCE hInstance = NULL); protected: //----------------------------------------------------------------------- // Summary: // This member function sends a notification to all control's // event subscribers. // Parameters: // EventCode - The specific code of the event. // wParam - First custom parameter. Depends on the event type. // See specific event description for details. // lParam - Second custom parameter. Depends on the event type. // See specific event description for details. // Remarks: // This member function is called internally from inside the // control when a notification is sent to all notification // listeners. // See Also: XTP_NOTIFICATIONCODE, GetConnection //----------------------------------------------------------------------- virtual void SendNotification(XTP_NOTIFY_CODE EventCode, WPARAM wParam = 0, LPARAM lParam = 0); protected: // ---------------------------------------------------------------------- // Summary: // This member function initializes the month and day names depending // \on localization. // Remarks: // This is an internal initialization function that reads the system // user locale defaults and fills the month and day of the week // arrays with the locale defaults. // See Also: // GetMonthName, SetMonthName, GetDayOfWeekName, SetDayOfWeekName // ---------------------------------------------------------------------- virtual void InitNames(); // ---------------------------------------------------------------------- // Summary: // This member function performs control population, creating the // view from the data. // Remarks: // Creates a new month collection for the control, populating it with // the new objects created according to the stored properties and // settings. Call this member function if the number of months to // show needs adjusting. // See Also: // ClearMonths // ---------------------------------------------------------------------- virtual void Populate(); //----------------------------------------------------------------------- // Summary: // This member function redraws the control windows. // Parameters: // bUpdateNow - if TRUE the CWnd::UpdateWindow() will be called, // otherwise only CWnd::Invalidate() will be called. // Remarks: // Call this member function to redraw all control windows // according to the stored parameter values. // See Also: // RedrawControl //----------------------------------------------------------------------- virtual void _RedrawControl(BOOL bUpdateNow); // -------------------------------------------------------------- // Summary: // This member function is used to cleanup the month's array. // See Also: // Populate // -------------------------------------------------------------- virtual void ClearMonths(); //----------------------------------------------------------------------- // Summary: // This member function is used to perform all drawing logic. // Parameters: // pDC - Pointer to a valid device context. // See Also: DrawButtons //----------------------------------------------------------------------- virtual void OnDraw(CDC* pDC); //----------------------------------------------------------------------- // Summary: // Call this member function to draw the calendar's buttons. // Parameters: // pDC - Pointer to a valid device context. // See Also: OnDraw //----------------------------------------------------------------------- virtual void DrawButtons(CDC* pDC); //MODIFIED FUNCTION virtual void AdjustLayout(CRect rcClient); // // ----------------------------------------------------------- // Summary: // This member function calculates the size of the button. // Returns: // CSize object with button size. // See Also: // SetButtonRect, CalcButtonBandRect // ----------------------------------------------------------- virtual CSize CalcButtonSize() const; // -------------------------------------------------------------- // Summary: // Call this member function to calculate and set the buttons // bounding rectangle. // See Also: // CalcButtonSize, CalcButtonBandRect // -------------------------------------------------------------- virtual void SetButtonRect(); // ------------------------------------------------------------------- // Summary: // Call this member function to calculate and set the buttons band // rectangle. // Remarks: // The band rectangle is a box that is drawn around the button to // highlight the button. // See Also: // SetButtonRect, CalcButtonSize // ------------------------------------------------------------------- virtual void CalcButtonBandRect(); // ------------------------------------------------------------------ // Summary: // This member function is used to implement the button behavior. // Parameters: // point : Current mouse position. // Remarks: // This member function is called from the following member // functions: OnLButtonDown, OnLButtonDblClk, OnLButtonUp, // OnMouseLeave, and OnMouseMove. // ------------------------------------------------------------------ virtual void ProcessButtons(CPoint point); //----------------------------------------------------------------------- // Summary: // This member function shows a CXTPDatePickerList control at the // coordinates specified by rcHeader. // Parameters: // rcHeader - The coordinates of the list window. // dtMonth - The month date to start from. // Remarks: // Call this member function to force showing of the months // pop-up list control. // See Also: CXTPDatePickerList overview //----------------------------------------------------------------------- virtual void ShowListHeader(CRect rcHeader, COleDateTime dtMonth); // ------------------------------------------------------------------------- // Summary: // This function shifts the specified date for the specified number // \of months. // Parameters: // refDate : Reference to the COleDateTime object to shift the date // on. // nMonthCount : Number of months used for shifting. Can be both positive // and negative numbers. // Remarks: // This is a utility function that is used to shift the specified // date for a specific number of months. // Returns: // A BOOL value that specifies if the function is successful.

// Return zero if the value of this COleDateTime object is set // successfully.

// Otherwise return 1. // See Also: // COleDateTime overview // ------------------------------------------------------------------------- static BOOL ShiftDate(COleDateTime &refDate, int nMonthCount); //----------------------------------------------------------------------- // Summary: // This member function sets new dimensions for the month grid. // Parameters: // rcGrid - New rectangle coordinates of the Grid area. // Remarks: // Calculates and sets Grid dimensions (rows and columns count) for // the grid size. // See Also: AdjustLayout //----------------------------------------------------------------------- virtual CSize SetGridDimentions(CRect rcGrid); // ------------------------------------------------------------------ // Summary: // This member function creates the internal month array. // Remarks: // Fills the internal month array with the new DatPickerItemMonth // \objects, using the values of the initialized data members. // See Also: // Populate // ------------------------------------------------------------------ virtual void CreateMonthArray(); // --------------------------------------------------------------------- // Summary: // This member function is called by the framework to allow other // necessary sub-classing to occur before the window is sub-classed. // Remarks: // This member function is used to call some internal initialization // functions like AdjustLayout() immediately after instantiating the // DatePickerControl object. // See Also: // Create, CXTPDatePickerControl::CXTPDatePickerControl // --------------------------------------------------------------------- virtual void PreSubclassWindow(); // ---------------------------------------------------------------------- // Summary: // This member function is used to process the control's button // clicks. // Parameters: // nID : Date picker button ID (could be XTP_IDS_DATEPICKER_TODAY // or XTP_IDS_DATEPICKER_NONE) // Remarks: // This member function performs internal button click processing and // sends a XTP_NC_DATEPICKER_BUTTON_CLICK notification to the parent // window. // See Also: // SendMessageToParent // ---------------------------------------------------------------------- virtual void OnButtonClick(UINT nID); protected: DatePickerMouseMode m_mouseMode; // This member variable is used to specify the current Mouse operating mode. int m_nLockUpdateCount; // This member variable is used as a counter that is used to count // the update locks. An image will be redrawn only when the lock // counter is equal to zero. int m_nTimerID; // This member variable is used to specify the control timer ID. CRect m_rcControl; // This data member is used to store the control drawing coordinates. CXTPDatePickerPaintManager* m_pPaintManager; // This member variable is a pointer to the paint manager. BOOL m_bAutoSize; // This member variable is used as the AutoSize flag. BOOL m_bIsModal; // This member variable is used to specify if the control is used as // a pop-up window. TRUE when the control is used as a pop-up. FALSE // \otherwise. BOOL m_bChanged; // This member variable is used to determine if the control requires // redrawing. CBitmap m_bmpCache; // This member variable is a cached window bitmap. int m_nRows; // This member variable is used to specify the number of rows in the // column month's grid. int m_nColumns; // This member variable is used to specify the number of columns in // the column month's grid. //MODIFICATION - DESIRED MATRIX int m_nDesiredRows; //The desired rows. int m_nDesiredColumns; //The desired columns. CXTPNotifyConnection* m_pConnection; // This member variable is a connection object that is used to send // notifications. COleDateTime m_dtMinRange; // This member variable specifies the minimum allowable date for a // date picker control. COleDateTime m_dtMaxRange; // This member variable specifies the maximum allowable date for a // date picker control. COleDateTime m_dtToday; // This member variable is used to specify the "Today" date for a // date picker control. COleDateTime m_dtFirstMonth; // This member variable is used to specify the first month in the // grid. int m_nFirstDayOfWeek; // This member variable is used to specify the first day of the week // to display (1-Sunday, 2-Monday ... etc). int m_nFirstWeekOfYearDays; // This member variable is used to specify the number of days of // the new year in the first week of this year. PFNITEMMETRICS m_pfnCallback; // This member variable is a pointer to the user's IsSpecialDay // function. void* m_pCallbackParam; // This member variable is a pointer to the user's additional // parameter for the callback function. CArray m_arrMonths; // This member variable is an internal storage for the month items. CXTPDatePickerDaysCollection* m_pSelectedDays; // This member variable is a collection of selected days. BOOL m_bHighlightToday; // This member variable is used as a flag to determine if the "Today" // date is highlighted. BOOL m_bShowWeekNumbers; // This member variable is a flag that determines if the "week // numbers" are displayed. BOOL m_bShowNonMonthDays; // This member variable is a flag that determines if the "non month // days" are displayed. XTPDatePickerBorderStyle m_borderStyle; // This member variable is a flag that determines if the control // displays a 3D border. int m_nMaxSelectionDays; // This member variable is used to specify the maximum number of // selected days. int m_nMonthDelta; // This member variable is used to specify the number of months set // as the control's scroll rate. If this value is zero, then the // month delta is reset to the default rate, which is the number of // months displayed in the control. COleDateTime m_dtFirstClicked; // This member variable is used to specify the day that was clicked // before starting the mouse selection. COleDateTime m_dtLastClicked; // This member variable is used to specify the day that was clicked // last in the mouse selection. BOOL m_bSelectWeek; // TRUE when user is started selecting the whole week. COleDateTime m_dtFocused; // This member variable is used to specify the focused day. Used only for keyboard navigation and selecting. COleDateTime m_dtFSelBase; // This member variable is used to specify start day of the continuous selection. Used only for keyboard navigation and selecting. CXTPDatePickerList* m_pListControl; // This member variable is used to specify the "header month list" // pop-up control. CString* m_arMonthNames; // This member variable contains the localized month names values. CString* m_arDayOfWeekNames;// This member variable contains the day abbreviation for drawing in // the month header. CRect m_rcGrid; // Months grid rect. CXTPDatePickerButtons m_arrButtons; // This member variable is an array of control buttons. BOOL m_bAllowNoncontinuousSelection; // TRUE to allow Noncontinuous selection BOOL m_bMultiSelectionMode; // TRUE if multiselection mode enabled (i.e. VK_CTRL is always on). CXTPDatePickerButton* m_pButtonCaptured; // Pointer to a date picker button BOOL m_bRightToLeft; // TRUE to display calendar components in Right-To-Left (RTL) format //{{AFX_CODEJOCK_PRIVATE LCID m_lcidActiveLocale; enum XTPEnumMovmentStep { stepDay = 1, stepWeek = 2, stepMonth = 3, stepYear = 4, stepWeekBE = 10, stepMonthBE = 11 }; enum XTPEnumMovmentDirection { dirNext = 1, dirPrev = -1 }; class CXTPSelectionHelper { public: CXTPSelectionHelper(CXTPDatePickerControl* pControl); void RemoveFocus(); void MoveFocus(int eStep, int eDirection, BOOL bContinuouse, BOOL bSaveSel); void SelUnselFocus(); void _TmpSaveFocus(); void _TmpRestoreFocus(); protected: void InitFocusIfNeed(); void _MoveFocus(int eStep, int eDirection); CXTPDatePickerControl* m_pDP; COleDateTime m_dtFocusedTmp; COleDateTime m_dtFSelBaseTmp; }; friend class CXTPSelectionHelper; //}}AFX_CODEJOCK_PRIVATE protected: //{{AFX_CODEJOCK_PRIVATE // AFX_MSG(CXTPDatePickerControl) afx_msg BOOL OnEraseBkgnd(CDC* pDC); afx_msg int OnCreate(LPCREATESTRUCT lp); afx_msg void OnPaint(); afx_msg LRESULT OnPrintClient(WPARAM wParam, LPARAM /*lParam*/); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnLButtonUp(UINT nFlags, CPoint point); afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point); afx_msg void OnCaptureChanged(CWnd* pWnd); afx_msg void OnCancelMode(); afx_msg void OnMouseMove(UINT nFlags, CPoint point); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnTimeChange(); afx_msg void OnTimer(UINT_PTR nIDEvent); afx_msg void OnSysColorChange(); afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnMouseLeave(); afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); afx_msg void OnSetFocus(CWnd* pOldWnd); afx_msg void OnKillFocus (CWnd* pNewWnd); afx_msg UINT OnGetDlgCode(); afx_msg void OnDestroy(); afx_msg void OnEnable(BOOL bEnable); //}}AFX_MSG virtual void OnFinalRelease(); DECLARE_MESSAGE_MAP() //}}AFX_CODEJOCK_PRIVATE private: //{{AFX_CODEJOCK_PRIVATE virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL); virtual void _EndModalIfNeed(); //}}AFX_CODEJOCK_PRIVATE CXTPNotifySink* m_pSink; void OnEventResourceImagesChanged(XTP_NOTIFY_CODE Event, WPARAM wParam, LPARAM lParam); public: BOOL m_bDeleteOnFinalRelease; // Delete self OnFinalRelease() call. BOOL m_bYearsTriangle; //use extra button for 1 year jump BOOL m_bRestrictMode; //flag to keep desired month's numbers without scaling CString m_strYearMonthFormat; //The year month format. }; ///////////////////////////////////////////////////////////////////////////// AFX_INLINE CXTPDatePickerPaintManager* CXTPDatePickerControl::GetPaintManager() const { return m_pPaintManager; } AFX_INLINE BOOL CXTPDatePickerControl::IsModal() const { return m_bIsModal; } AFX_INLINE BOOL CXTPDatePickerControl::IsAutoSize() const { return m_bAutoSize; } AFX_INLINE void CXTPDatePickerControl::SetCallbackDayMetrics(PFNITEMMETRICS pFunc, void* pParam) { m_pfnCallback = pFunc; m_pCallbackParam = pParam; } AFX_INLINE PFNITEMMETRICS CXTPDatePickerControl::GetCallbackDayMetrics() const { return m_pfnCallback; } AFX_INLINE void CXTPDatePickerControl::SetFirstDayOfWeek(int nDay) { ASSERT(nDay >= 1 && nDay <= 7); if (nDay >= 1 && nDay <= 7 && nDay != m_nFirstDayOfWeek) { m_nFirstDayOfWeek = nDay; Populate(); } } AFX_INLINE int CXTPDatePickerControl::GetFirstDayOfWeek() const { return m_nFirstDayOfWeek; } AFX_INLINE void CXTPDatePickerControl::SetFirstWeekOfYearDays(int nDays) { ASSERT(nDays >= 1 && nDays <= 7); if (nDays >= 1 && nDays <= 7 && nDays != m_nFirstWeekOfYearDays) { m_nFirstWeekOfYearDays = nDays; RedrawControl(); } } AFX_INLINE int CXTPDatePickerControl::GetFirstWeekOfYearDays() const { return m_nFirstWeekOfYearDays; } AFX_INLINE BOOL CXTPDatePickerControl::GetHighlightToday() const { return m_bHighlightToday; } AFX_INLINE BOOL CXTPDatePickerControl::GetShowWeekNumbers() const { return m_bShowWeekNumbers; } AFX_INLINE int CXTPDatePickerControl::GetRows() const { return m_nRows; } AFX_INLINE int CXTPDatePickerControl::GetCols() const { return m_nColumns; } AFX_INLINE void CXTPDatePickerControl::SetMonthName(int nMonth, LPCTSTR strMonthName) { ASSERT(nMonth >= 1 && nMonth <= 12); m_arMonthNames[nMonth - 1] = strMonthName; } AFX_INLINE CString CXTPDatePickerControl::GetMonthName(int nMonth) const { return nMonth >= 1 && nMonth <= 12 ? m_arMonthNames[nMonth - 1] : _T(""); } AFX_INLINE void CXTPDatePickerControl::SetDayOfWeekName(int nDayOfWeek, LPCTSTR strDayOfWeekName) { ASSERT(nDayOfWeek >= 1 && nDayOfWeek <= 7); m_arDayOfWeekNames[nDayOfWeek - 1] = strDayOfWeekName; } AFX_INLINE CString CXTPDatePickerControl::GetDayOfWeekName(int nDayOfWeek) const { return nDayOfWeek >= 1 && nDayOfWeek <= 7 ? m_arDayOfWeekNames[nDayOfWeek - 1] : _T(""); } AFX_INLINE BOOL CXTPDatePickerControl::GetShowNonMonthDays() const { return m_bShowNonMonthDays; } AFX_INLINE XTPDatePickerBorderStyle CXTPDatePickerControl::GetBorderStyle() const { return m_borderStyle; } AFX_INLINE int CXTPDatePickerControl::GetMaxSelCount() const { return m_nMaxSelectionDays; } AFX_INLINE int CXTPDatePickerControl::GetMonthDelta() const { return m_nMonthDelta ? m_nMonthDelta : 1; } AFX_INLINE void CXTPDatePickerControl::SetMonthDelta(int iDelta) { m_nMonthDelta = iDelta; } AFX_INLINE BOOL CXTPDatePickerControl::GetToday(COleDateTime& refDateTime) const { refDateTime = m_dtToday; return TRUE; } AFX_INLINE int CXTPDatePickerControl::GetButtonCount() const { return (int)m_arrButtons.GetSize(); } AFX_INLINE CXTPDatePickerButton* CXTPDatePickerControl::GetButton(int nIndex) const { return m_arrButtons[nIndex]; } AFX_INLINE CXTPNotifyConnection* CXTPDatePickerControl::GetConnection() const { return m_pConnection; } AFX_INLINE BOOL CXTPDatePickerControl::IsAllowNoncontinuousSelection() const { return m_bAllowNoncontinuousSelection; } AFX_INLINE CXTPDatePickerDaysCollection* CXTPDatePickerControl::GetSelectedDays() const { return m_pSelectedDays; } AFX_INLINE void CXTPDatePickerControl::AdjustLayout() { InitNames(); AdjustLayout(m_rcControl); } AFX_INLINE BOOL CXTPDatePickerControl::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) { return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext); } AFX_INLINE BOOL CXTPDatePickerControl::IsMultiSelectionMode() const { return m_bMultiSelectionMode; } AFX_INLINE void CXTPDatePickerControl::SetMultiSelectionMode(BOOL bMultiSelectionMode) { m_bMultiSelectionMode = bMultiSelectionMode; } #endif // !defined(_XTPDATEPICKERCONTROL_H__)