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

对话框与窗口

开发平台:

Visual C++

  1. // DatePickerCombo.cpp : implementation file
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO 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. #include "stdafx.h"
  21. #include "DatePickerCombo.h"
  22. #ifdef _DEBUG
  23. #define new DEBUG_NEW
  24. #undef THIS_FILE
  25. static char THIS_FILE[] = __FILE__;
  26. #endif
  27. /////////////////////////////////////////////////////////////////////////////
  28. // CDatePickerCombo
  29. CDatePickerCombo::CDatePickerCombo()
  30. {
  31. }
  32. CDatePickerCombo::~CDatePickerCombo()
  33. {
  34. }
  35. BEGIN_MESSAGE_MAP(CDatePickerCombo, CComboBox)
  36. //{{AFX_MSG_MAP(CDatePickerCombo)
  37. ON_CONTROL_REFLECT(CBN_DROPDOWN, OnDropDown)
  38. //}}AFX_MSG_MAP
  39. ON_MESSAGE(WM_CTLCOLORLISTBOX, OnCtlColorListBox)
  40. END_MESSAGE_MAP()
  41. /////////////////////////////////////////////////////////////////////////////
  42. // CDatePickerCombo message handlers
  43. //////////////////////////////////////////////////////////////////////////
  44. // Process combobox DropDown notification:
  45. // Show DatePicker and format results.
  46. //
  47. void CDatePickerCombo::OnDropDown() 
  48. {
  49. // Identify size and coordinates of the popup DatePicker window
  50. CXTPWindowRect rcPopup(this);
  51. CXTPDatePickerControl wndDatePicker;
  52. // Ask DatePicker control about how much space we'd need 
  53. // to show one full month item.
  54. CRect rc;
  55. wndDatePicker.GetMinReqRect(&rc);
  56. // Make small size correction for pretty result
  57. rc.InflateRect(0 ,0, 4, 4);
  58. // Shift the prepared rectangle near to the ComboBox
  59. rc.OffsetRect(rcPopup.right - rc.Width(), rcPopup.bottom);
  60. // Enable some visual effects
  61. wndDatePicker.SetButtonsVisible(TRUE, FALSE);
  62. wndDatePicker.SetShowWeekNumbers(TRUE);
  63. wndDatePicker.SetBorderStyle(xtpDatePickerBorderOffice);
  64. CString strPopup;
  65. // Run DatePicker on the prepared rectangle in the Modal mode.
  66. if (wndDatePicker.GoModal(rc, this))
  67. {
  68. COleDateTime dtFrom;
  69. COleDateTime dtTo;
  70. // Retrieve the selection result from the DatePicker
  71. if (wndDatePicker.GetSelRange(dtFrom, dtTo))
  72. {
  73. if (dtFrom == dtTo)
  74. {
  75. // When only 1 day has been selected, format string to show
  76. // it in the following way
  77. strPopup.Format(_T("%d.%d.%d"),
  78. dtFrom.GetYear(), dtFrom.GetMonth(), dtFrom.GetDay());
  79. } else
  80. {
  81. // When a days range has been selected, format string to show
  82. // it in the following way
  83. strPopup.Format(_T("%d.%d.%d - %d.%d.%d"), 
  84. dtFrom.GetYear(), dtFrom.GetMonth(), dtFrom.GetDay(), 
  85. dtTo.GetYear(), dtTo.GetMonth(), dtTo.GetDay());
  86. }
  87. }
  88. else
  89. {
  90. // GetSelRange returned not TRUE, so there were no selection made
  91. strPopup.Format(_T("Nothing selected"));
  92. }
  93. }
  94. else
  95. {
  96. // Exception case -- GoModal returned FALSE
  97. strPopup.Format(_T("Error Popup wnd!"));
  98. }
  99. // Show retrieved result inside the ComboBox
  100. SetWindowText(strPopup);
  101. SetEditSel(0, -1);
  102. // Hide the list box part of the ComboBox
  103. PostMessage(CB_SHOWDROPDOWN, FALSE);
  104. //ShowDropDown(FALSE);
  105. }
  106. LRESULT CDatePickerCombo::OnCtlColorListBox(WPARAM wParam, LPARAM lParam) 
  107. {
  108. HWND hWnd = (HWND)lParam;
  109. if (hWnd != 0 && hWnd != m_hWnd) 
  110. {
  111. ::ShowWindow(hWnd , SW_HIDE);
  112. }
  113.     return DefWindowProc(WM_CTLCOLORLISTBOX, wParam, lParam);
  114. }