void CCalendarDlg2::OnGetdaystate(NMHDR* pNMHDR, LRESULT* pResult) { LPNMDAYSTATE pDayState = reinterpret_cast<LPNMDAYSTATE>(pNMHDR); SYSTEMTIME& stStart=pDayState->stStart; int nMonths=pDayState->cDayState; static MONTHDAYSTATE* m_pMDS=0; if(m_pMDS) { delete [] m_pMDS; m_pMDS=0; } m_pMDS=new MONTHDAYSTATE[nMonths]; memset(m_pMDS,0,nMonths*sizeof(MONTHDAYSTATE)); for (int i=0; i<nMonths; i++) { m_pMDS[i] = (MONTHDAYSTATE)0; for(int j=1; j<32; j++) { CString sThisDayNKey=Format(sKey,j,stStart.wMonth,stStart.wYear); BOOL bBold=0; for(int i2=aItems.GetSize()-1; i2>=0; i2--) { if(aItems[i2].Find(sThisDayNKey)==0) { bBold=1; break; } } if(bBold) { BOLDDAY(m_pMDS[i],j); } } stStart.wMonth++; if(stStart.wMonth>12) { stStart.wMonth=1; stStart.wYear++; } } pDayState->prgDayState = m_pMDS; *pResult = 0; }
BOOL COXMonthCalCtrl::OnGetDayState(NMHDR *pHdr, LRESULT *pRes) { NMDAYSTATE *pds=(NMDAYSTATE*)pHdr; COleDateTime dtMin,dtMax; GetMonthRange(dtMin,dtMax,GMR_DAYSTATE); int nMonth=dtMin.GetMonth(); int nYear=dtMin.GetYear(); for(int nIndex=0; nIndex<pds->cDayState; nIndex++) { HOLIDAYS holidays; holidays.nMonth=nMonth; holidays.nYear=nYear; VERIFY(GetHolidays(&holidays)); OXNMDAYSTATE nmds; nmds.nmhdr.code=OXMCN_GETDAYSTATE; nmds.nMonth=holidays.nMonth; nmds.nYear=holidays.nYear; nmds.parrDayState=new ARRMONTHDAYS; if((GetMonthCalStyle()&OXMCS_BOLDHOLIDAYS)!=0) { POSITION posList=holidays.arrWeekDays.GetHeadPosition(); while(posList!=NULL) { WEEKDAYS weekDay=holidays.arrWeekDays.GetNext(posList); COleDateTime dtDummy; for(int nDay=1; nDay<=31; nDay++) { dtDummy.SetDate(nmds.nYear,nmds.nMonth,nDay); if(dtDummy.GetDayOfWeek()==GetAsCOleDateTimeDayOfWeek(weekDay) && !nmds.parrDayState->Find((MONTHDAYS)nDay)) nmds.parrDayState->AddTail((MONTHDAYS)nDay); } } posList=holidays.arrMonthDays.GetHeadPosition(); while(posList!=NULL) { MONTHDAYS monthDay=holidays.arrMonthDays.GetNext(posList); if(!nmds.parrDayState->Find(monthDay)) nmds.parrDayState->AddTail(monthDay); } } // notify parent CWnd* pParentWnd=GetParent(); if(pParentWnd) { // fill notification structure nmds.nmhdr.hwndFrom=GetSafeHwnd(); nmds.nmhdr.idFrom=GetDlgCtrlID(); pParentWnd->SendMessage(WM_NOTIFY,(WPARAM)GetDlgCtrlID(),(LPARAM)&nmds); } pds->prgDayState[nIndex]=0; POSITION posList=nmds.parrDayState->GetHeadPosition(); while(posList!=NULL) { MONTHDAYS monthDay=nmds.parrDayState->GetNext(posList); BOLDDAY(pds->prgDayState[nIndex],monthDay); } nMonth++; if(nMonth>ID_MAXMONTHCOUNT) { nMonth=1; nYear++; } } *pRes=0; return FALSE; }