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

对话框与窗口

开发平台:

Visual C++

  1. // DatePickerDemoDlg.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 "DatePickerDemo.h"
  22. #include "DatePickerDemoDlg.h"
  23. #ifdef _DEBUG
  24. #define new DEBUG_NEW
  25. #endif
  26. CString LoadResourceString(UINT nID)
  27. {
  28. CString str;
  29. VERIFY(str.LoadString(nID));
  30. return str;
  31. }
  32. ///////////////////////////////////////////////////////////
  33. // Class CDayFontColor is derived from CCmdTarget.
  34. // This class is used to associate a "day" with a font
  35. // and a font color.
  36. struct CDayFontColor : CCmdTarget
  37. {
  38. CFont fnt;
  39. COLORREF color;
  40. };
  41. //------------------------------------------------
  42. // GetStartPosition:
  43. // Returns a POSITION value that
  44. // indicates a starting position for iterating 
  45. // through the map, or NULL if the map is empty.
  46. //------------------------------------------------
  47. // rNextPosition:
  48. // Specifies a reference to a POSITION
  49. // value returned by a previous GetNextAssoc or 
  50. // GetStartPosition call.
  51. //------------------------------------------------
  52. // GetNextAssoc:
  53. // Retrieves the map element at rNextPosition, 
  54. // then updates rNextPosition to refer to the next 
  55. // element in the map. This function is most useful 
  56. // for iterating through all the elements in the map. 
  57. // Note that the position sequence is not necessarily 
  58. // the same as the key value sequence.
  59. // If the retrieved element is the last in the map, 
  60. // then the new value of rNextPosition is set to NULL.
  61. //------------------------------------------------
  62. // struct CStaticFontMap is used to associate each 
  63. // visible "day" with a CDayFontColor class.
  64. struct CStaticFontMap : public CMap<int,int,CDayFontColor*,CDayFontColor*>
  65. {
  66. ~CStaticFontMap()
  67. {
  68. POSITION pos = GetStartPosition();
  69. int nKey;
  70. CDayFontColor* pFC = NULL;
  71. while (pos != NULL)
  72. {
  73. GetNextAssoc(pos, nKey, pFC);
  74. if (pFC) {
  75. pFC->InternalRelease();// Decrement reference count by one.
  76. }
  77. }
  78. }
  79. };
  80. static CStaticFontMap mapFontColor;
  81. void CALLBACK DayMetricsCallback(CXTPDatePickerControl* pControl, const COleDateTime &dtDay, XTP_DAYITEM_METRICS* pDayItemMetrics, void*)
  82. {
  83.     // This function is used to determine if a given day is special.
  84.     // If the day is special then the day is highlighted.
  85.     // Get the number of days from December 30, 1899 to present day.
  86.     // COleDateTime operator =(DATE dtSrc) Note: DATE is a double.
  87.     // The DATE value is copied into this COleDateTime object and its 
  88.     // status is set to valid.
  89. COleDateTime dtNow = (double)long(COleDateTime::GetCurrentTime());
  90. COleDateTimeSpan span = dtDay - dtNow;
  91. static CFont fntBold;
  92. if (fntBold.GetSafeHandle() == 0)
  93. {
  94. LOGFONT lf;
  95. pControl->GetPaintManager()->GetDayTextFont()->GetLogFont(&lf);
  96. lf.lfWeight = FW_BOLD;
  97. fntBold.CreateFontIndirect(&lf);
  98. }
  99. if (abs(span.GetDays()) <= 2)
  100. {
  101. pDayItemMetrics->clrForeground = RGB(0xFF, 0, 0);
  102. }
  103. if (dtNow.GetMonth() == dtDay.GetMonth() - 1 && dtDay.GetDay() == dtNow.GetDay())
  104. {
  105. pDayItemMetrics->SetFont(&fntBold);
  106. pDayItemMetrics->clrForeground = RGB(0, 0, 0xFF);
  107. }
  108. CDayFontColor* pFontColor;
  109. if (mapFontColor.Lookup((int)dtDay, pFontColor))
  110. {
  111. pDayItemMetrics->SetFont(&pFontColor->fnt);
  112. pDayItemMetrics->clrForeground = pFontColor->color;
  113. }
  114. }
  115. // CDatePickerDemoDlg dialog
  116. CDatePickerDemoDlg::CDatePickerDemoDlg(CWnd* pParent /*=NULL*/)
  117. : CDialog(CDatePickerDemoDlg::IDD, pParent)
  118. , m_nRows(2)
  119. , m_nCols(4)
  120. , m_bShowWeekNumbers(FALSE)
  121. , m_bHighlightToday(TRUE)
  122. , m_bShowNonMonthDays(TRUE)
  123. , m_bShow3DBorder(TRUE)
  124. , m_bTheme(TRUE)
  125. , m_bThemeOffice2007(FALSE)
  126. , m_bShowNoneBtn(TRUE)
  127. , m_bShowTodayBtn(TRUE)
  128. , m_bIsAutoSize(TRUE)
  129. , m_strPopup(_T(""))
  130. {
  131. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  132. }
  133. void CDatePickerDemoDlg::DoDataExchange(CDataExchange* pDX)
  134. {
  135. CDialog::DoDataExchange(pDX);
  136. //{{AFX_DATA_MAP(CDatePickerDemoDlg)
  137. DDX_Control(pDX, IDC_COMBO_DATEPICKER, m_cmbDatePicker);
  138. DDX_Control(pDX, IDC_DATEPICKER, m_wndDatePicker);
  139. DDX_Control(pDX, IDC_COMBO_FIRST_WEEK_DAY, m_cmbFirstWeekDay);
  140. DDX_Control(pDX, IDC_COMBO_MAX_SELECTED, m_cmbMaxSelDays);
  141. DDX_Check(pDX, IDC_CHECK_SHOWWEEKNRS, m_bShowWeekNumbers);
  142. DDX_Check(pDX, IDC_CHECK_HIGHLIGHT_TODAY, m_bHighlightToday);
  143. DDX_Check(pDX, IDC_CHECK_SHOWTODAYBTN, m_bShowTodayBtn);
  144. DDX_Check(pDX, IDC_CHECK_SHOWNONEBTN, m_bShowNoneBtn);
  145. DDX_Check(pDX, IDC_CHECK_AUTO_SIZE, m_bIsAutoSize);
  146. DDX_Check(pDX, IDC_CHECK_NON_MONTH_DAYS, m_bShowNonMonthDays);
  147. DDX_Check(pDX, IDC_CHECK_SHOW_3D_BORDER, m_bShow3DBorder);
  148. DDX_Check(pDX, IDC_CHECK_THEME, m_bTheme);
  149. DDX_Check(pDX, IDC_CHECK_THEME_OFFICE_2007, m_bThemeOffice2007);
  150. DDX_Text(pDX, IDC_EDIT_POPUP, m_strPopup);
  151. DDX_Control(pDX, IDC_EDIT_COLS, m_edtCols);
  152. DDX_Control(pDX, IDC_EDIT_ROWS, m_edtRows);
  153. //}}AFX_DATA_MAP
  154. }
  155. BEGIN_MESSAGE_MAP(CDatePickerDemoDlg, CDialog)
  156. //{{AFX_MSG_MAP(CDatePickerDemoDlg)
  157. ON_WM_SYSCOMMAND()
  158. ON_WM_PAINT()
  159. ON_WM_ERASEBKGND()
  160. ON_WM_SIZE()
  161. ON_WM_QUERYDRAGICON()
  162. ON_EN_CHANGE(IDC_EDIT_COLS, OnEnChangeEditGridSize)
  163. ON_EN_CHANGE(IDC_EDIT_ROWS, OnEnChangeEditGridSize)
  164. ON_BN_CLICKED(IDC_CHECK_SHOWWEEKNRS, OnBnClickedCheckShowWeekNumbers)
  165. ON_BN_CLICKED(IDC_CHECK_HIGHLIGHT_TODAY, OnBnClickedCheckHighlightToday)
  166. ON_BN_CLICKED(IDC_CHECK_SHOWTODAYBTN, OnBnClickedCheckShowTodayBtn)
  167. ON_BN_CLICKED(IDC_CHECK_SHOWNONEBTN, OnBnClickedCheckShowNoneBtn)
  168. ON_BN_CLICKED(IDC_CHECK_AUTO_SIZE, OnClickedCheckAutoSize)
  169. ON_BN_CLICKED(IDC_CHECK_THEME, OnClickedTheme)
  170. ON_BN_CLICKED(IDC_CHECK_NON_MONTH_DAYS, OnBnClickedCheckNonMonthDays)
  171. ON_BN_CLICKED(IDC_CHECK_SHOW_3D_BORDER, OnBnClickedCheckShow3dBorder)
  172. ON_NOTIFY(XTP_NC_DATEPICKER_BUTTON_CLICK, 1000, OnButtonPressed)
  173. ON_BN_CLICKED(IDC_BTN_POPUP, OnBnClickedBtnPopup)
  174. ON_BN_CLICKED(IDC_CHECK_THEME_OFFICE_2007, OnCheckThemeOffice2007)
  175. ON_CBN_SELCHANGE(IDC_COMBO_FIRST_WEEK_DAY, OnCbnChangeFirstWeekDay)
  176. ON_CBN_SELCHANGE(IDC_COMBO_MAX_SELECTED, OnCbnChangeMaxSelDays)
  177. ON_CBN_EDITCHANGE(IDC_COMBO_MAX_SELECTED, OnCbnEditMaxSelDays)
  178. ON_BN_CLICKED(IDC_BTN_CHANGE_SEL_FONT, OnBnClickedSelTextFont)
  179. //}}AFX_MSG_MAP
  180. END_MESSAGE_MAP()
  181. // CDatePickerDemoDlg message handlers
  182. BOOL CDatePickerDemoDlg::OnInitDialog()
  183. {
  184. CDialog::OnInitDialog();
  185. // Add "About..." menu item to system menu.
  186. // IDM_ABOUTBOX must be in the system command range.
  187. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  188. ASSERT(IDM_ABOUTBOX < 0xF000);
  189. CMenu* pSysMenu = GetSystemMenu(FALSE);
  190. if (pSysMenu != NULL)
  191. {
  192. CString strAboutMenu;
  193. strAboutMenu.LoadString(IDS_ABOUTBOX);
  194. if (!strAboutMenu.IsEmpty())
  195. {
  196. pSysMenu->AppendMenu(MF_SEPARATOR);
  197. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  198. }
  199. }
  200. // Set the icon for this dialog.  The framework does this automatically
  201. // when the application's main window is not a dialog.
  202. SetIcon(m_hIcon, TRUE);  // Set big icon.
  203. SetIcon(m_hIcon, FALSE); // Set small icon.
  204. m_wndDatePicker.SetCallbackDayMetrics(DayMetricsCallback);
  205. m_bIsAutoSize = m_wndDatePicker.IsAutoSize();
  206. m_edtCols.EnableWindow(!m_bIsAutoSize);
  207. m_edtRows.EnableWindow(!m_bIsAutoSize);
  208. // The first day of the week initialization.
  209. m_cmbFirstWeekDay.SetCurSel(0);
  210.     m_wndDatePicker.SetFirstDayOfWeek(1);
  211. // THe maximum days selection initialization.
  212. m_cmbMaxSelDays.SetItemData(m_cmbMaxSelDays.AddString(LoadResourceString(IDS_NOLIMIT)), XTP_SELECTION_INFINITE);
  213. m_cmbMaxSelDays.SetItemData(m_cmbMaxSelDays.AddString(_T("5")),  5);
  214. m_cmbMaxSelDays.SetItemData(m_cmbMaxSelDays.AddString(_T("10")), 10);
  215. m_cmbMaxSelDays.SetItemData(m_cmbMaxSelDays.AddString(_T("15")), 15);
  216. m_cmbMaxSelDays.SetItemData(m_cmbMaxSelDays.AddString(_T("20")), 20);
  217. m_cmbMaxSelDays.SetItemData(m_cmbMaxSelDays.AddString(_T("25")), 25);
  218. m_cmbMaxSelDays.SetItemData(m_cmbMaxSelDays.AddString(_T("30")), 30);
  219. m_cmbMaxSelDays.SetCurSel(0);
  220. // Initialize tool tip captions.
  221. m_ToolTip.Create(this);
  222. m_ToolTip.AddTool(GetDlgItem(IDC_EDIT_COLS), LoadResourceString(IDS_HINT_COLUMNS));
  223. m_ToolTip.AddTool(GetDlgItem(IDC_EDIT_ROWS), LoadResourceString(IDS_HINT_ROWS));
  224. m_ToolTip.AddTool(GetDlgItem(IDC_COMBO_FIRST_WEEK_DAY), LoadResourceString(IDS_HINT_FIRST_WEEK_DAY));
  225. m_ToolTip.AddTool(GetDlgItem(IDC_COMBO_MAX_SELECTED), LoadResourceString(IDS_HINT_MAX_SEL_DAYS  ));
  226. m_ToolTip.AddTool(GetDlgItem(IDC_CHECK_SHOWWEEKNRS), LoadResourceString(IDS_HINT_WEEK_NUMBERS  ));
  227. m_ToolTip.AddTool(GetDlgItem(IDC_CHECK_HIGHLIGHT_TODAY),LoadResourceString(IDS_HINT_TODAY         ));
  228. m_ToolTip.AddTool(GetDlgItem(IDC_CHECK_NON_MONTH_DAYS), LoadResourceString(IDS_HINT_NONMONTH_DAYS ));
  229. m_ToolTip.AddTool(GetDlgItem(IDC_CHECK_SHOW_3D_BORDER), LoadResourceString(IDS_HINT_3DBORDER      ));
  230. m_ToolTip.AddTool(GetDlgItem(IDC_CHECK_SHOWTODAYBTN), LoadResourceString(IDS_HINT_BTN_TODAY     ));
  231. m_ToolTip.AddTool(GetDlgItem(IDC_CHECK_SHOWNONEBTN), LoadResourceString(IDS_HINT_BTN_NONE      ));
  232. m_ToolTip.AddTool(GetDlgItem(IDC_CHECK_THEME), LoadResourceString(IDS_HINT_LUNA_THEME    ));
  233. m_ToolTip.AddTool(GetDlgItem(IDC_CHECK_AUTO_SIZE), LoadResourceString(IDS_HINT_AUTOSIZE      ));
  234. m_ToolTip.AddTool(GetDlgItem(IDC_BTN_POPUP), LoadResourceString(IDS_HINT_TEST_POPUP    ));
  235. m_ToolTip.AddTool(GetDlgItem(IDC_EDIT_POPUP), LoadResourceString(IDS_HINT_POPUP_RESULTS ));
  236. m_ToolTip.AddTool(GetDlgItem(IDC_BTN_CHANGE_SEL_FONT), LoadResourceString(IDS_HINT_FONT_SELECTED ));
  237. m_ToolTip.Activate(TRUE);
  238. if (!CXTPWinThemeWrapper().IsThemeActive())
  239. {
  240. GetDlgItem(IDC_CHECK_THEME)->EnableWindow(FALSE);
  241. m_bTheme = FALSE;
  242. }
  243. UpdateData(FALSE);
  244. UpdateRowsColsControls();
  245. return TRUE;  // Return TRUE unless you set the focus to a control.
  246. }
  247. void CDatePickerDemoDlg::OnSysCommand(UINT nID, LPARAM lParam)
  248. {
  249. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  250. {
  251. CAboutDlg dlgAbout;
  252. dlgAbout.DoModal();
  253. }
  254. else
  255. {
  256. CDialog::OnSysCommand(nID, lParam);
  257. }
  258. }
  259. // If you add a minimize button to your dialog, you will need the code below
  260. // to draw the icon.  For MFC applications using the document/view model,
  261. // this is automatically done for you by the framework.
  262. void CDatePickerDemoDlg::OnPaint() 
  263. {
  264. if (IsIconic())
  265. {
  266. CPaintDC dc(this); // Device context for painting.
  267. SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  268. // Center icon in client rectangle.
  269. int cxIcon = GetSystemMetrics(SM_CXICON);
  270. int cyIcon = GetSystemMetrics(SM_CYICON);
  271. CRect rect;
  272. GetClientRect(&rect);
  273. int x = (rect.Width() - cxIcon + 1) / 2;
  274. int y = (rect.Height() - cyIcon + 1) / 2;
  275. // Draw the icon.
  276. dc.DrawIcon(x, y, m_hIcon);
  277. }
  278. else
  279. {
  280. CDialog::OnPaint();
  281. }
  282. }
  283. // The system calls this function to obtain the cursor
  284. // to display while the user drags the minimized window.
  285. HCURSOR CDatePickerDemoDlg::OnQueryDragIcon()
  286. {
  287. return static_cast<HCURSOR>(m_hIcon);
  288. }
  289. void CDatePickerDemoDlg::OnEnChangeEditGridSize()
  290. {
  291. CString strRows, strCols;
  292. m_edtRows.GetWindowText(strRows);
  293. m_edtCols.GetWindowText(strCols);
  294. if (strRows.IsEmpty() || strCols.IsEmpty())
  295. return;
  296. m_nRows = _ttoi(strRows);
  297. m_nCols = _ttoi(strCols);
  298. if (m_nRows > 0 && m_nCols > 0)
  299. m_wndDatePicker.SetGridSize(m_nRows, m_nCols);
  300. }
  301. void CDatePickerDemoDlg::OnBnClickedCheckShowWeekNumbers()
  302. {
  303. UpdateData();
  304. m_wndDatePicker.SetShowWeekNumbers(m_bShowWeekNumbers);
  305. }
  306. void CDatePickerDemoDlg::OnBnClickedCheckHighlightToday()
  307. {
  308. UpdateData();
  309. m_wndDatePicker.SetHighlightToday(m_bHighlightToday);
  310. }
  311. void CDatePickerDemoDlg::OnBnClickedCheckShowTodayBtn()
  312. {
  313. UpdateData();
  314. m_wndDatePicker.SetButtonsVisible(m_bShowTodayBtn, m_bShowNoneBtn);
  315. }
  316. void CDatePickerDemoDlg::OnBnClickedCheckShowNoneBtn()
  317. {
  318. UpdateData();
  319. m_wndDatePicker.SetButtonsVisible(m_bShowTodayBtn, m_bShowNoneBtn);
  320. }
  321. void CDatePickerDemoDlg::OnClickedTheme()
  322. {
  323. UpdateData();
  324. m_wndDatePicker.GetPaintManager()->EnableTheme(m_bTheme);
  325. m_wndDatePicker.RedrawControl();
  326. }
  327. void CDatePickerDemoDlg::OnClickedCheckAutoSize()
  328. {
  329. UpdateData();
  330. m_wndDatePicker.SetAutoSize(m_bIsAutoSize);
  331. m_edtCols.EnableWindow(!m_wndDatePicker.IsAutoSize());
  332. m_edtRows.EnableWindow(!m_wndDatePicker.IsAutoSize());
  333. if (m_bIsAutoSize)
  334. UpdateRowsColsControls();
  335. }
  336. void CDatePickerDemoDlg::OnButtonPressed(NMHDR* pNotifyStruct, LRESULT*)
  337. {
  338. XTP_NC_DATEPICKER_BUTTON* pNMButton = (XTP_NC_DATEPICKER_BUTTON*)pNotifyStruct;
  339. switch (pNMButton->nID)
  340. {
  341. case XTP_IDS_DATEPICKER_TODAY:
  342. TRACE(_T("TODAY BUTTON PRESSEDn"));
  343. break;
  344. case XTP_IDS_DATEPICKER_NONE:
  345. TRACE(_T("NONE BUTTON PRESSEDn"));
  346. break;
  347. }
  348. }
  349. void CDatePickerDemoDlg::OnBnClickedCheckNonMonthDays()
  350. {
  351. UpdateData();
  352. m_wndDatePicker.SetShowNonMonthDays(m_bShowNonMonthDays);
  353. }
  354. void CDatePickerDemoDlg::OnBnClickedCheckShow3dBorder()
  355. {
  356. UpdateData();
  357. m_wndDatePicker.SetBorderStyle(m_bShow3DBorder? xtpDatePickerBorder3D: xtpDatePickerBorderNone);
  358. }
  359. void CDatePickerDemoDlg::OnBnClickedBtnPopup()
  360. {
  361. CXTPDatePickerControl wndDatePicker;
  362. CXTPWindowRect rcPopup(GetDlgItem(IDC_BTN_POPUP));
  363. CRect rc;
  364. wndDatePicker.GetMinReqRect(&rc);
  365. rc.InflateRect(0 ,0, 4, 4);
  366. rc.OffsetRect(rcPopup.right - rc.Width(), rcPopup.bottom);
  367. wndDatePicker.SetButtonsVisible(TRUE, FALSE);
  368. wndDatePicker.SetShowWeekNumbers(TRUE);
  369. if (wndDatePicker.GoModal(rc, this))
  370. {
  371. COleDateTime dtFrom;
  372. COleDateTime dtTo;
  373. if (wndDatePicker.GetSelRange(dtFrom, dtTo))
  374. {
  375. if (dtFrom == dtTo)
  376. {
  377. m_strPopup.Format(_T("%d.%d.%d"),
  378. dtFrom.GetYear(), dtFrom.GetMonth(), dtFrom.GetDay());
  379. } else
  380. {
  381. // edit
  382. m_strPopup.Format(_T("%d.%d.%d - %d.%d.%d"), 
  383. dtFrom.GetYear(), dtFrom.GetMonth(), dtFrom.GetDay(), 
  384. dtTo.GetYear(), dtTo.GetMonth(), dtTo.GetDay());
  385. }
  386. }
  387. else
  388. m_strPopup.Format(_T("Nothing selected"));
  389. }
  390. else
  391. m_strPopup.Format(_T("Error Popup wnd!"));
  392. UpdateData(FALSE);
  393. }
  394. void CDatePickerDemoDlg::OnSize(UINT nType, int cx, int cy)
  395. {
  396. CDialog::OnSize(nType, cx, cy);
  397. if (::IsWindow(m_wndDatePicker.GetSafeHwnd()))
  398. {
  399. CRect rcDP;
  400. m_wndDatePicker.GetWindowRect(&rcDP);
  401. if (!rcDP.IsRectEmpty())
  402. {
  403. ScreenToClient(&rcDP);
  404. rcDP.bottom = cy - 5;
  405. rcDP.right = cx - 5;
  406. if (!rcDP.IsRectEmpty())
  407. m_wndDatePicker.MoveWindow(rcDP);
  408. }
  409. UpdateRowsColsControls();
  410. }
  411. }
  412. void CDatePickerDemoDlg::UpdateRowsColsControls()
  413. {
  414. m_nRows = m_wndDatePicker.GetRows();
  415. m_nCols = m_wndDatePicker.GetCols();
  416. CString strRows, strCols;
  417. strRows.Format(_T("%d"), m_nRows);
  418. strCols.Format(_T("%d"), m_nCols);
  419. m_edtRows.SetWindowText(strRows);
  420. m_edtCols.SetWindowText(strCols);
  421. }
  422. BOOL CDatePickerDemoDlg::OnEraseBkgnd(CDC* pDC)
  423. {
  424. CDialog::OnEraseBkgnd(pDC);
  425. return FALSE;
  426. }
  427. void CDatePickerDemoDlg::OnCbnChangeFirstWeekDay()
  428. {
  429. UpdateData();
  430.     m_wndDatePicker.SetFirstDayOfWeek(m_cmbFirstWeekDay.GetCurSel()+1);
  431. }
  432. void CDatePickerDemoDlg::OnCbnChangeMaxSelDays()
  433. {
  434. UpdateData();
  435. int nMaxSelectedDays = (int)m_cmbMaxSelDays.GetItemData(m_cmbMaxSelDays.GetCurSel());
  436. m_wndDatePicker.SetMaxSelCount(nMaxSelectedDays);
  437. }
  438. void CDatePickerDemoDlg::OnCbnEditMaxSelDays()
  439. {
  440. UpdateData();
  441. int nMaxSelectedDays = -1;
  442. CString strMaxDays;
  443. m_cmbMaxSelDays.GetWindowText(strMaxDays);
  444. SCANF_S(strMaxDays, _T("%d"), &nMaxSelectedDays);
  445. m_wndDatePicker.SetMaxSelCount(nMaxSelectedDays);
  446. }
  447. void CDatePickerDemoDlg::OnBnClickedSelTextFont()
  448. {
  449. LOGFONT lf;
  450. m_wndDatePicker.GetPaintManager()->GetDayTextFont()->GetLogFont(&lf);
  451. CFontDialog dlg(&lf);
  452. if (dlg.DoModal() == IDOK)
  453. {
  454. COleDateTime dtFrom;
  455. COleDateTime dtTo;
  456. if (m_wndDatePicker.GetSelRange(dtFrom, dtTo))
  457. {
  458. CDayFontColor* pFontColor = new CDayFontColor;
  459. pFontColor->color = dlg.GetColor();
  460. pFontColor->fnt.CreateFontIndirect(&lf);
  461.             // Span 1 day at a time.
  462. COleDateTimeSpan spDay(1,  // Day
  463.                                    0,  // Hour
  464.                                    0,  // Minute
  465.                                    0); // Second
  466.             // Loop on the number of days selected.
  467.             // Start at dtFrom and increment 1 day at a time until we are equal to dtTo.
  468. for (COleDateTime dtDay(dtFrom); dtDay <= dtTo; dtDay += spDay)
  469. {
  470. if (m_wndDatePicker.IsSelected(dtDay))
  471. {
  472. CDayFontColor* pFC;
  473. if (mapFontColor.Lookup((int)dtDay, pFC))
  474. {
  475. pFC->InternalRelease();
  476. }
  477. pFontColor->InternalAddRef();
  478. mapFontColor.SetAt((int)dtDay, pFontColor);
  479. }
  480. }
  481. // add new font to the collection
  482. pFontColor->InternalRelease();
  483. m_wndDatePicker.SetCurSel(dtFrom);
  484. m_wndDatePicker.RedrawControl();
  485. }
  486. }
  487. }
  488. BOOL CDatePickerDemoDlg::PreTranslateMessage(MSG* pMsg)
  489. {
  490. m_ToolTip.RelayEvent(pMsg);
  491. return CDialog::PreTranslateMessage(pMsg);
  492. }
  493. void CDatePickerDemoDlg::OnCheckThemeOffice2007() 
  494. {
  495. UpdateData();
  496. if (m_bThemeOffice2007)
  497. {
  498. CXTPDatePickerThemeOffice2007* pTheme2007 = new CXTPDatePickerThemeOffice2007;
  499. m_wndDatePicker.SetTheme(pTheme2007);
  500. }
  501. else 
  502. {
  503. m_wndDatePicker.SetTheme(NULL);
  504. }
  505. }