DragonNest/Third/XTToolkitPro/Samples/Calendar/DatePickerDemo/DatePickerCombo.cpp
2024-12-19 09:48:26 +08:00

136 lines
No EOL
3.6 KiB
C++

// DatePickerCombo.cpp : implementation file
//
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
// (c)1998-2008 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "DatePickerCombo.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDatePickerCombo
CDatePickerCombo::CDatePickerCombo()
{
}
CDatePickerCombo::~CDatePickerCombo()
{
}
BEGIN_MESSAGE_MAP(CDatePickerCombo, CComboBox)
//{{AFX_MSG_MAP(CDatePickerCombo)
ON_CONTROL_REFLECT(CBN_DROPDOWN, OnDropDown)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_CTLCOLORLISTBOX, OnCtlColorListBox)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDatePickerCombo message handlers
//////////////////////////////////////////////////////////////////////////
// Process combobox DropDown notification:
// Show DatePicker and format results.
//
void CDatePickerCombo::OnDropDown()
{
// Identify size and coordinates of the popup DatePicker window
CXTPWindowRect rcPopup(this);
CXTPDatePickerControl wndDatePicker;
// Ask DatePicker control about how much space we'd need
// to show one full month item.
CRect rc;
wndDatePicker.GetMinReqRect(&rc);
// Make small size correction for pretty result
rc.InflateRect(0 ,0, 4, 4);
// Shift the prepared rectangle near to the ComboBox
rc.OffsetRect(rcPopup.right - rc.Width(), rcPopup.bottom);
// Enable some visual effects
wndDatePicker.SetButtonsVisible(TRUE, FALSE);
wndDatePicker.SetShowWeekNumbers(TRUE);
wndDatePicker.SetBorderStyle(xtpDatePickerBorderOffice);
CString strPopup;
// Run DatePicker on the prepared rectangle in the Modal mode.
if (wndDatePicker.GoModal(rc, this))
{
COleDateTime dtFrom;
COleDateTime dtTo;
// Retrieve the selection result from the DatePicker
if (wndDatePicker.GetSelRange(dtFrom, dtTo))
{
if (dtFrom == dtTo)
{
// When only 1 day has been selected, format string to show
// it in the following way
strPopup.Format(_T("%d.%d.%d"),
dtFrom.GetYear(), dtFrom.GetMonth(), dtFrom.GetDay());
} else
{
// When a days range has been selected, format string to show
// it in the following way
strPopup.Format(_T("%d.%d.%d - %d.%d.%d"),
dtFrom.GetYear(), dtFrom.GetMonth(), dtFrom.GetDay(),
dtTo.GetYear(), dtTo.GetMonth(), dtTo.GetDay());
}
}
else
{
// GetSelRange returned not TRUE, so there were no selection made
strPopup.Format(_T("Nothing selected"));
}
}
else
{
// Exception case -- GoModal returned FALSE
strPopup.Format(_T("Error Popup wnd!"));
}
// Show retrieved result inside the ComboBox
SetWindowText(strPopup);
SetEditSel(0, -1);
// Hide the list box part of the ComboBox
PostMessage(CB_SHOWDROPDOWN, FALSE);
//ShowDropDown(FALSE);
}
LRESULT CDatePickerCombo::OnCtlColorListBox(WPARAM wParam, LPARAM lParam)
{
HWND hWnd = (HWND)lParam;
if (hWnd != 0 && hWnd != m_hWnd)
{
::ShowWindow(hWnd , SW_HIDE);
}
return DefWindowProc(WM_CTLCOLORLISTBOX, wParam, lParam);
}