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;
}
Exemplo n.º 2
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;
}