📄 winctrl5.cpp
字号:
const COleDateTime* pMaxRange)
{
ASSERT(::IsWindow(m_hWnd));
ASSERT(pMinRange == NULL || pMinRange->GetStatus() != COleDateTime::invalid);
ASSERT(pMaxRange == NULL || pMaxRange->GetStatus() != COleDateTime::invalid);
SYSTEMTIME sysTimes[2];
WPARAM wFlags = 0;
if (pMinRange != NULL && pMinRange->GetStatus() != COleDateTime::null)
{
if (pMinRange->GetAsSystemTime(sysTimes[0]))
wFlags |= GDTR_MIN;
}
if (pMaxRange != NULL && pMaxRange->GetStatus() != COleDateTime::null)
{
if (pMaxRange->GetAsSystemTime(sysTimes[1]))
wFlags |= GDTR_MAX;
}
return (BOOL)
::SendMessage(m_hWnd, MCM_SETRANGE, wFlags, (LPARAM) &sysTimes);
}
BOOL CMonthCalCtrl::SetRange(const LPSYSTEMTIME pMinRange,
const LPSYSTEMTIME pMaxRange)
{
ASSERT(::IsWindow(m_hWnd));
SYSTEMTIME sysTimes[2];
WPARAM wFlags = 0;
if (pMinRange != NULL)
{
memcpy(&sysTimes[0], pMinRange, sizeof(SYSTEMTIME));
wFlags |= GDTR_MIN;
}
if (pMaxRange != NULL)
{
memcpy(&sysTimes[1], pMaxRange, sizeof(SYSTEMTIME));
wFlags |= GDTR_MAX;
}
return (BOOL)
::SendMessage(m_hWnd, MCM_SETRANGE, wFlags, (LPARAM) &sysTimes);
}
DWORD CMonthCalCtrl::GetRange(COleDateTime* pMinRange,
COleDateTime* pMaxRange) const
{
ASSERT(::IsWindow(m_hWnd));
SYSTEMTIME sysTimes[2];
memset(sysTimes, 0, sizeof(sysTimes));
DWORD dwRanges = (DWORD)
::SendMessage(m_hWnd, MCM_GETRANGE, 0, (LPARAM) &sysTimes);
if (dwRanges & GDTR_MIN && pMinRange)
*pMinRange = COleDateTime(sysTimes[0]);
if (dwRanges & GDTR_MAX && pMaxRange)
*pMaxRange = COleDateTime(sysTimes[1]);
return dwRanges;
}
DWORD CMonthCalCtrl::GetRange(LPSYSTEMTIME pMinRange,
LPSYSTEMTIME pMaxRange) const
{
ASSERT(::IsWindow(m_hWnd));
SYSTEMTIME sysTimes[2];
memset(sysTimes, 0, sizeof(sysTimes));
DWORD dwRanges = (DWORD)
::SendMessage(m_hWnd, MCM_GETRANGE, 0, (LPARAM) &sysTimes);
if (dwRanges & GDTR_MIN && pMinRange)
memcpy(pMinRange, &sysTimes[0], sizeof(SYSTEMTIME));
if (dwRanges & GDTR_MAX && pMaxRange)
memcpy(pMaxRange, &sysTimes[1], sizeof(SYSTEMTIME));
return dwRanges;
}
BOOL CMonthCalCtrl::SetRange(const CTime* pMinRange, const CTime* pMaxRange)
{
ASSERT(::IsWindow(m_hWnd));
SYSTEMTIME sysTimes[2];
WPARAM wFlags = 0;
if (pMinRange != NULL && pMinRange->GetAsSystemTime(sysTimes[0]))
wFlags |= GDTR_MIN;
if (pMaxRange != NULL && pMaxRange->GetAsSystemTime(sysTimes[1]))
wFlags |= GDTR_MAX;
return (BOOL)
::SendMessage(m_hWnd, MCM_SETRANGE, wFlags, (LPARAM) &sysTimes);
}
DWORD CMonthCalCtrl::GetRange(CTime* pMinRange, CTime* pMaxRange) const
{
ASSERT(::IsWindow(m_hWnd));
SYSTEMTIME sysTimes[2];
memset(sysTimes, 0, sizeof(sysTimes));
DWORD dwRanges = (DWORD)
::SendMessage(m_hWnd, MCM_GETRANGE, 0, (LPARAM) &sysTimes);
if (dwRanges & GDTR_MIN && pMinRange)
*pMinRange = CTime(sysTimes[0]);
if (dwRanges & GDTR_MAX && pMaxRange)
*pMaxRange = CTime(sysTimes[1]);
return dwRanges;
}
int CMonthCalCtrl::GetMonthRange(COleDateTime& refMinRange,
COleDateTime& refMaxRange, DWORD dwFlags) const
{
ASSERT(::IsWindow(m_hWnd));
ASSERT(dwFlags == GMR_DAYSTATE || dwFlags == GMR_VISIBLE);
SYSTEMTIME sysTimes[2];
memset(sysTimes, 0, sizeof(sysTimes));
int nCount = (int) ::SendMessage(m_hWnd, MCM_GETMONTHRANGE,
(WPARAM) dwFlags, (LPARAM) &sysTimes);
refMinRange = COleDateTime(sysTimes[0]);
refMaxRange = COleDateTime(sysTimes[1]);
return nCount;
}
int CMonthCalCtrl::GetMonthRange(LPSYSTEMTIME pMinRange,
LPSYSTEMTIME pMaxRange, DWORD dwFlags) const
{
ASSERT(::IsWindow(m_hWnd));
ASSERT_POINTER(pMinRange, SYSTEMTIME);
ASSERT_POINTER(pMaxRange, SYSTEMTIME);
SYSTEMTIME sysTimes[2];
int nCount = (int) ::SendMessage(m_hWnd, MCM_GETMONTHRANGE,
(WPARAM) dwFlags, (LPARAM) &sysTimes);
memcpy(pMinRange, &sysTimes[0], sizeof(SYSTEMTIME));
memcpy(pMaxRange, &sysTimes[1], sizeof(SYSTEMTIME));
return nCount;
}
int CMonthCalCtrl::GetMonthRange(CTime& refMinRange, CTime& refMaxRange,
DWORD dwFlags) const
{
ASSERT(::IsWindow(m_hWnd));
ASSERT(dwFlags == GMR_DAYSTATE || dwFlags == GMR_VISIBLE);
SYSTEMTIME sysTimes[2];
memset(sysTimes, 0, sizeof(sysTimes));
int nCount = (int) ::SendMessage(m_hWnd, MCM_GETMONTHRANGE,
(WPARAM) dwFlags, (LPARAM) &sysTimes);
refMinRange = CTime(sysTimes[0]);
refMaxRange = CTime(sysTimes[1]);
return nCount;
}
BOOL CMonthCalCtrl::GetSelRange(LPSYSTEMTIME pMinRange,
LPSYSTEMTIME pMaxRange) const
{
ASSERT(m_hWnd != NULL);
ASSERT((GetStyle() & MCS_MULTISELECT));
ASSERT_POINTER(pMinRange, SYSTEMTIME);
ASSERT_POINTER(pMaxRange, SYSTEMTIME);
SYSTEMTIME sysTimes[2];
BOOL bReturn = (BOOL) ::SendMessage(m_hWnd, MCM_GETSELRANGE,
0, (LPARAM) &sysTimes);
if (bReturn)
{
memcpy(pMinRange, &sysTimes[0], sizeof(SYSTEMTIME));
memcpy(pMaxRange, &sysTimes[1], sizeof(SYSTEMTIME));
}
return bReturn;
}
BOOL CMonthCalCtrl::SetSelRange(const LPSYSTEMTIME pMinRange,
const LPSYSTEMTIME pMaxRange)
{
ASSERT(m_hWnd != NULL);
ASSERT((GetStyle() & MCS_MULTISELECT));
ASSERT_POINTER(pMinRange, SYSTEMTIME);
ASSERT_POINTER(pMaxRange, SYSTEMTIME);
SYSTEMTIME sysTimes[2];
memcpy(&sysTimes[0], pMinRange, sizeof(SYSTEMTIME));
memcpy(&sysTimes[1], pMaxRange, sizeof(SYSTEMTIME));
return (BOOL) ::SendMessage(m_hWnd, MCM_SETSELRANGE,
0, (LPARAM) &sysTimes);
}
BOOL CMonthCalCtrl::SetSelRange(const COleDateTime& refMinRange,
const COleDateTime& refMaxRange)
{
// control must have multiple select
ASSERT((GetStyle() & MCS_MULTISELECT));
ASSERT(::IsWindow(m_hWnd));
SYSTEMTIME sysTimes[2];
BOOL bResult = FALSE;
if (refMinRange.GetStatus() == COleDateTime::valid &&
refMinRange.GetStatus() == COleDateTime::valid)
{
if (refMinRange.GetAsSystemTime(sysTimes[0]) &&
refMaxRange.GetAsSystemTime(sysTimes[1]))
{
bResult = (BOOL)
::SendMessage(m_hWnd, MCM_SETSELRANGE, 0, (LPARAM)sysTimes);
}
}
return bResult;
}
BOOL CMonthCalCtrl::GetSelRange(COleDateTime& refMinRange,
COleDateTime& refMaxRange) const
{
// control must have multiple select
ASSERT((GetStyle() & MCS_MULTISELECT));
ASSERT(::IsWindow(m_hWnd));
SYSTEMTIME sysTimes[2];
memset(sysTimes, 0, sizeof(sysTimes));
BOOL bResult = (BOOL)
::SendMessage(m_hWnd, MCM_GETSELRANGE, 0, (LPARAM) &sysTimes);
if (bResult)
{
refMinRange = COleDateTime(sysTimes[0]);
refMaxRange = COleDateTime(sysTimes[1]);
}
return bResult;
}
BOOL CMonthCalCtrl::SetSelRange(const CTime& refMinRange,
const CTime& refMaxRange)
{
// control must have multiple select
ASSERT((GetStyle() & MCS_MULTISELECT));
ASSERT(::IsWindow(m_hWnd));
SYSTEMTIME sysTimes[2];
BOOL bResult = FALSE;
if (refMinRange.GetAsSystemTime(sysTimes[0]) &&
refMaxRange.GetAsSystemTime(sysTimes[1]))
{
bResult = (BOOL)
::SendMessage(m_hWnd, MCM_SETSELRANGE, 0, (LPARAM)sysTimes);
}
return bResult;
}
BOOL CMonthCalCtrl::GetSelRange(CTime& refMinRange, CTime& refMaxRange) const
{
// control must have multiple select
ASSERT((GetStyle() & MCS_MULTISELECT));
ASSERT(::IsWindow(m_hWnd));
SYSTEMTIME sysTimes[2];
memset(sysTimes, 0, sizeof(sysTimes));
BOOL bResult = (BOOL)
::SendMessage(m_hWnd, MCM_GETSELRANGE, 0, (LPARAM) &sysTimes);
if (bResult)
{
refMinRange = CTime(sysTimes[0]);
refMaxRange = CTime(sysTimes[1]);
}
return bResult;
}
/////////////////////////////////////////////////////////////////////////////
// DDX_ routines
void AFXAPI DDX_DateTimeCtrl(CDataExchange* pDX, int nIDC, COleDateTime& value)
{
HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
CDateTimeCtrl* pWnd = (CDateTimeCtrl*) CWnd::FromHandle(hWndCtrl);
if (pDX->m_bSaveAndValidate)
pWnd->GetTime(value);
else
pWnd->SetTime(value);
}
void AFXAPI DDX_DateTimeCtrl(CDataExchange* pDX, int nIDC, CTime& value)
{
HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
CDateTimeCtrl* pWnd = (CDateTimeCtrl*) CWnd::FromHandle(hWndCtrl);
if (pDX->m_bSaveAndValidate)
pWnd->GetTime(value);
else
pWnd->SetTime(&value);
}
void AFXAPI DDX_MonthCalCtrl(CDataExchange* pDX, int nIDC,
COleDateTime& value)
{
HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
CMonthCalCtrl* pWnd = (CMonthCalCtrl*) CWnd::FromHandle(hWndCtrl);
if (pDX->m_bSaveAndValidate)
pWnd->GetCurSel(value);
else
pWnd->SetCurSel(value);
}
void AFXAPI DDX_MonthCalCtrl(CDataExchange* pDX, int nIDC, CTime& value)
{
HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
CMonthCalCtrl* pWnd = (CMonthCalCtrl*) CWnd::FromHandle(hWndCtrl);
if (pDX->m_bSaveAndValidate)
pWnd->GetCurSel(value);
else
pWnd->SetCurSel(value);
}
void AFXAPI DDV_MinMaxDateTime(CDataExchange* pDX, CTime& refValue,
const CTime* pMinRange, const CTime* pMaxRange)
{
ASSERT(pMinRange == NULL || pMaxRange == NULL || *pMinRange <= *pMaxRange);
CDateTimeCtrl* pWnd =
(CDateTimeCtrl*) CWnd::FromHandle(pDX->m_hWndLastControl);
if (!pDX->m_bSaveAndValidate)
{
if ( (pMinRange != NULL && *pMinRange > refValue) ||
(pMaxRange != NULL && *pMaxRange < refValue))
{
#ifdef _DEBUG
int nIDC = GetWindowLong(pDX->m_hWndLastControl, GWL_ID);
TRACE1("Warning: initial dialog data is out of range in control ID %d.\n", nIDC);
#endif
return; // don't stop now
}
}
pWnd->SetRange(pMinRange, pMaxRange);
}
void AFXAPI DDV_MinMaxDateTime(CDataExchange* pDX, COleDateTime& refValue,
const COleDateTime* pMinRange, const COleDateTime* pMaxRange)
{
ASSERT(pMinRange == NULL || pMaxRange == NULL || *pMinRange <= *pMaxRange);
CDateTimeCtrl* pWnd =
(CDateTimeCtrl*) CWnd::FromHandle(pDX->m_hWndLastControl);
if (!pDX->m_bSaveAndValidate)
{
if ( (pMinRange != NULL && *pMinRange > refValue) ||
(pMaxRange != NULL && *pMaxRange < refValue))
{
int nIDC = GetWindowLong(pDX->m_hWndLastControl, GWL_ID);
TRACE1("Warning: initial dialog data is out of range in control ID %d.\n", nIDC);
return; // don't stop now
}
}
pWnd->SetRange(pMinRange, pMaxRange);
}
void AFXAPI DDV_MinMaxMonth(CDataExchange* pDX, CTime& refValue,
const CTime* pMinRange, const CTime* pMaxRange)
{
ASSERT(pMinRange == NULL || pMaxRange == NULL || *pMinRange <= *pMaxRange);
CMonthCalCtrl* pWnd =
(CMonthCalCtrl*) CWnd::FromHandle(pDX->m_hWndLastControl);
if (!pDX->m_bSaveAndValidate)
{
if ( (pMinRange != NULL && *pMinRange > refValue) ||
(pMaxRange != NULL && *pMaxRange < refValue))
{
#ifdef _DEBUG
int nIDC = GetWindowLong(pDX->m_hWndLastControl, GWL_ID);
TRACE1("Warning: initial dialog data is out of range in control ID %d.\n", nIDC);
#endif
return; // don't stop now
}
}
pWnd->SetRange(pMinRange, pMaxRange);
}
void AFXAPI DDV_MinMaxMonth(CDataExchange* pDX, COleDateTime& refValue,
const COleDateTime* pMinRange, const COleDateTime* pMaxRange)
{
ASSERT(pMinRange == NULL || pMaxRange == NULL || *pMinRange <= *pMaxRange);
CMonthCalCtrl* pWnd =
(CMonthCalCtrl*) CWnd::FromHandle(pDX->m_hWndLastControl);
if (!pDX->m_bSaveAndValidate)
{
if ( (pMinRange != NULL && *pMinRange > refValue) ||
(pMaxRange != NULL && *pMaxRange < refValue))
{
#ifdef _DEBUG
int nIDC = GetWindowLong(pDX->m_hWndLastControl, GWL_ID);
TRACE1("Warning: initial dialog data is out of range in control ID %d.\n", nIDC);
#endif
return; // don't stop now
}
}
pWnd->SetRange(pMinRange, pMaxRange);
}
/////////////////////////////////////////////////////////////////////////////
#ifndef _AFX_ENABLE_INLINES
static const char _szAfxWinInl[] = "afxdtctl.inl";
#undef THIS_FILE
#define THIS_FILE _szAfxWinInl
#define _AFXDTCTL_INLINE
#include "afxdtctl.inl"
#endif //_AFX_ENABLE_INLINES
/////////////////////////////////////////////////////////////////////////////
#ifdef AFX_INIT_SEG
#pragma code_seg(AFX_INIT_SEG)
#endif
IMPLEMENT_DYNAMIC(CDateTimeCtrl, CWnd)
IMPLEMENT_DYNAMIC(CMonthCalCtrl, CWnd)
/////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -