
NOTE: You must also have the new COMCTL32.DLL (version 4.7 or later). This
is installed with Internet Explorer 3 and will come standard with the new
Windows 98. So if you are using VC++ 5 then you probably already have this
DLL.
The API support is available in VC++ 5.0. Otherwise, you need to
download the ActiveX SDK from the MS website. To use the date/time
picker, do the following:
Put the following in your app’s InitInstance:
INITCOMMONCONTROLSEX icc;
icc.dwSize = sizeof(INITCOMMONCONTROLSEX);
icc.dwICC = ICC_DATE_CLASSES;
InitCommonControlsEx(&icc);
Insert a custom control in your dialog where you want the date or
time picker. For the class name, enter “SysDateTimePick32”. For
the style, see commctrl.h and search for the DTS_* style and enter
the desired style (usually either DTS_SHORTDATEFORMAT or
DTS_TIMEFORMAT). Be sure to make the custom control visible and
have a tabstop.
You can always use CreateEx() to create them manually.
You can DDX the control to a SYSTEMTIME structure with the following
code:
void AFXAPI DDX_DateTime(CDataExchange *pDX, int nIDC,
SYSTEMTIME &SysTime)
{
HWND hWnd = pDX->m_pDlgWnd->GetDlgItem(nIDC)->GetSafeHwnd();
ASSERT (hWnd != NULL);
if (pDX->m_bSaveAndValidate)
{
::SendMessage(hWnd, DTM_GETSYSTEMTIME, 0,
(LPARAM)&SysTime);
}
else // initializing
{
::SendMessage(hWnd, DTM_SETSYSTEMTIME, GDT_VALID,
(LPARAM)&SysTime);
}
}
void CCtrlTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCtrlTestDlg)
//}}AFX_DATA_MAP
// m_Date and m_Time are SYSTEMTIME structures
DDX_DateTime(pDX, IDC_DATE, m_Date);
DDX_DateTime(pDX, IDC_TIME, m_Time);
}