XTPDatePickerControl.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:92k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPDatePickerControl.h: interface for the CXTPDatePickerControl class.
  2. //
  3. // This file is a part of the XTREME CALENDAR MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(_XTPDATEPICKERCONTROL_H__)
  22. #define _XTPDATEPICKERCONTROL_H__
  23. #if _MSC_VER > 1000
  24. #pragma once
  25. #endif // _MSC_VER > 1000
  26. //}}AFX_CODEJOCK_PRIVATE
  27. // XTPDatePickerControl.h : header file
  28. //
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CXTPDatePickerControl window
  31. #include "Common/XTPNotifyConnection.h"
  32. #include "XTPCalendarDefines.h"
  33. class CXTPDatePickerPaintManager;
  34. class CXTPDatePickerItemMonth;
  35. class CXTPDatePickerDaysCollection;
  36. class CXTPDatePickerList;
  37. class CXTPDatePickerControl;
  38. //===========================================================================
  39. // Summary:
  40. //     This structure represents a set of parameters which are
  41. //     used to display day items.
  42. //     1. There could be customized foreground and background colors.
  43. //     2. Also you can text font for the displayed day text.
  44. //     3. And as the last thing you can customize a day picture displayed there,
  45. //        using OLE PICTUREDISP interface and OleSetPicture method.
  46. //===========================================================================
  47. struct _XTP_EXT_CLASS XTP_DAYITEM_METRICS : public CXTPCmdTarget
  48. {
  49. //-----------------------------------------------------------------------
  50. // Summary:
  51. //     Get day item font..
  52. // Remarks:
  53. //     Return a day font stored by the structure.
  54. //-----------------------------------------------------------------------
  55. CFont* GetFont();
  56. //-----------------------------------------------------------------------
  57. // Summary:
  58. //     Set a new font for the day item.
  59. // Parameters:
  60. //  pFont - Pointer to a CFont object.
  61. //-----------------------------------------------------------------------
  62. void SetFont(CFont* pFont);
  63. COLORREF clrForeground; // A COLORREF object that contains the item's foreground color.
  64. COLORREF clrBackground; // A COLORREF object that contains the item's background color.
  65. //{{AFX_CODEJOCK_PRIVATE
  66. XTP_DAYITEM_METRICS();
  67. virtual ~XTP_DAYITEM_METRICS(){};
  68. private:
  69. CFont m_fntText;        // A CFont object that contains the item's text font.
  70. //}}AFX_CODEJOCK_PRIVATE
  71. };
  72. //===========================================================================
  73. // Summary:
  74. //     Structure used to send button notification messages.
  75. // Remarks:
  76. //     This structure represents a set of parameters which are sent
  77. //     to the Main window in a WM_NOTIFY message from DatePicker control
  78. //     and notify the main window when a button event occurs.
  79. //===========================================================================
  80. struct XTP_NC_DATEPICKER_BUTTON {
  81. NMHDR hdr;  // Contains information about a notification message.
  82. int nID;    // Date picker button ID (could be XTP_IDS_DATEPICKER_TODAY or XTP_IDS_DATEPICKER_NONE)
  83. };
  84. //---------------------------------------------------------------------------
  85. // Summary:
  86. //     Callback function definition for the IsITEMMETRICS function.
  87. // Remarks:
  88. //     First three arguments are required. The pUserData can be NULL.
  89. //     pDatePicker     - is CXTPDatePickerControl*   type to provide DatePicker
  90. //                       control pointer.
  91. //     rDateTime       - is COleDateTime reference type to provide date time
  92. //                       storage object.
  93. //     pDayItemMetrics - is XTP_DAYITEM_METRICS* pointer type to provide display
  94. //                       metrics.
  95. //     pUserData       - is void* pointer to any additional user's defined parameter,
  96. //                       this value can be NULL.
  97. //---------------------------------------------------------------------------
  98. typedef void (CALLBACK* PFNITEMMETRICS)(CXTPDatePickerControl* pDatePicker, const COleDateTime& rDateTime, XTP_DAYITEM_METRICS* pDayItemMetrics, void* pUserData);
  99. //{{AFX_CODEJOCK_PROVATE
  100. const UINT XTP_NC_DATEPICKER_BUTTON_CLICK      = (NM_FIRST - 50);  // Notify ID to parent window.
  101. const UINT XTP_NC_DATEPICKER_SELECTION_CHANGED = (NM_FIRST - 51);  // Notify ID to parent window.
  102. const UINT XTP_DATEPICKER_TIMERID              = 255;              // Date picker timer ID.
  103. const UINT XTP_DATEPICKER_TIMER_INTERVAL       = 200;              // Date picker timer interval.
  104. const UINT XTP_SELECTION_INFINITE              = (UINT)-1;         // Infinite number of selected days.
  105. //}}AFX_CODEJOCK_PROVATE
  106. // ----------------------------------------------------------------------
  107. // Summary:
  108. //     Border style of Date picker control
  109. // ----------------------------------------------------------------------
  110. enum XTPDatePickerBorderStyle
  111. {
  112. xtpDatePickerBorderNone,             // No border.
  113. xtpDatePickerBorder3D,               // 3D border.
  114. xtpDatePickerBorderOffice,           // Office-like border
  115. xtpDatePickerBorderStatic            // Static border.
  116. };
  117. // ----------------------------------------------------------------------
  118. // Summary:
  119. //     This class represents a DatePicker button.
  120. // Remarks:
  121. //     CXTPDatePickerButton provides storage for all parameters needed to
  122. //     display and handle a button.
  123. // ----------------------------------------------------------------------
  124. class _XTP_EXT_CLASS CXTPDatePickerButton
  125. {
  126. public:
  127. //-----------------------------------------------------------------------
  128. // Summary:
  129. //     Default button constructor.
  130. // Remarks:
  131. //     Default button constructor handles all necessary
  132. //     initialization.
  133. //-----------------------------------------------------------------------
  134. CXTPDatePickerButton();
  135. //-----------------------------------------------------------------------
  136. // Summary:
  137. //     Destroys a CXTPDatePickerButton object, handles cleanup
  138. //     and de-allocation.
  139. //-----------------------------------------------------------------------
  140. virtual ~CXTPDatePickerButton()
  141. {
  142. }
  143. //-----------------------------------------------------------------------
  144. // Summary:
  145. //     Get a button caption.
  146. // Remarks:
  147. //     Load from resources string using ID stored in m_nID member or
  148. //     value which was set by SetCaption() call.
  149. // Returns:
  150. //     Returns a button caption.
  151. // See Also: m_nID, SetCaption
  152. //-----------------------------------------------------------------------
  153. virtual CString GetCaption();
  154. //-----------------------------------------------------------------------
  155. // Summary:
  156. //     Set a button caption.
  157. // Parameters:
  158. //     pcszCaption - A caption string.
  159. // Remarks:
  160. //     If pcszCaption is empty string - GetCaption will the m_nID to load
  161. //     caption string from resources.
  162. // See Also: GetCaption, m_nID
  163. //-----------------------------------------------------------------------
  164. virtual void SetCaption(LPCTSTR pcszCaption);
  165. public:
  166. int m_nID;              // -------------------------------------------------------------
  167.                         // This member variable is used to specify the identifier of the
  168.                         // button. Also it used as resource ID for a caption string.
  169.                         // -------------------------------------------------------------
  170. CRect m_rcButton;       // --------------------------------------------------------------
  171.                         // This member variable is used to specify the bounding rectangle
  172.                         // coordinates of a button.
  173.                         // --------------------------------------------------------------
  174. BOOL m_bVisible;        // ----------------------------------------------------------------
  175.                         // This member variable is used to indicate if a button is visible.
  176.                         // ----------------------------------------------------------------
  177. BOOL m_bPressed;        // ----------------------------------------------------------------
  178.                         // This member variable is used to indicate if a button is pressed.
  179.                         // ----------------------------------------------------------------
  180. BOOL m_bHighlight;      // -------------------------------------------------------
  181.                         // This member variable is used to indicate if a button is
  182.                         // highlighted.
  183.                         // -------------------------------------------------------
  184. protected:
  185. CString m_strCaption;   // ------------------------------------------------------------------
  186.                         // This member variable is used to specify the caption of the button.
  187.                         // ------------------------------------------------------------------
  188. };
  189. // ----------------------------------------------------------------------
  190. // Summary:
  191. //     Class CXTPDatePickerButtons represents a collection of buttons.
  192. // Remarks:
  193. //     CXTPDatePickerButtons inherits most of the behavior of the
  194. //     standard MFC CArray. The DatePicker control can display and handle
  195. //     any number of buttons. CXTPDatePickerButtons provides the basic
  196. //     functionality to handle the collection.<p/>
  197. // Create a CXTPDatePickerButtons object by calling the default
  198. //     constructor without parameters. Furthermore, add buttons to
  199. //     collection using standard CArray member functions.
  200. // See Also:
  201. //     CArray
  202. // ----------------------------------------------------------------------
  203. class _XTP_EXT_CLASS CXTPDatePickerButtons : public CArray<CXTPDatePickerButton*, CXTPDatePickerButton*>
  204. {
  205. public:
  206. // ----------------------------------------------------------------------
  207. // Summary:
  208. //     Call this member function to retrieve the current count of visible
  209. //     buttons.
  210. // Returns:
  211. //     Integer value that contains the current number of visible buttons
  212. //     that are in the collection.
  213. // ----------------------------------------------------------------------
  214. int GetVisibleButtonCount() const;
  215. // ------------------------------------------------------------------
  216. // Summary:
  217. //     This member function finds buttons by their ID property.
  218. // Remarks:
  219. //     Walks through the collection and looks for the button with the
  220. //     provided ID.
  221. // Returns:
  222. //     A pointer to the CXTPDatePickerButton structure. NULL if no
  223. //     matching button ID is found.
  224. // Parameters:
  225. //     nID :  An int that contains the ID to search for.
  226. // ------------------------------------------------------------------
  227. CXTPDatePickerButton* Find(int nID) const;
  228. // ----------------------------------------------------------------------
  229. // Summary:
  230. //     This member function determines which button is affected by the
  231. //     mouse pointer.
  232. // Parameters:
  233. //     point :  Point to test.
  234. // Remarks:
  235. //     Call this member function to test a mouse event occurring on one
  236. //     of the buttons rectangle areas. If no buttons are found then NULL
  237. //     is returned.
  238. // Returns:
  239. //     The DatePicker button at the specified position, if any, otherwise
  240. //     NULL.
  241. // ----------------------------------------------------------------------
  242. CXTPDatePickerButton* HitTest(CPoint point) const;
  243. };
  244. // ----------------------------------------------------------------------
  245. // Summary:
  246. //     Class CXTPDatePickerControl encapsulates the functionality of a
  247. //     date and time picker control.
  248. // Remarks:
  249. //     A CXTPDatePickerControl object implements a calendar-like user
  250. //     interface. This provides the user with a very intuitive and
  251. //     recognizable method of entering or selecting a date. The control
  252. //     also provides the application with the means to obtain and set the
  253. //     date information in the control using existing data types. By
  254. //     default, the date picker control displays the current day and
  255. //     month. However, the user is able to scroll to the previous and
  256. //     next months and select a specific month and/or year. The user can
  257. //     select a date or a range of dates. Also, the user can change the
  258. //     display by:
  259. //
  260. //     * Scrolling backward and forward, from month to month.
  261. //     * Clicking the Today text to select the current day.
  262. //     * Clicking the None text to remove the selection.
  263. //     * Picking a month or a year from a pop-up menu.
  264. //
  265. // The date picker control is customize by applying a variety of
  266. //     additional settings. Look at the control's class members list to
  267. //     see available customization options.<p/>
  268. // The date picker control can display more than one month, and it
  269. //     can indicate special days (such as holidays) by modifying the
  270. //     date's style. Furthermore, CXTPDatePickerControl contains methods
  271. //     similar to the MFC CMonthCalCtrl. Use the methods in the same way
  272. //     as the MFC CMonthCalCtrl.
  273. // See Also:
  274. //     CMonthCalCtrl
  275. // ----------------------------------------------------------------------
  276. class _XTP_EXT_CLASS CXTPDatePickerControl : public CWnd
  277. {
  278. //{{AFX_CODEJOCK_PRIVATE
  279. friend class CXTPDatePickerItemMonth;
  280. friend class CXTPDatePickerDaysCollection;
  281. friend class CXTPDatePickerTheme;
  282. friend class CXTPCalendarController;
  283. //}}AFX_CODEJOCK_PRIVATE
  284. public:
  285. //===========================================================================
  286. // Summary:
  287. //     Enumeration of operational mouse modes.
  288. // Remarks:
  289. //     DatePickerControl handles several Mouse states.
  290. //     This enumeration helps to clearly identify each of these states.
  291. //===========================================================================
  292. enum DatePickerMouseMode
  293. {
  294. mouseNothing,            // No mouse activity by the user.
  295. mouseScrollingLeft,      // User pressed left scroll triangle and is holding the button.
  296. mouseScrollingRight,     // User pressed right scroll triangle and is holding the button.
  297. mouseSelecting,          // User pressed left mouse down on unselected day item and is now selecting a range of day items.
  298. mouseDeselecting,        // User pressed left mouse down on selected day item and is now de-selecting a range of day items.
  299. mouseTrackingHeaderList  // User is tracking pop-up month list window.
  300. };
  301. // Construction
  302. public:
  303. // -------------------------------------------------------------------------------------------------------------
  304. // Summary:
  305. //     Default constructor is used to construct a CXTPDatePickerControl
  306. //     object.
  307. // Remarks:
  308. //     Construct a CXTPDatePickerControl object in two steps. First, call
  309. //     the constructor CXTPDatePickerControl and then call the Create
  310. //     method, which initializes the window.
  311. // Example:
  312. // <code>
  313. // // Declare a local CXTPDatePickerControl object.
  314. // CXTPDatePickerControl myDatePicker;
  315. //
  316. // // Declare a dynamic CXTPDatePickerControl object.
  317. // CXTPDatePickerControl* pMyDatePicker = new CXTPDatePickerControl();
  318. //
  319. // // Create a window
  320. // if (!myDatePicker.Create(WS_CHILD | WS_TABSTOP | WS_VISIBLE, CRect(0, 0, 200, 200), this, ID_DATEPICKER_CONTROL))
  321. // {
  322. //     TRACE(_T("Failed to create the date picker window\n"));
  323. // }
  324. // </code>
  325. // See Also:
  326. //     Create
  327. // -------------------------------------------------------------------------------------------------------------
  328. CXTPDatePickerControl();
  329. //-----------------------------------------------------------------------
  330. // Summary:
  331. //     Destroys a CXTPDatePickerControl object, handles cleanup
  332. //     and de-allocation.
  333. //-----------------------------------------------------------------------
  334. virtual ~CXTPDatePickerControl();
  335. public:
  336. // -----------------------------------------------------------------------
  337. // Summary:
  338. //     This member function is used to create the Date Picker Control
  339. //     Window.
  340. // Parameters:
  341. //     dwStyle :     Specifies the window style attributes.
  342. //     rect :        A RECT object that contains the coordinates of the
  343. //                   window, in the client coordinates of pParentWnd.
  344. //     pParentWnd :  A CWnd pointer to the parent window.
  345. //     nID :         A UINT that contains the ID of the child window.
  346. //     pContext :    A CCreateContext pointer that contains the create context
  347. //                   of the window.
  348. // Returns:
  349. //     Nonzero if successful. Otherwise 0.
  350. // -----------------------------------------------------------------------
  351. virtual BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  352. // ----------------------------------------------------------------------
  353. // Summary:
  354. //     This member function implements pop-up window behavior for the
  355. //     Date Picker control.
  356. // Parameters:
  357. //     rect :        Rectangle that contains the size and position of the
  358. //                   window, in client coordinates of pParentWnd.
  359. //     pParentWnd :  Pointer to the parent window.
  360. // Returns:
  361. //     TRUE if successful, FALSE otherwise.
  362. // See Also:
  363. //     IsModal
  364. // ----------------------------------------------------------------------
  365. virtual BOOL GoModal(const RECT& rect, CWnd* pParentWnd = NULL);
  366. // ----------------------------------------------------------------------
  367. // Summary:
  368. //      Is the control runs in modal mode.
  369. // Returns:
  370. //      TRUE when the control is used as a pop-up window,
  371. //      FALSE otherwise.
  372. // See Also:
  373. //     GoModal
  374. // ----------------------------------------------------------------------
  375. virtual BOOL IsModal() const;
  376. // ----------------------------------------------------------------------
  377. // Summary:
  378. //     This member function returns a pointer to the associated paint
  379. //     manager.
  380. // Remarks:
  381. //     Call this member function to obtain a pointer to the paint manager
  382. //     object. The paint manager object is used for drawing the date
  383. //     picker window.
  384. // Returns:
  385. //     Pointer to the paint manager object.
  386. // See Also:
  387. //     SetTheme
  388. // ----------------------------------------------------------------------
  389. virtual CXTPDatePickerPaintManager* GetPaintManager();
  390. //-----------------------------------------------------------------------
  391. // Summary:
  392. //     This member function redraws the control windows.
  393. // Remarks:
  394. //     Call this member function to redraw all control windows
  395. //     according to the stored parameter values. The window will be
  396. //     updated immediately: CWnd::UpdateWindow() will be called.
  397. // See Also:
  398. //     _RedrawControl
  399. //-----------------------------------------------------------------------
  400. virtual void RedrawControl();
  401. // ---------------------------------------------------------------------
  402. // Summary:
  403. //     This member function sets the new control drawing theme.
  404. // Parameters:
  405. //     pPaintManager :  Pointer of the new paint manager object or derived
  406. //                      class like CXTPDatePickerThemeOffice2007.
  407. //                      if NULL - the default paint manager object is set.
  408. // Remarks:
  409. //     Call this member function to set the paint manager object that is
  410. //     used for drawing a date picker window.
  411. // See Also:
  412. //     GetPaintManager
  413. // ---------------------------------------------------------------------
  414. virtual void SetTheme(CXTPDatePickerPaintManager* pPaintManager = NULL);
  415. // ---------------------------------------------------------------------
  416. // Summary:
  417. //     This function is called to determine if AutoSize mode is set.
  418. // Remarks:
  419. //     Call this member function to determine whether the control's auto
  420. //     size mode is enabled.
  421. // Returns:
  422. //     A boolean value that specifies is AutoSize is enabled.<P/>
  423. //     TRUE if AutoSize is enabled.<P/>
  424. //     Otherwise return FALSE.
  425. // See Also:
  426. //     SetAutoSize
  427. // ---------------------------------------------------------------------
  428. virtual BOOL IsAutoSize();
  429. //-----------------------------------------------------------------------
  430. // Summary:
  431. //     This function sets the AutoSize mode.
  432. // Parameters:
  433. //     bAuto - Boolean value. If bAuto is TRUE, then AutoSize
  434. //             is enabled. If this parameter is FALSE, then
  435. //             AutoSize is disabled.
  436. // Remarks:
  437. //     Set AutoSize mode to TRUE if you want the control to automatically
  438. //     calculate the number of month items according to control's size.
  439. //     When this mode is enabled and there is enough space on control's
  440. //     client area, the control adds a row or a column of month items
  441. //     and centers them both horizontally and vertically.
  442. // See Also: IsAutoSize
  443. //-----------------------------------------------------------------------
  444. virtual void SetAutoSize(BOOL bAuto = TRUE);
  445. // -------------------------------------------------------------------
  446. // Summary:
  447. //     This member function sets the user defined day metrics callback
  448. //     function.
  449. // Parameters:
  450. //     pFunc :   Pointer to the callback function.
  451. //     pParam :  Pointer to any user defined parameter provided to the
  452. //               callback function.
  453. // Remarks:
  454. //     Call this member function to set up the user defined callback
  455. //     function to manipulate the 'special day's attributes'.
  456. // See Also:
  457. //     PFNITEMMETRICS, GetCallbackDayMetrics, GetDayMetrics
  458. // -------------------------------------------------------------------
  459. virtual void SetCallbackDayMetrics(PFNITEMMETRICS pFunc, void* pParam = NULL);
  460. // ---------------------------------------------------------------------
  461. // Summary:
  462. //     This member function returns the day metrics callback function.
  463. // Remarks:
  464. //     Call this member function to obtain a pointer to the user defined
  465. //     day metrics callback function.
  466. // Returns:
  467. //     Pointer to the callback function.
  468. // See Also:
  469. //     PFNITEMMETRICS, SetCallbackDayMetrics, GetDayMetrics
  470. // ---------------------------------------------------------------------
  471. virtual PFNITEMMETRICS GetCallbackDayMetrics();
  472. // --------------------------------------------------------------------
  473. // Summary:
  474. //     This member function returns the day item drawing metrics.
  475. // Parameters:
  476. //     dtDay :      Reference to the DateTime value to check.
  477. //     pDayMetics : Pointer to the day metrics structure.
  478. // Remarks:
  479. //     Determines whether or not a given date is special. This function
  480. //     calls a callback function to make this determination.
  481. // See Also:
  482. //     GetCallbackDayMetrics, SetCallbackDayMetrics
  483. // --------------------------------------------------------------------
  484. virtual void GetDayMetrics(COleDateTime& dtDay, XTP_DAYITEM_METRICS* pDayMetics);
  485. // ----------------------------------------------------------------------
  486. // Summary:
  487. //     This member function sets the day of the week that is displayed in
  488. //     the leftmost column of the calendar.
  489. // Parameters:
  490. //     nDay :  An integer value representing which day is set as the first day
  491. //             of the week. This value must be one of the day numbers. See
  492. //             GetFirstDayOfWeek for a description of the day numbers.
  493. // See Also:
  494. //     GetFirstDayOfWeek
  495. // ----------------------------------------------------------------------
  496. virtual void SetFirstDayOfWeek(int nDay);
  497. // ----------------------------------------------------------------------
  498. // Summary:
  499. //     This member function obtains the first day of the week that is
  500. //     displayed in the leftmost column of the calendar.
  501. // Returns:
  502. //     An integer value that represents the first day of the week. The
  503. //     days of the week are represented as integers, as follows.
  504. //     * 1 - Sunday
  505. //     * 2 - Monday
  506. //     * 3 - Tuesday
  507. //     * 4 - Wednesday
  508. //     * 5 - Thursday
  509. //     * 6 - Friday
  510. //     * 7 - Saturday
  511. // See Also:
  512. //     SetFirstDayOfWeek
  513. // ----------------------------------------------------------------------
  514. virtual int GetFirstDayOfWeek();
  515. // ----------------------------------------------------------------------
  516. // Summary:
  517. //     This member function sets the required number of this year days
  518. //     in the first week of the year.
  519. // Parameters:
  520. //     nDays : An integer value representing the required number of
  521. //             days of the new year in the first week of the year.
  522. //             The value should be between 1 (default) and 7 (full week).
  523. // See Also:
  524. //     GetFirstWeekOfYearDay
  525. // Example:
  526. // <code>
  527. // // Setup German style of week numbers calculation.
  528. // pMyDatePicker->SetFirstWeekOfYearDays(4);
  529. // </code>
  530. // ----------------------------------------------------------------------
  531. virtual void SetFirstWeekOfYearDays(int nDays);
  532. // ----------------------------------------------------------------------
  533. // Summary:
  534. //     This member function obtains the current required number of year days
  535. //     in the first week of the year.
  536. // Returns:
  537. //     An integer value that represents the required number of
  538. //     days of the new year in the first week of this year.
  539. //     The value should be between 1 (by default) and 7 (full week).
  540. // See Also:
  541. //     SetFirstWeekOfYearDays
  542. // ----------------------------------------------------------------------
  543. virtual int GetFirstWeekOfYearDays();
  544. // ----------------------------------------------------------------------
  545. // Summary:
  546. //     This function sets visibility for the "Today" and "None" buttons.
  547. // Parameters:
  548. //     bShowToday :  Provide TRUE to show the "Today" button, or FALSE to
  549. //                   hide it.
  550. //     bShowNone :   Provide TRUE to show the "None" button, or FALSE to
  551. //                   hide it.
  552. // Remarks:
  553. //     Call this member function to hide or show any of the control's
  554. //     service buttons.
  555. // See Also:
  556. //     IsTodayButtonVisible, IsNoneButtonVisible
  557. // ----------------------------------------------------------------------
  558. virtual void SetButtonsVisible(BOOL bShowToday, BOOL bShowNone);
  559. // ------------------------------------------------------------------------
  560. // Summary:
  561. //     This member function is used to obtain the value of the visibility
  562. //     flag for the "Today" button.
  563. // Remarks:
  564. //     Call this member function to determine the visibility of the
  565. //     "Today" service button.
  566. // Returns:
  567. //     A boolean value that specifies if the "Today" button is visible.<p/>
  568. // TRUE if the "Today" button is visible.<p/>
  569. // Otherwise FALSE.
  570. // See Also:
  571. //     IsNoneButtonVisible, SetButtonsVisible
  572. // ------------------------------------------------------------------------
  573. virtual BOOL IsTodayButtonVisible();
  574. // -----------------------------------------------------------------------
  575. // Summary:
  576. //     This function returns the boolean visibility flag of the "None"
  577. //     button.
  578. // Remarks:
  579. //     Call this member function to determine the visibility of the
  580. //     "None" service button.
  581. // Returns:
  582. //     A boolean value that specifies if the "None" button is visible.<p/>
  583. //     TRUE when the "None" button is visible.<p/>
  584. //     Otherwise FALSE.
  585. // See Also:
  586. //     IsTodayButtonVisible, SetButtonsVisible
  587. // -----------------------------------------------------------------------
  588. virtual BOOL IsNoneButtonVisible();
  589. // ----------------------------------------------------------------------
  590. // Summary:
  591. //     Call this member function to enable or disable highlighting of the
  592. //     "Today" cell.
  593. // Parameters:
  594. //     bValue :  Boolean value determines if the "Today" cell is
  595. //               highlighted.
  596. // Remarks:
  597. //     The "Today" cell is determined and changed using the SetToday and
  598. //     GetToday member functions. When highlighting is enabled, the cell
  599. //     is surrounded by a rectangle frame of the specific color.
  600. // See Also:
  601. //     GetHighlightToday, SetToday, GetToday,
  602. //     CXTPDatePickerPaintManager::GetHighlightTodayColor
  603. // ----------------------------------------------------------------------
  604. virtual void SetHighlightToday(BOOL bValue);
  605. // -------------------------------------------------------------------
  606. // Summary:
  607. //     Call this member function to determine whether the "Today" cell
  608. //     highlighting is enabled or disabled.
  609. // Remarks:
  610. //     This member function returns a boolean flag that specifies the
  611. //     "Today" button highlighting mode.
  612. // Returns:
  613. //     A BOOL that indicates if the "Today" cell is highlighted.<p/>
  614. //     TRUE if the "Today" cell is highlighted. Otherwise FALSE.
  615. // See Also:
  616. //     GetHighlightToday, SetToday, GetToday,
  617. //     CXTPDatePickerPaintManager::GetHighlightTodayColor
  618. // -------------------------------------------------------------------
  619. virtual BOOL GetHighlightToday();
  620. //-----------------------------------------------------------------------
  621. // Summary:
  622. //     Call this member to set right-to-left mode.
  623. // Parameters:
  624. //     bRightToLeft - TRUE to set right-to-left reading-order properties.
  625. //-----------------------------------------------------------------------
  626. virtual void SetLayoutRTL(BOOL bRightToLeft);
  627. // ------------------------------------------------------------------------
  628. // Summary:
  629. //     Call this member function to show or hide the week numbers.
  630. // Parameters:
  631. //     bValue :  Boolean value determines whether week numbers are visible.
  632. // Remarks:
  633. //     Week numbers are shown for each week in each month at the very
  634. //     left column of the month, separated by the vertical line from the
  635. //     other week days. This member function controls the visibility
  636. //     mode of the week numbers.
  637. // See Also:
  638. //     GetShowWeekNumbers,
  639. //     CXTPDatePickerPaintManager::GetWeekNumbersBackColor,
  640. //     CXTPDatePickerPaintManager::GetWeekNumbersTextColor,
  641. //     CXTPDatePickerPaintManager::GetWeekNumbersTextFont
  642. // ------------------------------------------------------------------------
  643. virtual void SetShowWeekNumbers(BOOL bValue);
  644. // ----------------------------------------------------------------------
  645. // Summary:
  646. //     Call this member function to determine if the week numbers are
  647. //     visible.
  648. // Remarks:
  649. //     The week numbers are shown for each week in each month as the very
  650. //     left column of the month, separated by the vertical line from the
  651. //     other week days. This member function determines if the week
  652. //     numbers are shown.
  653. // Returns:
  654. //     Boolean value that determines if the week numbers are set to be
  655. //     shown.<p/>
  656. // TRUE - If the week numbers are visible.<p/>
  657. // FALSE - If the week numbers are not visible.
  658. // See Also:
  659. //     SetShowWeekNumbers,
  660. //     CXTPDatePickerPaintManager::GetWeekNumbersBackColor,
  661. //     CXTPDatePickerPaintManager::GetWeekNumbersTextColor,
  662. //     CXTPDatePickerPaintManager::GetWeekNumbersTextFont
  663. // ----------------------------------------------------------------------
  664. virtual BOOL GetShowWeekNumbers();
  665. // -------------------------------------------------------------------
  666. // Summary:
  667. //     Call this member function to show or hide non-month days.
  668. // Parameters:
  669. //     bShow :  Boolean value determines if the non month days are
  670. //              shown.
  671. //              TRUE  If the non-month days are visible.
  672. //              FALSE If the non-month days are not visible.
  673. // Remarks:
  674. //     Non-month days are shown in a special color or font. Non-month
  675. //     days are shown just before and after regular days of a specific
  676. //     month.
  677. // Note:
  678. //     For a control showing more than 1 month, non-month days will be
  679. //     shown before the first month, and after the last one.
  680. // See Also:
  681. //     GetShowNonMonthDays,
  682. //     CXTPDatePickerPaintManager::GetNonMonthDayBackColor,
  683. //     CXTPDatePickerPaintManager::GetNonMonthDayTextColor,
  684. //     CXTPDatePickerPaintManager::GetNonMonthDayTextFont
  685. // -------------------------------------------------------------------
  686. virtual void SetShowNonMonthDays(BOOL bShow);
  687. // ---------------------------------------------------------------------
  688. // Summary:
  689. //     Call this member function to determine if the non-month days are
  690. //     visible.
  691. // Remarks:
  692. //     Non-month days are shown in a special color or font just before
  693. //     and after regular days of a specific month.
  694. // Note:
  695. //     For a control showing more than 1 month, non-month days are shown
  696. //     before the first month, and after the last month.
  697. // Returns:
  698. //     A boolean value that specifies if the "non-month days" are
  699. //     visible.<p/>
  700. //     TRUE if non-month days are visible.<p/>
  701. //     FALSE otherwise.
  702. // See Also:
  703. //     SetShowNonMonthDays,
  704. //     CXTPDatePickerPaintManager::GetNonMonthDayBackColor,
  705. //     CXTPDatePickerPaintManager::GetNonMonthDayTextColor,
  706. //     CXTPDatePickerPaintManager::GetNonMonthDayTextFont
  707. // ---------------------------------------------------------------------
  708. virtual BOOL GetShowNonMonthDays();
  709. // ----------------------------------------------------------------------
  710. // Summary:
  711. //     Call this member function to set borders style
  712. //     around the control.
  713. // Parameters:
  714. //     borderStyle - XTPDatePickerBorderStyle value determines whether border style
  715. // See Also:
  716. //     GetBorderStyle, CXTPDatePickerPaintManager::DrawBorder, XTPDatePickerBorderStyle
  717. // ----------------------------------------------------------------------
  718. virtual void SetBorderStyle(XTPDatePickerBorderStyle borderStyle);
  719. // ----------------------------------------------------------------------
  720. // Summary:
  721. //     Call this member function to determine if the border is
  722. //     visible.
  723. // Returns:
  724. //     XTPDatePickerBorderStyle value that specifies the border style.<p/>
  725. // See Also:
  726. //     SetBorderStyle, CXTPDatePickerPaintManager::DrawBorder, XTPDatePickerBorderStyle
  727. // ----------------------------------------------------------------------
  728. virtual XTPDatePickerBorderStyle GetBorderStyle() const;
  729. // ----------------------------------------------------------------------
  730. // Summary:
  731. //     Call this member function to set the number of months in the
  732. //     control's grid.
  733. // Parameters:
  734. //     nRows :  An int that contains the new rows count value.
  735. //     nCols :  An int that contains the new columns count value.
  736. // Remarks:
  737. //     This member function is called in the AutoSize mode. It sets the
  738. //     new number of columns and rows in the control's months grid. Also,
  739. //     the function redraws each month within the existing control's
  740. //     coordinates, reducing or enlarging the size of each month item as
  741. //     necessary.
  742. // Note:
  743. //     This function does nothing when AutoSize mode is enabled.
  744. // See Also:
  745. //     GetRows, GetCols
  746. // ----------------------------------------------------------------------
  747. virtual void SetGridSize(int nRows, int nCols);
  748. //-----------------------------------------------------------------------
  749. // Summary:
  750. //     Call this member function to obtain the number of rows in the
  751. //     months grid.
  752. // Returns:
  753. //     The number of rows in the control's months grid.
  754. // See Also: GetCols, SetGridSize
  755. //-----------------------------------------------------------------------
  756. virtual int GetRows();
  757. // ----------------------------------------------------------------------
  758. // Summary:
  759. //     Call this member function to obtain the number of columns in the
  760. //     months grid.
  761. // Returns:
  762. //     An int that contains the number of columns in the control's months
  763. //     grid.
  764. // See Also:
  765. //     GetRows, SetGridSize
  766. // ----------------------------------------------------------------------
  767. virtual int GetCols();
  768. //-----------------------------------------------------------------------
  769. // Summary:
  770. //     This member function finds the month item at the provided point.
  771. // Parameters:
  772. //     ptMouse - The mouse coordinates to test.
  773. //     pMCHitTest - A pointer to a <b>MCHITTESTINFO</b> structure
  774. //                  containing hit testing points for the
  775. //                  date picker control.
  776. // Remarks:
  777. //     Call this function to retrieve a pointer to the month item
  778. //          at the specified position.
  779. //
  780. //     This HitTest(PMCHITTESTINFO pMCHitTest) function determines which date portion of the
  781. //     picker control, if any, is at a specified position.  It implements the behavior of the
  782. //     CMonthCalCtrl::HitTest function.
  783. // Returns:
  784. //     A pointer to the month item where the mouse was clicked.
  785. //     Returns NULL if the mouse was clicked outside the months grid area.
  786. //
  787. //     HitTest(PMCHITTESTINFO pMCHitTest) returns a DWORD value. Equal to the uHit member of the MCHITTESTINFO structure.
  788. // See Also: HitTest, CMonthCalCtrl::HitTest, MCHITTESTINFO
  789. //-----------------------------------------------------------------------
  790. virtual CXTPDatePickerItemMonth* HitTest(CPoint ptMouse);
  791. virtual DWORD HitTest(PMCHITTESTINFO pMCHitTest); // <combine CXTPDatePickerControl::HitTest@CPoint>
  792. // --------------------------------------------------------------------------
  793. // Summary:
  794. //     This member function scrolls the control's months grid to the left
  795. //     by the specified number of months.
  796. // Parameters:
  797. //     nMonthCount :  Integer value that specifies how many months to scroll.
  798. //                    The default value is 1.
  799. // Remarks:
  800. //     Call this member function to scroll the months grid to the left by
  801. //     nMonthCount positions.
  802. // See Also:
  803. //     ScrollRight
  804. // --------------------------------------------------------------------------
  805. virtual void ScrollLeft(int nMonthCount = 1);
  806. // --------------------------------------------------------------------------
  807. // Summary:
  808. //     This member function scrolls the control's months grid to the
  809. //     right by the specified amount of months.
  810. // Parameters:
  811. //     nMonthCount :  Integer value that specifies how many months to scroll.
  812. //                    The default value is 1.
  813. // Remarks:
  814. //     Call this member function to scroll the months grid to the right
  815. //     by nMonthCount positions.
  816. // See Also:
  817. //     ScrollLeft
  818. // --------------------------------------------------------------------------
  819. virtual void ScrollRight(int nMonthCount = 1);
  820. // -----------------------------------------------------------------------------------
  821. // Summary:
  822. //     Call this member function to send notifications to the parent
  823. //     window.
  824. // Parameters:
  825. //     nMessage :  An int that contains the identifier of the message. See remarks
  826. //                 section for a list of valid values.
  827. // pNMHDR :    Pointer to the XTP_NC_DATEPICKER_BUTTON notification
  828. //                 structure.
  829. // Remarks:
  830. //     The following values are valid for nMessage:
  831. //     * XTP_NC_DATEPICKER_BUTTON_CLICK - Notifies that one of date
  832. //           picker buttons was clicked.
  833. //     * XTP_NC_DATEPICKER_SELECTION_CHANGED - Notifies that the date
  834. //           picker selection has changed.
  835. // This function notifies the parent window that something happened.
  836. //     For the example of how to catch these messages see below.
  837. // Example:
  838. // <code>
  839. // // First, add the message handler to your message map.
  840. // ON_NOTIFY(XTP_NC_DATEPICKER_BUTTON_CLICK, 1000, OnButtonPressed)
  841. //
  842. // // Then implement the message handler like the example below
  843. // void YourDlg::OnButtonPressed(NMHDR* pNotifyStruct, LRESULT*)
  844. // {
  845. //     XTP_NC_DATEPICKER_BUTTON* pNMButton = (XTP_NC_DATEPICKER_BUTTON*)pNotifyStruct;
  846. //
  847. //     switch (pNMButton->nID)
  848. //     {
  849. //         case XTP_IDS_DATEPICKER_TODAY:
  850. //             TRACE(_T("TODAY BUTTON PRESSEDn"));
  851. //             break;
  852. //         case XTP_IDS_DATEPICKER_NONE:
  853. //             TRACE(_T("NONE BUTTON PRESSEDn"));
  854. //             break;
  855. //     }
  856. // }
  857. // </code>
  858. // Returns:
  859. //     An LRESULT that is used to indicate the success of the function. Non-zero
  860. //     if the message is sent successfully, zero otherwise.
  861. // -----------------------------------------------------------------------------------
  862. virtual LRESULT SendMessageToParent(int nMessage, NMHDR* pNMHDR = NULL);
  863. // ---------------------------------------------------------------------
  864. // Summary:
  865. //     This function checks a specific date to determine if it is
  866. //     contained in the control's selection.
  867. // Parameters:
  868. //     dtDay :  A date to check.
  869. // Remarks:
  870. //     Call this member function to determine whether dtDay is selected.
  871. // Returns:
  872. //     A boolean value that specifies if the date is contained in the
  873. //     current selection.<p/>
  874. //     TRUE when the day is selected.<p/>
  875. //     Otherwise FALSE.
  876. // See Also:
  877. //     Select, Deselect
  878. // ---------------------------------------------------------------------
  879. virtual BOOL IsSelected(const COleDateTime& dtDay) const;
  880. // ---------------------------------------------------------------------
  881. // Summary:
  882. //     This function checks a specific date to determine if it is
  883. //     focused.
  884. // Parameters:
  885. //     dtDay :  A date to check.
  886. // Remarks:
  887. //     Focused item is used only for the keyboard navigation and selecting.
  888. //     It is initialized by keyboard using first day of the current
  889. //     selection or if selection is empty the first day of the first
  890. //     visible month is used.
  891. //     Focused item is cleared by mouse or by set selection externally.
  892. // Returns:
  893. //     TRUE when the day is focused, FALSE otherwise.
  894. // See Also:
  895. //     ClearFocus
  896. // ---------------------------------------------------------------------
  897. virtual BOOL IsFocused(const COleDateTime& dtDay) const;
  898. // ---------------------------------------------------------------------
  899. // Summary:
  900. //     This function clear focused attribute if it is set.
  901. // Remarks:
  902. //     Focused item is used only for the keyboard navigation and selecting.
  903. //     It is initialized by keyboard using first day of the current
  904. //     selection or if selection is empty the first day of the first
  905. //     visible month is used.
  906. //     Focused item is cleared by mouse or by set selection externally.
  907. // See Also:
  908. //     IsFocused
  909. // ---------------------------------------------------------------------
  910. virtual void ClearFocus();
  911. // -----------------------------------------------------------------
  912. // Summary:
  913. //     Call this member function to select a specific day.
  914. // Parameters:
  915. //     dtDay :  Date to be selected.
  916. // Remarks:
  917. //     This function determines if one more item can be added to the
  918. //     collection of selected days. If yes, then the selected day is
  919. //     added to the list of selected items.
  920. // See Also:
  921. //     Deselect, IsSelected
  922. // -----------------------------------------------------------------
  923. virtual void Select(const COleDateTime& dtDay);
  924. // --------------------------------------------------------------------
  925. // Summary:
  926. //     Call this member function to de-select the specified day.
  927. // Parameters:
  928. //     dtDay :  Date to be deselected.
  929. // Remarks:
  930. //     This member function removes the provided day from the control's
  931. //     selected days collection.
  932. // See Also:
  933. //     Select, IsSelected
  934. // --------------------------------------------------------------------
  935. virtual void Deselect(const COleDateTime& dtDay);
  936. // ---------------------------------------------------------------------
  937. // Summary:
  938. //     Call this member function to ensure that the COleDateTime item is
  939. //     visible.
  940. // Parameters:
  941. //     dtDate :  The date to test.
  942. // Remarks:
  943. //     If necessary, the function scrolls the month grid on the control
  944. //     to make the day visible.
  945. // See Also:
  946. //     EnsureVisibleSelection
  947. // ---------------------------------------------------------------------
  948. virtual void EnsureVisible(const COleDateTime& dtDate);
  949. // ---------------------------------------------------------------------
  950. // Summary:
  951. //     Call this member function to ensure that the selection range is
  952. //     visible.
  953. // Remarks:
  954. //     If necessary, the function scrolls the month grid on the control
  955. //     to make all selected days visible.
  956. // See Also:
  957. //     EnsureVisible, EnsureVisibleFocus
  958. // ---------------------------------------------------------------------
  959. virtual void EnsureVisibleSelection();
  960. // Summary:
  961. //     Call this member function to ensure that the focused item is visible.
  962. // Remarks:
  963. //     Focused item is used only for the keyboard navigation and selecting.
  964. //     It is initialized by keyboard using first day of the current
  965. //     selection or if selection is empty the first day of the first
  966. //     visible month is used.
  967. //     Focused item is cleared by mouse or by set selection externally.
  968. // See Also:
  969. //     EnsureVisible, EnsureVisibleSelection
  970. // ---------------------------------------------------------------------
  971. virtual void EnsureVisibleFocus();
  972. // ------------------------------------------------------------------------------
  973. // Summary:
  974. //     This member function sets the user-defined month name.
  975. // Parameters:
  976. //     nMonth :    An int that contains the Month number corresponding to the
  977. //                 month name. i.e. 1 = January, 2 = February, 3 = March, ...
  978. //                 Valid values are from 1 to 12.
  979. // strMonthName :  A CString that contains the New month name.
  980. // Remarks:
  981. //     Use this function to change the shown month name to any preferred
  982. //     or localized values.
  983. // See Also:
  984. //     GetMonthName, SetDayOfWeekName, GetDayOfWeekName
  985. // ------------------------------------------------------------------------------
  986. void SetMonthName(int nMonth, LPCTSTR strMonthName);
  987. // ----------------------------------------------------------------------
  988. // Summary:
  989. //     This member function returns the month name of the given integer
  990. //     value.
  991. // Parameters:
  992. //     nMonth :  Month number. The valid range is 1 <= nMonth >= 12.
  993. // Remarks:
  994. //     Call this member function to retrieve the name of the month which
  995. //     was previously set by SetMonthName function. If month name was not
  996. //     set by SetMonthName function, it will return the default value,
  997. //     which is the default localized month name.
  998. // Returns:
  999. //     If nMonth is a valid integer value, then the function returns the
  1000. //     name of the month. If nMonth is not valid, then the function
  1001. //     returns an empty string.
  1002. // See Also:
  1003. //     SetMonthName, SetDayOfWeekName, GetDayOfWeekName
  1004. // ----------------------------------------------------------------------
  1005. CString GetMonthName(int nMonth) const;
  1006. //-----------------------------------------------------------------------
  1007. // Summary:
  1008. //     This member function sets the user-defined DayOfWeek name.
  1009. // Parameters:
  1010. //     nDayOfWeek       - DayOfWeek number to set new name for.
  1011. //     strDayOfWeekName - New DayOfWeek name.
  1012. // Remarks:
  1013. //     Valid day-of-week range is between 1 and 7, where
  1014. //          1 = Sunday, 2 = Monday, and so on.
  1015. // See Also: GetDayOfWeekName, SetMonthName, GetMonthName
  1016. //-----------------------------------------------------------------------
  1017. void SetDayOfWeekName(int nDayOfWeek, LPCTSTR strDayOfWeekName);
  1018. //-----------------------------------------------------------------------
  1019. // Summary:
  1020. //     This member function returns the DayOfWeek name associated
  1021. //     with the integer value of nDayOfWeek.
  1022. // Parameters:
  1023. //     nDayOfWeek - DayOfWeek number.
  1024. // Remarks:
  1025. //     Valid day-of-week range is between 1 and 7, where
  1026. //          1 = Sunday, 2 = Monday, and so on.
  1027. // Returns:
  1028. //     If nDayOfWeek is a valid integer value, then the function
  1029. //     returns the name of the week associated with the integer value
  1030. //     of nDayOfWeek.  If nDayOfWeek is not a valid integer value, then
  1031. //     the function returns an empty string.
  1032. // See Also: SetDayOfWeekName, SetMonthName, GetMonthName
  1033. //-----------------------------------------------------------------------
  1034. CString GetDayOfWeekName(int nDayOfWeek) const;
  1035. // ----------------------------------------------------------------------
  1036. // Summary:
  1037. //     This member function retrieves date information representing the
  1038. //     upper and lower limits of the date range currently selected by the
  1039. //     user.
  1040. // Parameters:
  1041. //     refMinRange :  A reference to a COleDateTime object containing the
  1042. //                    minimum date allowed.
  1043. //     refMaxRange :  A reference to a COleDateTime object containing the
  1044. //                    maximum date allowed.
  1045. // Remarks:
  1046. //     This member function implements the behavior of the
  1047. //     CMonthCalCtrl::GetSelRange function.
  1048. // Returns:
  1049. //     Nonzero if successful. Otherwise 0.
  1050. // See Also:
  1051. //     SetSelRange, CMonthCalCtrl::GetSelRange
  1052. // ----------------------------------------------------------------------
  1053. virtual BOOL GetSelRange(COleDateTime& refMinRange, COleDateTime& refMaxRange) const;
  1054. //-----------------------------------------------------------------------
  1055. // Summary:
  1056. //     This member function sets the selection for a date picker
  1057. //     control to a given date range.
  1058. // Parameters:
  1059. //     refMinRange - A reference to a COleDateTime object containing the
  1060. //                 date at the lowest end of the range.
  1061. //     refMaxRange - A reference to a COleDateTime object containing the
  1062. //                 date at the highest end of the range.
  1063. // Remarks:
  1064. //     This member function implements the behavior of the
  1065. //     CMonthCalCtrl::SetSelRange function.
  1066. //
  1067. //     Please note that this method doesn't refresh the control, and in
  1068. //     order to update control's picture you'll have to call RedrawControl
  1069. //     method after changing a selection.
  1070. // Returns:
  1071. //     Nonzero if successful. Otherwise 0.
  1072. // See Also: GetSelRange, CMonthCalCtrl::SetSelRange
  1073. //-----------------------------------------------------------------------
  1074. virtual BOOL SetSelRange(const COleDateTime& refMinRange, const COleDateTime& refMaxRange);
  1075. // --------------------------------------------------------------------------
  1076. // Summary:
  1077. //     This member function retrieves the minimum size required to show a
  1078. //     full month in the date picker control or a
  1079. //     specified number of full month items in a date picker control.
  1080. // Parameters:
  1081. //     pRect :  A pointer to a RECT structure that receives the bounding
  1082. //              rectangle information. This parameter must be a valid address
  1083. //              and cannot be NULL.
  1084. //     nRows :  A number of months in a row inside the calculated rectangle.
  1085. //     nCols :  A number of months in a column inside the calculated rectangle.
  1086. // Remarks:
  1087. //     This member function implements the behavior of the
  1088. //     CMonthCalCtrl::GetMinReqRect function.
  1089. //
  1090. //     GetMinReqRect(RECT* pRect, int nRows, int nCols) retrieves the minimum
  1091. //     size required to show a specified number of full month items in
  1092. //     a date picker control.  The functionality implemented by this function is similar to the
  1093. //     CMonthCalCtrl::GetMinReqRect, but instead of calculating a
  1094. //     rectangle size for 1 month only, it can also calculate a rectangle
  1095. //     size for any specified number of month items.
  1096. // Returns:
  1097. //     If successful, this member function returns nonzero and <i>pRect</i>
  1098. //     receives the applicable bounding rectangle information. If
  1099. //     unsuccessful, the member function returns 0.
  1100. // See Also:
  1101. //     CMonthCalCtrl::GetMinReqRect
  1102. // --------------------------------------------------------------------------
  1103. virtual BOOL GetMinReqRect(RECT* pRect) const;
  1104. virtual BOOL GetMinReqRect(RECT* pRect, int nRows, int nCols) const; // <combine CXTPDatePickerControl::GetMinReqRect@RECT*@const>
  1105. // ----------------------------------------------------------------------------
  1106. // Summary:
  1107. //     This member function adjusts the date picker control to the
  1108. //     minimum size required to display one month.
  1109. // Parameters:
  1110. //     bRepaint :  A BOOL that specifies whether the control is to be
  1111. //                 repainted. By default, TRUE. If FALSE, no repainting occurs.
  1112. // Remarks:
  1113. //     Calling SizeMinReq successfully displays the entire date picker
  1114. //     control for one month's calendar.
  1115. // Returns:
  1116. //     Nonzero if the date picker control is sized to its minimum.
  1117. //     Otherwise 0.
  1118. // See Also:
  1119. //     GetMinReqRect, CMonthCalCtrl::SizeMinReq
  1120. // ----------------------------------------------------------------------------
  1121. virtual BOOL SizeMinReq(BOOL bRepaint = TRUE);
  1122. //-----------------------------------------------------------------------
  1123. // Summary:
  1124. //     This member function retrieves the scroll rate for the date
  1125. //     picker control.
  1126. // Remarks:
  1127. //     This member function implements the behavior of the
  1128. //     CMonthCalCtrl::GetMonthDelta function.
  1129. //     The scroll rate is the number of months that the control
  1130. //     moves its display when the user clicks a scroll button once.
  1131. // Returns:
  1132. //     The scroll rate for the date picker control.
  1133. // See Also: SetMonthDelta, CMonthCalCtrl::GetMonthDelta
  1134. //-----------------------------------------------------------------------
  1135. virtual int GetMonthDelta() const;
  1136. // ----------------------------------------------------------------------------
  1137. // Summary:
  1138. //     This member function sets the scroll rate for the date picker
  1139. //     control.
  1140. // Parameters:
  1141. //     iDelta :  The number of months set as the control's scroll rate. If this
  1142. //               value is zero, the month delta is reset to the default, which
  1143. //               is the number of months displayed in the control.
  1144. // Remarks:
  1145. //     This member function implements the behavior of the
  1146. //     CMonthCalCtrl::SetMonthDelta function.
  1147. // See Also:
  1148. //     GetMonthDelta, CMonthCalCtrl::SetMonthDelta
  1149. // ----------------------------------------------------------------------------
  1150. virtual void SetMonthDelta(int iDelta);
  1151. // ----------------------------------------------------------------------
  1152. // Summary:
  1153. //     This member function retrieves the system time as indicated by the
  1154. //     currently-selected date.
  1155. // Parameters:
  1156. //     refDateTime :  A reference to a COleDateTime object. Receives the
  1157. //                    currently selected time.
  1158. // Remarks:
  1159. //     This member function fails if more than 1 date is selected.
  1160. // Returns:
  1161. //     A BOOL that indicates the success of the function.<p/>
  1162. //     TRUE if the function is successfully able to retrieve the system
  1163. //     time.<p/>
  1164. //     FALSE if more than one date is selected.
  1165. // See Also:
  1166. //     SetCurSel, CMonthCalCtrl::GetCurSel
  1167. // ----------------------------------------------------------------------
  1168. virtual BOOL GetCurSel(COleDateTime& refDateTime) const;
  1169. //-----------------------------------------------------------------------
  1170. // Summary:
  1171. //     This member function sets the currently selected date for the
  1172. //     date picker control.
  1173. // Parameters:
  1174. //     refDateTime - A reference to a COleDateTime object, which
  1175. //                   contains a date to select.
  1176. // Remarks:
  1177. //     This member function clears the selection of a date picker
  1178. //     control and selects a specified date.
  1179. // Returns:
  1180. //     Nonzero if successful. Otherwise 0.
  1181. // See Also: GetCurSel, CMonthCalCtrl::GetCurSel
  1182. //-----------------------------------------------------------------------
  1183. virtual BOOL SetCurSel(const COleDateTime& refDateTime);
  1184. // ----------------------------------------------------------------------
  1185. // Summary:
  1186. //     This member function retrieves the current maximum number of days
  1187. //     that can be selected in a date picker control.
  1188. // Remarks:
  1189. //     This member function implements the behavior of the
  1190. //     CMonthCalCtrl::GetMaxSelCount function.
  1191. // Returns:
  1192. //     An integer value that represents the total number of days that can
  1193. //     be selected for the control. XTP_SELECTION_INFINITE if selection
  1194. //     is not bounded.
  1195. // See Also:
  1196. //     SetMaxSelCount, CMonthCalCtrl::GetMaxSelCount, AllowNoncontinuousSelection
  1197. // ----------------------------------------------------------------------
  1198. virtual int GetMaxSelCount() const;
  1199. //-----------------------------------------------------------------------
  1200. // Summary:
  1201. //     This member function sets the maximum number of days that can be
  1202. //     selected in a date picker control.
  1203. // Parameters:
  1204. //     nMax :  The value that is set to represent the maximum number of
  1205. //             selectable days. XTP_SELECTION_INFINITE if selection is not
  1206. //             bounded.
  1207. // Remarks:
  1208. //     This member function implements the behavior of the
  1209. //     CMonthCalCtrl::SetMaxSelCount function.
  1210. // See also:
  1211. //     GetMaxSelCount, AllowNoncontinuousSelection, CMonthCalCtrl::SetMaxSelCount
  1212. //-----------------------------------------------------------------------
  1213. virtual void SetMaxSelCount(int nMax = XTP_SELECTION_INFINITE);
  1214. //-----------------------------------------------------------------------
  1215. // Summary:
  1216. //     This member function sets the flag which shows whether control
  1217. //     allows non-continuous days selection or not.
  1218. // Parameters:
  1219. //     bAllow - TRUE to allow non-continuous days selection (default value),
  1220. //              FALSE to disallow.
  1221. // Remarks:
  1222. //     Allowing continuous days selection means that user will be able
  1223. //     to select only a single days interval between 2 dates, where all
  1224. //     dates will be selected inside.
  1225. //     Non-continuous days selection means that user will be able to
  1226. //     select any specific dates totally up to MaxSelCount count.
  1227. // See Also:
  1228. //     IsAllowNoncontinuousSelection, SetMaxSelCount, GetMaxSelCount
  1229. //-----------------------------------------------------------------------
  1230. virtual void AllowNoncontinuousSelection(BOOL bAllow = TRUE);
  1231. //-----------------------------------------------------------------------
  1232. // Summary:
  1233. //     This member function returns the flag which shows whether control
  1234. //     allows non-continuous days selection or not.
  1235. // Remarks:
  1236. //     Allowing continuous days selection means that user will be able
  1237. //     to select only a single days interval between 2 dates, where all
  1238. //     dates will be selected inside.
  1239. //     Non-continuous days selection means that user will be able to
  1240. //     select any specific dates totally up to MaxSelCount count.
  1241. // Returns:
  1242. //     TRUE when non-continuous days selection is allowed,
  1243. //     FALSE otherwise.
  1244. // See Also:
  1245. //     AllowNoncontinuousSelection, SetMaxSelCount, GetMaxSelCount
  1246. //-----------------------------------------------------------------------
  1247. virtual BOOL IsAllowNoncontinuousSelection();
  1248. //-----------------------------------------------------------------------
  1249. // Summary:
  1250. //     Determines if the multiple selection mode is enabled.
  1251. // Returns:
  1252. //     TRUE if the multiple selection mode is enabled.
  1253. // See Also: SetMultiSelectionMode
  1254. //-----------------------------------------------------------------------
  1255. BOOL IsMultiSelectionMode() const;
  1256. //-----------------------------------------------------------------------
  1257. // Summary:
  1258. //     Enables/disables the multiple selection mode for the control.
  1259. // Parameters:
  1260. //     bMultiSelectionMode - TRUE for enabling, FALSE for disabling.
  1261. // Remarks:
  1262. //     Sets the flag that determines whether the report is in multiple selection mode.
  1263. // See Also: IsMultiSelectionMode
  1264. //-----------------------------------------------------------------------
  1265. void SetMultiSelectionMode(BOOL bMultiSelectionMode);
  1266. //-----------------------------------------------------------------------
  1267. // Summary:
  1268. //     This member function retrieves the date information for the date
  1269. //     specified as "Today" for the date picker control.
  1270. // Parameters:
  1271. //     refDateTime :  A reference to a COleDateTime object indicating the
  1272. //                    current day.
  1273. // Remarks:
  1274. //     This member function implements the behavior of the
  1275. //     CMonthCalCtrl::GetToday function.
  1276. // Returns:
  1277. //     Nonzero if successful. Otherwise 0.
  1278. // See Also:
  1279. //     GetHighlightToday, SetHighlightToday, SetToday,
  1280. //     CMonthCalCtrl::GetToday
  1281. //-----------------------------------------------------------------------
  1282. virtual BOOL GetToday(COleDateTime& refDateTime) const;
  1283. //-----------------------------------------------------------------------
  1284. // Summary:
  1285. //     This member function sets the calendar control to the current day.
  1286. // Parameters:
  1287. //     refDateTime - A reference to a COleDateTime object that
  1288. //                   contains the current date.
  1289. // Remarks:
  1290. //     This member function implements the behavior of the
  1291. //     CMonthCalCtrl::SetToday function.
  1292. // See Also: GetHighlightToday, SetHighlightToday, SetToday, GetToday,
  1293. //           CMonthCalCtrl::SetToday
  1294. //-----------------------------------------------------------------------
  1295. virtual void SetToday(const COleDateTime& refDateTime);
  1296. // --------------------------------------------------------------------------
  1297. // Summary:
  1298. //     This member function retrieves the current minimum and maximum
  1299. //     dates set in a date picker control.
  1300. // Parameters:
  1301. //     pMinRange :  A pointer to a COleDateTime object containing the date at
  1302. //                  the lowest end of the range.
  1303. //     pMaxRange :  A pointer to a COleDateTime object containing the date at
  1304. //                  the highest end of the range.
  1305. // Remarks:
  1306. //     This member function implements the behavior of the
  1307. //     CMonthCalCtrl::GetRange function.
  1308. // Returns:
  1309. //     A DWORD that can be zero (no limits are set) or a combination of
  1310. //     the following values that specify limit information.
  1311. //
  1312. //     * <b>GDTR_MAX</b> - A maximum limit is set for the control.
  1313. //           pMaxRange is valid and contains the applicable date information.
  1314. //     * <b>GDTR_MIN</b> - A minimum limit is set for the control.
  1315. //           pMinRange is valid and contains the applicable date information.
  1316. // Example:
  1317. //     See CMonthCalCtrl::GetRange documentation for the example.
  1318. // See Also:
  1319. //     SetRange, CMonthCalCtrl::GetRange
  1320. // --------------------------------------------------------------------------
  1321. virtual DWORD GetRange(COleDateTime* pMinRange, COleDateTime* pMaxRange) const;
  1322. //-----------------------------------------------------------------------
  1323. // Summary:
  1324. //     This member function sets the minimum and maximum allowable
  1325. //     dates for a date picker control.
  1326. // Parameters:
  1327. //     pMinRange - A pointer to a COleDateTime object containing the
  1328. //                 date at the lowest end of the range.
  1329. //     pMaxRange - A pointer to a COleDateTime object containing the
  1330. //                 date at the highest end of the range.
  1331. // Remarks:
  1332. //     This member function implements the behavior of the
  1333. //     CMonthCalCtrl::GetRange function.
  1334. // Returns:
  1335. //     Nonzero if successful. Otherwise 0.
  1336. // See Also: GetRange, CMonthCalCtrl::SetRange
  1337. //-----------------------------------------------------------------------
  1338. virtual BOOL SetRange(const COleDateTime* pMinRange, const COleDateTime* pMaxRange);
  1339. //-----------------------------------------------------------------------
  1340. // Summary:
  1341. //     This member function retrieves date information representing
  1342. //     the high and low limits of a date picker control's display.
  1343. // Parameters:
  1344. //     refMinRange - A reference to a COleDateTime object containing
  1345. //                   the minimum date allowed.
  1346. //     refMaxRange - A reference to a COleDateTime object containing
  1347. //                   the maximum date allowed.
  1348. //     dwFlags     - Value specifying the scope of the range limits
  1349. //                   to be retrieved. This value must be one of the
  1350. //                   following
  1351. //
  1352. //                      * <b>GMR_DAYSTATE</b> - Include preceding and
  1353. //                      trailing months of visible range that are only
  1354. //                      partially displayed.
  1355. //                      * <b>GMR_VISIBLE</b> - Include only those months
  1356. //                      that are entirely displayed.
  1357. //
  1358. // Remarks:
  1359. //     This member function implements the behavior of the
  1360. //     CMonthCalCtrl::GetMonthRange function.
  1361. // Returns:
  1362. //     An integer that represents the range, in months, spanned by the
  1363. //     two limits indicated by refMinRange and refMaxRange.
  1364. // See Also: CMonthCalCtrl::GetMonthRange
  1365. //-----------------------------------------------------------------------
  1366. virtual int GetMonthRange(COleDateTime& refMinRange, COleDateTime& refMaxRange, DWORD dwFlags) const;
  1367. //-----------------------------------------------------------------------
  1368. // Summary:
  1369. //     This member function retrieves first and last displayed days dates.
  1370. // Parameters:
  1371. //     refFirstVisibleDay   - A first displayed day date.
  1372. //     refLastVisibleDay    - A last displayed day date.
  1373. // Returns:
  1374. //     TRUE if succeeded, otherwise FALSE;
  1375. // See Also: GetMonthRange
  1376. //-----------------------------------------------------------------------
  1377. virtual BOOL GetVisibleRange(COleDateTime& refFirstVisibleDay,
  1378.  COleDateTime& refLastVisibleDay) const;
  1379. //-----------------------------------------------------------------------
  1380. // Summary:
  1381. //     This member function returns the number of CXTPDatePickerButton
  1382. //     items shown on the control.
  1383. // Remarks:
  1384. //     Call this member function to determine the number of buttons
  1385. //     currently used on the control.
  1386. // Returns:
  1387. //     A number of CXTPDatePickerButton items shown on the control.
  1388. // See Also: GetButton, AddButton
  1389. //-----------------------------------------------------------------------
  1390. virtual int GetButtonCount() const;
  1391. // ----------------------------------------------------------------------
  1392. // Summary:
  1393. //     This member function returns a pointer to the CXTPDatePickerButton
  1394. //     object using its numeric index.
  1395. // Parameters:
  1396. //     nIndex :  The index of the CXTPDatePickerButton to retrieve.
  1397. // Remarks:
  1398. //     Call this member function to retrieve a pointer to the button
  1399. //     object using its numeric index.
  1400. // Returns:
  1401. //     A pointer to the CXTPDatePickerButton object.
  1402. // See Also:
  1403. //     GetButtonCount, AddButton
  1404. // ----------------------------------------------------------------------
  1405. virtual CXTPDatePickerButton* GetButton(int nIndex) const;
  1406. // ---------------------------------------------------------------------
  1407. // Summary:
  1408. //     This member function adds one more buttons to the control.
  1409. // Parameters:
  1410. //     nID :  ID of the string resource item. This is the caption of the
  1411. //            new button.
  1412. // Remarks:
  1413. //     Call this member function to add one more CXTPDatePickerButton
  1414. //     objects to the control's collection.
  1415. // See Also:
  1416. //     GetButton, GetButtonCount
  1417. // ---------------------------------------------------------------------
  1418. virtual void AddButton(UINT nID);
  1419. // -------------------------------------------------------------------------
  1420. // Summary:
  1421. //     This member function obtains a notification connection object
  1422. //     pointer.
  1423. // Remarks:
  1424. //     Used to subscribe (Advice) for notifications events from the control.
  1425. // Returns:
  1426. //     A CXTPNotifyConnection pointer to the connection object.
  1427. // See Also:
  1428. //     CXTPNotifyConnectionoverview, IXTPNotificationSink overview
  1429. // -------------------------------------------------------------------------
  1430. virtual CXTPNotifyConnection* GetConnection();
  1431. // -----------------------------------------------------------------------
  1432. // Summary:
  1433. //     Returns a collection of the days, selected in the date picker.
  1434. // Remarks:
  1435. //     Call this member function to return a CXTPDatePickerDaysCollection
  1436. //     collection of the days, selected in the date picker control.
  1437. // Returns:
  1438. //     Pointer to the collection of the selected days.
  1439. //     If you want to use pointer to this collection lately in your code,
  1440. //     you should increment and decrement references to the object manually.
  1441. // See Also:
  1442. //     m_pSelectedDays
  1443. // -----------------------------------------------------------------------
  1444. virtual CXTPDatePickerDaysCollection* GetSelectedDays();
  1445. // ----------------------------------------------------------------------
  1446. // Summary:
  1447. //     This member function adjusts the layout of all sub-items depending
  1448. //     on the current window client size.
  1449. // Parameters:
  1450. //     rcClient :  A CRect that contains the coordinates of the control.
  1451. // Remarks:
  1452. //     AdjustLayout depends on the AutoSize flag (changing control size
  1453. //     or item fonts correspondingly).
  1454. // See Also:
  1455. //     AdjustLayout(CRect rcClient), IsAutoSize
  1456. // ----------------------------------------------------------------------
  1457. virtual void AdjustLayout();
  1458. //-----------------------------------------------------------------------
  1459. // Summary:
  1460. //     This member function is used to obtain current paint theme.
  1461. // Returns:
  1462. //     A paint theme ID from enum XTPCalendarTheme.
  1463. //-----------------------------------------------------------------------
  1464. virtual XTPCalendarTheme GetPaintTheme() const;
  1465. //-----------------------------------------------------------------------
  1466. // Summary:
  1467. //     This member function is used to set current paint theme.
  1468. // Parameters:
  1469. //     ePaintTheme - A paint theme ID from enum XTPCalendarTheme.
  1470. //-----------------------------------------------------------------------
  1471. virtual void SetPaintTheme(XTPCalendarTheme ePaintTheme);
  1472. // -----------------------------------------------------------------
  1473. // Summary:
  1474. //     This member function registers the window class if it has not
  1475. //     already been registered.
  1476. // Parameters:
  1477. //     hInstance - Instance of resource where control is located
  1478. // Returns:
  1479. //     A boolean value that specifies if the window is successfully
  1480. //     registered.<p/>
  1481. //     TRUE if the window class is successfully registered.<p/>
  1482. //     Otherwise FALSE.
  1483. // -----------------------------------------------------------------
  1484. virtual BOOL RegisterWindowClass(HINSTANCE hInstance = NULL);
  1485. protected:
  1486. //-----------------------------------------------------------------------
  1487. // Summary:
  1488. //     This member function sends a notification to all control's
  1489. //     event subscribers.
  1490. // Parameters:
  1491. //     EventCode - The specific code of the event.
  1492. //     wParam   - First custom parameter. Depends on the event type.
  1493. //                See specific event description for details.
  1494. //     lParam   - Second custom parameter. Depends on the event type.
  1495. //                See specific event description for details.
  1496. // Remarks:
  1497. //     This member function is called internally from inside the
  1498. //     control when a notification is sent to all notification
  1499. //     listeners.
  1500. // See Also: XTP_NOTIFICATIONCODE, GetConnection
  1501. //-----------------------------------------------------------------------
  1502. virtual void SendNotification(XTP_NOTIFY_CODE  EventCode, WPARAM wParam = 0, LPARAM lParam = 0);
  1503. protected:
  1504. // ----------------------------------------------------------------------
  1505. // Summary:
  1506. //     This member function performs control population, creating the
  1507. //     view from the data.
  1508. // Remarks:
  1509. //     Creates a new month collection for the control, populating it with
  1510. //     the new objects created according to the stored properties and
  1511. //     settings. Call this member function if the number of months to
  1512. //     show needs adjusting.
  1513. // See Also:
  1514. //     ClearMonths
  1515. // ----------------------------------------------------------------------
  1516. virtual void Populate();
  1517. //-----------------------------------------------------------------------
  1518. // Summary:
  1519. //     This member function redraws the control windows.
  1520. // Parameters:
  1521. //     bUpdateNow - if TRUE the CWnd::UpdateWindow() will be called,
  1522. //                   otherwise only CWnd::Invalidate() will be called.
  1523. // Remarks:
  1524. //     Call this member function to redraw all control windows
  1525. //     according to the stored parameter values.
  1526. // See Also:
  1527. //     RedrawControl
  1528. //-----------------------------------------------------------------------
  1529. virtual void _RedrawControl(BOOL bUpdateNow);
  1530. // --------------------------------------------------------------
  1531. // Summary:
  1532. //     This member function is used to cleanup the month's array.
  1533. // See Also:
  1534. //     Populate
  1535. // --------------------------------------------------------------
  1536. virtual void ClearMonths();
  1537. //-----------------------------------------------------------------------
  1538. // Summary:
  1539. //     This member function is used to perform all drawing logic.
  1540. // Parameters:
  1541. //     pDC - Pointer to a valid device context.
  1542. // See Also: DrawButtons
  1543. //-----------------------------------------------------------------------
  1544. virtual void OnDraw(CDC* pDC);
  1545. //-----------------------------------------------------------------------
  1546. // Summary:
  1547. //     Call this member function to draw the calendar's buttons.
  1548. // Parameters:
  1549. //     pDC - Pointer to a valid device context.
  1550. // See Also: OnDraw
  1551. //-----------------------------------------------------------------------
  1552. virtual void DrawButtons(CDC* pDC);
  1553. virtual void AdjustLayout(CRect rcClient);  // <combine CXTPDatePickerControl::AdjustLayout>
  1554. // -----------------------------------------------------------
  1555. // Summary:
  1556. //     This member function calculates the size of the button.
  1557. // Returns:
  1558. //     CSize object with button size.
  1559. // See Also:
  1560. //     SetButtonRect, CalcButtonBandRect
  1561. // -----------------------------------------------------------
  1562. virtual CSize CalcButtonSize() const;
  1563. // --------------------------------------------------------------
  1564. // Summary:
  1565. //     Call this member function to calculate and set the buttons
  1566. //     bounding rectangle.
  1567. // See Also:
  1568. //     CalcButtonSize, CalcButtonBandRect
  1569. // --------------------------------------------------------------
  1570. virtual void SetButtonRect();
  1571. // -------------------------------------------------------------------
  1572. // Summary:
  1573. //     Call this member function to calculate and set the buttons band
  1574. //     rectangle.
  1575. // Remarks:
  1576. //     The band rectangle is a box that is drawn around the button to
  1577. //     highlight the button.
  1578. // See Also:
  1579. //     SetButtonRect, CalcButtonSize
  1580. // -------------------------------------------------------------------
  1581. virtual void CalcButtonBandRect();
  1582. // ------------------------------------------------------------------
  1583. // Summary:
  1584. //     This member function is used to implement the button behavior.
  1585. // Parameters:
  1586. //     point :  Current mouse position.
  1587. // Remarks:
  1588. //     This member function is called from the following member
  1589. //     functions: OnLButtonDown, OnLButtonDblClk, OnLButtonUp,
  1590. //     OnMouseLeave, and OnMouseMove.
  1591. // ------------------------------------------------------------------
  1592. virtual void ProcessButtons(CPoint point);
  1593. //-----------------------------------------------------------------------
  1594. // Summary:
  1595. //     This member function shows a CXTPDatePickerList control at the
  1596. //     coordinates specified by rcHeader.
  1597. // Parameters:
  1598. //     rcHeader - The coordinates of the list window.
  1599. //     dtMonth  - The month date to start from.
  1600. // Remarks:
  1601. //     Call this member function to force showing of the months
  1602. //     pop-up list control.
  1603. // See Also: CXTPDatePickerList overview
  1604. //-----------------------------------------------------------------------
  1605. virtual void ShowListHeader(CRect rcHeader, COleDateTime dtMonth);
  1606. // ----------------------------------------------------------------------
  1607. // Summary:
  1608. //     This member function initializes the month and day names depending
  1609. //     on localization.
  1610. // Remarks:
  1611. //     This is an internal initialization function that reads the system
  1612. //     user locale defaults and fills the month and day of the week
  1613. //     arrays with the locale defaults.
  1614. // See Also:
  1615. //     GetMonthName, SetMonthName, GetDayOfWeekName, SetDayOfWeekName
  1616. // ----------------------------------------------------------------------
  1617. virtual void InitNames();
  1618. // -------------------------------------------------------------------------
  1619. // Summary:
  1620. //     This function shifts the specified date for the specified number
  1621. //     of months.
  1622. // Parameters:
  1623. //     refDate :      Reference to the COleDateTime object to shift the date
  1624. //                    on.
  1625. //     nMonthCount :  Number of months used for shifting. Can be both positive
  1626. //                    and negative numbers.
  1627. // Remarks:
  1628. //     This is a utility function that is used to shift the specified
  1629. //     date for a specific number of months.
  1630. // Returns:
  1631. //     A BOOL value that specifies if the function is successful.<p/>
  1632. //     Return zero if the value of this COleDateTime object is set
  1633. //     successfully.<p/>
  1634. // Otherwise return 1.
  1635. // See Also:
  1636. //     COleDateTime overview
  1637. // -------------------------------------------------------------------------
  1638. static BOOL ShiftDate(COleDateTime &refDate, int nMonthCount);
  1639. //-----------------------------------------------------------------------
  1640. // Summary:
  1641. //     This member function sets new dimensions for the month grid.
  1642. // Parameters:
  1643. //     rcGrid - New rectangle coordinates of the Grid area.
  1644. // Remarks:
  1645. //     Calculates and sets Grid dimensions (rows and columns count) for
  1646. //     the grid size.
  1647. // See Also: AdjustLayout
  1648. //-----------------------------------------------------------------------
  1649. virtual CSize SetGridDimentions(CRect rcGrid);
  1650. // ------------------------------------------------------------------
  1651. // Summary:
  1652. //     This member function creates the internal month array.
  1653. // Remarks:
  1654. //     Fills the internal month array with the new DatPickerItemMonth
  1655. //     objects, using the values of the initialized data members.
  1656. // See Also:
  1657. //     Populate
  1658. // ------------------------------------------------------------------
  1659. virtual void CreateMonthArray();
  1660. // ---------------------------------------------------------------------
  1661. // Summary:
  1662. //     This member function is called by the framework to allow other
  1663. //     necessary sub-classing to occur before the window is sub-classed.
  1664. // Remarks:
  1665. //     This member function is used to call some internal initialization
  1666. //     functions like AdjustLayout() immediately after instantiating the
  1667. //     DatePickerControl object.
  1668. // See Also:
  1669. //     Create, CXTPDatePickerControl::CXTPDatePickerControl
  1670. // ---------------------------------------------------------------------
  1671. virtual void PreSubclassWindow();
  1672. // ----------------------------------------------------------------------
  1673. // Summary:
  1674. //     This member function is used to process the control's button
  1675. //     clicks.
  1676. // Parameters:
  1677. //     nID :  Date picker button ID (could be XTP_IDS_DATEPICKER_TODAY
  1678. //            or XTP_IDS_DATEPICKER_NONE)
  1679. // Remarks:
  1680. //     This member function performs internal button click processing and
  1681. //     sends a XTP_NC_DATEPICKER_BUTTON_CLICK notification to the parent
  1682. //     window.
  1683. // See Also:
  1684. //     SendMessageToParent
  1685. // ----------------------------------------------------------------------
  1686. virtual void OnButtonClick(UINT nID);
  1687. protected:
  1688. DatePickerMouseMode m_mouseMode;    // This member variable is used to specify the current Mouse operating mode.
  1689. int m_nLockUpdateCount;         // This member variable is used as a counter that is used to count
  1690.                                 // the update locks. An image will be redrawn only when the lock
  1691.                                 // counter is equal to zero.
  1692. int m_nTimerID;                 // This member variable is used to specify the control timer ID.
  1693. CRect m_rcControl;  // This data member is used to store the control drawing coordinates.
  1694. CXTPDatePickerPaintManager* m_pPaintManager;    // This member variable is a pointer to the paint manager.
  1695. BOOL m_bAutoSize;   // This member variable is used as the AutoSize flag.
  1696. BOOL m_bIsModal;    // This member variable is used to specify if the control is used as
  1697.                     // a pop-up window. TRUE when the control is used as a pop-up. FALSE
  1698.                     // otherwise.
  1699. BOOL m_bChanged;    // This member variable is used to determine if the control requires
  1700.                     // redrawing.
  1701. CBitmap m_bmpCache; // This member variable is a cached window bitmap.
  1702. int m_nRows;        // This member variable is used to specify the number of rows in the
  1703.                     // column month's grid.
  1704. int m_nColumns;     // This member variable is used to specify the number of columns in
  1705.                     // the column month's grid.
  1706. CXTPNotifyConnection* m_pConnect; // This member variable is a connection object that is used to send
  1707.                                   // notifications.
  1708. COleDateTime m_dtMinRange;      // This member variable specifies the minimum allowable date for a
  1709.                                 // date picker control.
  1710. COleDateTime m_dtMaxRange;      // This member variable specifies the maximum allowable date for a
  1711.                                 // date picker control.
  1712. COleDateTime m_dtToday;         // This member variable is used to specify the "Today" date for a
  1713.                                 // date picker control.
  1714. COleDateTime m_dtFirstMonth;    // This member variable is used to specify the first month in the
  1715.                                 // grid.
  1716. int m_nFirstDayOfWeek;          // This member variable is used to specify the first day of the week
  1717.                                 // to display (1-Sunday, 2-Monday ... etc).
  1718. int m_nFirstWeekOfYearDays;     // This member variable is used to specify the number of days of
  1719.                                 // the new year in the first week of this year.
  1720. PFNITEMMETRICS m_pfnCallback;   // This member variable is a pointer to the user's IsSpecialDay
  1721.                                 // function.
  1722. void* m_pCallbackParam;         // This member variable is a pointer to the user's additional
  1723.                                 // parameter for the callback function.
  1724. CArray<CXTPDatePickerItemMonth*, CXTPDatePickerItemMonth*> m_arrMonths; // This member variable is an internal storage for the month items.
  1725. CXTPDatePickerDaysCollection* m_pSelectedDays;  // This member variable is a collection of selected days.
  1726. BOOL m_bHighlightToday;     // This member variable is used as a flag to determine if the "Today"
  1727.                             // date is highlighted.
  1728. BOOL m_bShowWeekNumbers;    // This member variable is a flag that determines if the "week
  1729.                             // numbers" are displayed.
  1730. BOOL m_bShowNonMonthDays;   // This member variable is a flag that determines if the "non month
  1731.                             // days" are displayed.
  1732. XTPDatePickerBorderStyle m_borderStyle;   // This member variable is a flag that determines if the control
  1733.                                           // displays a 3D border.
  1734. int m_nMaxSelectionDays;    // This member variable is used to specify the maximum number of
  1735.                             // selected days.
  1736. int m_nMonthDelta;          // This member variable is used to specify the number of months set
  1737.                             // as the control's scroll rate. If this value is zero, then the
  1738.                             // month delta is reset to the default rate, which is the number of
  1739.                             // months displayed in the control.
  1740. COleDateTime m_dtFirstClicked;  // This member variable is used to specify the day that was clicked
  1741.                                 // before starting the mouse selection.
  1742. COleDateTime m_dtLastClicked;   // This member variable is used to specify the day that was clicked
  1743.                                 // last in the mouse selection.
  1744. BOOL m_bSelectWeek;         // TRUE when user is started selecting the whole week.
  1745. COleDateTime m_dtFocused;   // This member variable is used to specify the focused day. Used only for keyboard navigation and selecting.
  1746. COleDateTime m_dtFSelBase;  // This member variable is used to specify start day of the continuous selection. Used only for keyboard navigation and selecting.
  1747. CXTPDatePickerList* m_pListControl; // This member variable is used to specify the "header month list"
  1748.                                     // pop-up control.
  1749. CString* m_arMonthNames;    // This member variable contains the localized month names values.
  1750. CString* m_arDayOfWeekNames;// This member variable contains the day abbreviation for drawing in
  1751.                             // the month header.
  1752. CRect m_rcGrid;             // Months grid rect.
  1753. CXTPDatePickerButtons m_arrButtons; // This member variable is an array of control buttons.
  1754. BOOL m_bAllowNoncontinuousSelection;  // TRUE to allow Noncontinuous selection
  1755. BOOL m_bMultiSelectionMode;           // TRUE if multiselection mode enabled (i.e. VK_CTRL is always on).
  1756. CXTPDatePickerButton* m_pButtonCaptured;  // Pointer to a date picker button
  1757. BOOL m_bRightToLeft;            // TRUE to display calendar components in Right-To-Left (RTL) format
  1758. //{{AFX_CODEJOCK_PRIVATE
  1759. LCID    m_lcidActiveLocale;
  1760. enum XTPEnumMovmentStep
  1761. {
  1762. stepDay     = 1,
  1763. stepWeek    = 2,
  1764. stepMonth   = 3,
  1765. stepYear    = 4,
  1766. stepWeekBE  = 10,
  1767. stepMonthBE = 11
  1768. };
  1769. enum XTPEnumMovmentDirection
  1770. {
  1771. dirNext = 1,
  1772. dirPrev = -1
  1773. };
  1774. class CXTPSelectionHelper
  1775. {
  1776. public:
  1777. CXTPSelectionHelper(CXTPDatePickerControl* pControl);
  1778. void RemoveFocus();
  1779. void MoveFocus(int eStep, int eDirection, BOOL bContinuouse, BOOL bSaveSel);
  1780. void SelUnselFocus();
  1781. void _TmpSaveFocus();
  1782. void _TmpRestoreFocus();
  1783. protected:
  1784. void InitFocusIfNeed();
  1785. void _MoveFocus(int eStep, int eDirection);
  1786. CXTPDatePickerControl* m_pDP;
  1787. COleDateTime m_dtFocusedTmp;
  1788. COleDateTime m_dtFSelBaseTmp;
  1789. };
  1790. friend class CXTPSelectionHelper;
  1791. //}}AFX_CODEJOCK_PRIVATE
  1792. protected:
  1793. //{{AFX_CODEJOCK_PRIVATE
  1794. // AFX_MSG(CXTPDatePickerControl)
  1795. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  1796. afx_msg int OnCreate(LPCREATESTRUCT lp);
  1797. afx_msg void OnPaint();
  1798. afx_msg LRESULT OnPrintClient(WPARAM wParam, LPARAM /*lParam*/);
  1799. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  1800. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  1801. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  1802. afx_msg void OnCaptureChanged(CWnd* pWnd);
  1803. afx_msg void OnCancelMode();
  1804. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  1805. afx_msg void OnSize(UINT nType, int cx, int cy);
  1806. afx_msg void OnTimeChange();
  1807. afx_msg void OnTimer(UINT_PTR nIDEvent);
  1808. afx_msg void OnSysColorChange();
  1809. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  1810. afx_msg void OnMouseLeave();
  1811. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  1812. afx_msg void OnSetFocus(CWnd* pOldWnd);
  1813. afx_msg void OnKillFocus (CWnd* pNewWnd);
  1814. afx_msg UINT OnGetDlgCode();
  1815. afx_msg void OnDestroy();
  1816. afx_msg void OnEnable(BOOL bEnable);
  1817. //}}AFX_MSG
  1818. virtual void OnFinalRelease();
  1819. DECLARE_MESSAGE_MAP()
  1820. //}}AFX_CODEJOCK_PRIVATE
  1821. private:
  1822. //{{AFX_CODEJOCK_PRIVATE
  1823. virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  1824. virtual void _EndModalIfNeed();
  1825. //}}AFX_CODEJOCK_PRIVATE
  1826. public:
  1827. BOOL m_bDeleteOnFinalRelease;   // Delete self OnFinalRelease() call.
  1828. };
  1829. /////////////////////////////////////////////////////////////////////////////
  1830. AFX_INLINE CXTPDatePickerPaintManager* CXTPDatePickerControl::GetPaintManager() {
  1831. return m_pPaintManager;
  1832. }
  1833. AFX_INLINE BOOL CXTPDatePickerControl::IsModal() const {
  1834. return m_bIsModal;
  1835. }
  1836. AFX_INLINE BOOL CXTPDatePickerControl::IsAutoSize() {
  1837. return m_bAutoSize;
  1838. }
  1839. AFX_INLINE void CXTPDatePickerControl::SetCallbackDayMetrics(PFNITEMMETRICS pFunc, void* pParam) {
  1840. m_pfnCallback = pFunc;
  1841. m_pCallbackParam = pParam;
  1842. }
  1843. AFX_INLINE PFNITEMMETRICS CXTPDatePickerControl::GetCallbackDayMetrics() {
  1844. return m_pfnCallback;
  1845. }
  1846. AFX_INLINE void CXTPDatePickerControl::SetFirstDayOfWeek(int nDay) {
  1847. ASSERT(nDay >= 1 && nDay <= 7);
  1848. if (nDay >= 1 && nDay <= 7 && nDay != m_nFirstDayOfWeek)
  1849. {
  1850. m_nFirstDayOfWeek = nDay;
  1851. Populate();
  1852. }
  1853. }
  1854. AFX_INLINE int CXTPDatePickerControl::GetFirstDayOfWeek() {
  1855. return m_nFirstDayOfWeek;
  1856. }
  1857. AFX_INLINE void CXTPDatePickerControl::SetFirstWeekOfYearDays(int nDays) {
  1858. ASSERT(nDays >= 1 && nDays <= 7);
  1859. if (nDays >= 1 && nDays <= 7 && nDays != m_nFirstWeekOfYearDays)
  1860. {
  1861. m_nFirstWeekOfYearDays = nDays;
  1862. RedrawControl();
  1863. }
  1864. }
  1865. AFX_INLINE int CXTPDatePickerControl::GetFirstWeekOfYearDays() {
  1866. return m_nFirstWeekOfYearDays;
  1867. }
  1868. AFX_INLINE BOOL CXTPDatePickerControl::GetHighlightToday() {
  1869. return m_bHighlightToday;
  1870. }
  1871. AFX_INLINE BOOL CXTPDatePickerControl::GetShowWeekNumbers() {
  1872. return m_bShowWeekNumbers;
  1873. }
  1874. AFX_INLINE int CXTPDatePickerControl::GetRows() {
  1875. return m_nRows;
  1876. }
  1877. AFX_INLINE int CXTPDatePickerControl::GetCols() {
  1878. return m_nColumns;
  1879. }
  1880. AFX_INLINE void CXTPDatePickerControl::SetMonthName(int nMonth, LPCTSTR strMonthName) {
  1881. ASSERT(nMonth >= 1 && nMonth <= 12);
  1882. m_arMonthNames[nMonth - 1] = strMonthName;
  1883. }
  1884. AFX_INLINE CString CXTPDatePickerControl::GetMonthName(int nMonth) const {
  1885. return nMonth >= 1 && nMonth <= 12 ? m_arMonthNames[nMonth - 1] : _T("");
  1886. }
  1887. AFX_INLINE void CXTPDatePickerControl::SetDayOfWeekName(int nDayOfWeek, LPCTSTR strDayOfWeekName) {
  1888. ASSERT(nDayOfWeek >= 1 && nDayOfWeek <= 7);
  1889. m_arDayOfWeekNames[nDayOfWeek - 1] = strDayOfWeekName;
  1890. }
  1891. AFX_INLINE CString CXTPDatePickerControl::GetDayOfWeekName(int nDayOfWeek) const {
  1892. return nDayOfWeek >= 1 && nDayOfWeek <= 7 ? m_arDayOfWeekNames[nDayOfWeek - 1] : _T("");
  1893. }
  1894. AFX_INLINE BOOL CXTPDatePickerControl::GetShowNonMonthDays() {
  1895. return m_bShowNonMonthDays;
  1896. }
  1897. AFX_INLINE XTPDatePickerBorderStyle CXTPDatePickerControl::GetBorderStyle() const{
  1898. return m_borderStyle;
  1899. }
  1900. AFX_INLINE int CXTPDatePickerControl::GetMaxSelCount() const {
  1901. return m_nMaxSelectionDays;
  1902. }
  1903. AFX_INLINE int CXTPDatePickerControl::GetMonthDelta() const {
  1904. return m_nMonthDelta ? m_nMonthDelta : 1;
  1905. }
  1906. AFX_INLINE void CXTPDatePickerControl::SetMonthDelta(int iDelta) {
  1907. m_nMonthDelta = iDelta;
  1908. }
  1909. AFX_INLINE BOOL CXTPDatePickerControl::GetToday(COleDateTime& refDateTime) const {
  1910. refDateTime = m_dtToday;
  1911. return TRUE;
  1912. }
  1913. AFX_INLINE int CXTPDatePickerControl::GetButtonCount() const{
  1914. return (int)m_arrButtons.GetSize();
  1915. }
  1916. AFX_INLINE CXTPDatePickerButton* CXTPDatePickerControl::GetButton(int nIndex) const {
  1917. return m_arrButtons[nIndex];
  1918. }
  1919. AFX_INLINE CXTPNotifyConnection* CXTPDatePickerControl::GetConnection() {
  1920. return m_pConnect;
  1921. }
  1922. AFX_INLINE void CXTPDatePickerControl::SendNotification(XTP_NOTIFY_CODE EventCode, WPARAM wParam , LPARAM lParam) {
  1923. m_pConnect->SendEvent(EventCode, wParam, lParam);
  1924. }
  1925. AFX_INLINE BOOL CXTPDatePickerControl::IsAllowNoncontinuousSelection() {
  1926. return m_bAllowNoncontinuousSelection;
  1927. }
  1928. AFX_INLINE CXTPDatePickerDaysCollection* CXTPDatePickerControl::GetSelectedDays() {
  1929. return m_pSelectedDays;
  1930. }
  1931. AFX_INLINE void CXTPDatePickerControl::AdjustLayout() {
  1932. InitNames();
  1933. AdjustLayout(m_rcControl);
  1934. }
  1935. AFX_INLINE BOOL CXTPDatePickerControl::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
  1936. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  1937. }
  1938. AFX_INLINE BOOL CXTPDatePickerControl::IsMultiSelectionMode() const {
  1939. return m_bMultiSelectionMode;
  1940. }
  1941. AFX_INLINE void CXTPDatePickerControl::SetMultiSelectionMode(BOOL bMultiSelectionMode) {
  1942. m_bMultiSelectionMode = bMultiSelectionMode;
  1943. }
  1944. #endif // !defined(_XTPDATEPICKERCONTROL_H__)