⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bcgpcalendarbar.cpp

📁 关于远程网络监视程序的源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		InvalidateRect(rect);
		m_nHoldTimerID = SetTimer (nHoldMouseTimerID, m_nElapseInterval = 500, NULL);
	}
	else
	{
		CCalendarMonthButton* pmonth = DYNAMIC_DOWNCAST (CCalendarMonthButton, pBtnHit);

		if (pmonth != NULL)
		{
			CRect rect = pmonth->Rect();
			OnSelectMonth(pmonth->Rect());
            OnChangeHot (-1);
			InvalidateRect( rect );
			InvalidateRect( pmonth->Rect() );
    		UpdateWindow(); // immediate feedback
		}
	}
}
//***************************************************************************************
void CBCGPCalendarBar::OnLButtonUp(UINT nFlags, CPoint point) 
{
	//Reset capturing if navi and finish timer
		
	if (!IsCustomizeMode () || m_bInternal)
	{
		if (GetCapture() == this)
		{
			KillTimer(m_nHoldTimerID);
			m_nHoldTimerID = 0;
		}
		
		HWND hwndSaved = m_hWnd;

		CBCGPToolBar::OnLButtonUp(nFlags, point);
        m_iButtonCapture = -1;

    	if (::IsWindow (hwndSaved) &&				// "This" may be destoyed now!
	    	m_bIsTearOff)	
        {
            int iPB = m_iHighlighted;
            OnChangeHot (-1);
            m_iHighlighted = m_iHot;
            InvalidateButton(iPB);
            if (m_iHighlighted >= 0)
                InvalidateButton(m_iHighlighted);
        }
	}
}
//***************************************************************************************
void CBCGPCalendarBar::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	if (!IsCustomizeMode () || m_bInternal)
	{
		CBCGPToolBar::OnLButtonDblClk(nFlags, point);
	}
}
//***************************************************************************************
BOOL CBCGPCalendarBar::PreTranslateMessage(MSG* pMsg)
{
	if ((m_pParentBtn != NULL ) && !m_bInCommand)
	{
		switch (pMsg->message)
		{
		case WM_LBUTTONDOWN:
		case WM_RBUTTONDOWN:
		case WM_MBUTTONDOWN:
			{
				CRect rect;
				GetClientRect (rect);

				CPoint pt (BCG_GET_X_LPARAM (pMsg->lParam), BCG_GET_Y_LPARAM (pMsg->lParam));
				if (!rect.PtInRect (pt))
				{
					GetParent ()->SendMessage (WM_CLOSE);
					return TRUE;
				}
			}
			break;

		case WM_SYSKEYDOWN:
		case WM_CONTEXTMENU:
			GetParent ()->SendMessage (WM_CLOSE);
			return TRUE;

		case WM_KEYDOWN:
			return OnKey(pMsg->wParam);
		}
	}
    else if (m_bIsTearOff)
    {
		switch (pMsg->message)
        {
    		case WM_KEYDOWN:
                return OnKey(pMsg->wParam);
        }
    }

	return CBCGPPopupMenuBar::PreTranslateMessage(pMsg);
}
//*************************************************************************************
void CBCGPCalendarBar::OnDestroy() 
{
	if (m_pParentBtn != NULL)
	{
		m_pParentBtn->m_pPopup = NULL;
		m_pParentBtn->SetFocus ();
		m_pParentBtn->OnHideCalendarPopup();
		ReleaseCapture ();
	}

	CBCGPPopupMenuBar::OnDestroy();
}
//****************************************************************************************
BOOL CBCGPCalendarBar::OnKey(UINT nChar)
{
	BOOL  isCtrlPressed =  (0x8000 & GetKeyState(VK_CONTROL)) != 0;
	BOOL  isShiftPressed = (0x8000 & GetKeyState(VK_SHIFT)) != 0;

    switch (nChar)
	{

    case VK_HOME:
        {
            SetDate (COleDateTime::GetCurrentTime());
			SelectDay(m_dateSelected, FALSE, FALSE);
            Invalidate();
            UpdateWindow();
			return TRUE;
        }

    case VK_ESCAPE:
        if (m_pParentBtn != NULL)
	    {
		    GetParent ()->SendMessage (WM_CLOSE);
		    return TRUE;
	    }
		break;
	case VK_RETURN:
        if (m_pParentBtn != NULL)
	        {
		        m_pParentBtn->SetDate (m_LastAddedDate);
		        GetParent ()->SendMessage (WM_CLOSE);
                return TRUE;
	        }
		break;

    case VK_PRIOR:
		if (!isCtrlPressed)
        {
            int mon = m_dateSelected.GetMonth();
            mon --;

            if (mon < 1)
                mon = 12;

            int days = GetMaxMonthDay(COleDateTime(m_dateSelected.GetYear (), mon, 
                                m_dateSelected.GetDay(), 0, 0, 0));

            SetDate (m_LastAddedDate - COleDateTimeSpan(days, 0, 0, 0));
            Invalidate();
            UpdateWindow();
			return TRUE;
        }
        else
        {
            SetDate (COleDateTime(m_dateSelected.GetYear () - 1, m_dateSelected.GetMonth(), 
                                m_dateSelected.GetDay(), 0, 0, 0));
            Invalidate();
            UpdateWindow();
			return TRUE;
        }

	case VK_UP:
		if (!isCtrlPressed)
        {
			SelectDay(m_LastAddedDate + COleDateTimeSpan(-7, 0, 0, 0), FALSE, isShiftPressed);
            SetDate (m_LastAddedDate);
            Invalidate();
            UpdateWindow();
		}
		return TRUE;

    case VK_NEXT:
		if (!isCtrlPressed)
        {
            SetDate (m_LastAddedDate + COleDateTimeSpan(GetMaxMonthDay (m_dateSelected), 0, 0, 0));
            Invalidate();
            UpdateWindow();
			return TRUE;
        }
        else
        {
            SetDate (COleDateTime(m_dateSelected.GetYear () + 1, m_dateSelected.GetMonth(), 
                                m_dateSelected.GetDay(), 0, 0, 0));
            Invalidate();
            UpdateWindow();
			return TRUE;
        }

	case VK_DOWN:
		if (!isCtrlPressed)
		{
			SelectDay(m_LastAddedDate + COleDateTimeSpan(7, 0, 0, 0), FALSE, isShiftPressed);
            SetDate (m_LastAddedDate);
            Invalidate();
            UpdateWindow();
		}
		return TRUE;

	case VK_LEFT:
		if (!isCtrlPressed)
		{
			SelectDay(m_LastAddedDate + COleDateTimeSpan(-1, 0, 0, 0), FALSE, isShiftPressed);
            SetDate (m_LastAddedDate);
            Invalidate();
            UpdateWindow();
			return TRUE;
		}
	case VK_RIGHT:
		if (!isCtrlPressed)
		{
			SelectDay(m_LastAddedDate + COleDateTimeSpan(1, 0, 0, 0), FALSE, isShiftPressed);
            SetDate (m_LastAddedDate);
            Invalidate();
            UpdateWindow();
			return TRUE;
		}
	}

	return CBCGPPopupMenuBar::OnKey (nChar);
}
//****************************************************************************************
void CBCGPCalendarBar::OnSelectMonth(LPCRECT lpRect)
{
#ifndef DISABLE_MONTH_POPUP

	if ((m_styleFlags & CBCGPCalendarBar::CBR_NAVIGATION_BUTTONS) && m_bIsTearOff)
	{
		CBCGPWorkspace* pWS = GetWorkspace();

		if (!pWS)
			return;

		CMenu menu;

		menu.CreatePopupMenu();
		for(int i = 0; i < 12; i ++)
		{
			menu.AppendMenu(MF_STRING, BCGM_SETMONTHFIRST + i, GetMonthName(i + 1));
		}
		CRect capRect(lpRect);
		ClientToScreen(capRect);
		int x = capRect.left;
		int y = capRect.bottom;

		CBCGPPopupMenu monthPopup;

		CWnd* pParent = GetParent();
		if (pParent)
			pParent = pParent->GetParent();

		if (!pParent)
			pParent = this;

		
		UINT retID = pWS->GetContextMenuManager()->TrackPopupMenu (menu.Detach (), x, y, pParent);

		if (retID)
			OnMonthMenu(retID);	
		else
			InvalidateRect(lpRect);
	}

#endif
}

void CBCGPCalendarBar::OnMonthMenu(UINT id)
{
#ifndef DISABLE_MONTH_POPUP
	COleDateTime dt = m_dateSelected;
	dt.SetDate (dt.GetYear(), id - BCGM_SETMONTHFIRST + 1, dt.GetDay());
	SetDate(dt);
#endif
}

afx_msg LRESULT CBCGPCalendarBar::OnMouseLeave(WPARAM wp,LPARAM lp)
{
	if (m_hookMouseHelp != NULL || 
		(m_bMenuMode && !IsCustomizeMode () && GetDroppedDownMenu () != NULL))
	{
		return 0;
	}

	m_bTracked = FALSE;
	m_ptLastMouse = CPoint (-1, -1);

	if (m_iHighlighted >= 0)
	{
		int iButton = m_iHighlighted;
		m_iHighlighted = -1;

		OnChangeHot (m_iHighlighted);

		InvalidateButton (iButton);
		UpdateWindow(); // immediate feedback

		GetOwner()->SendMessage(WM_SETMESSAGESTRING, AFX_IDS_IDLEMESSAGE);
	}

	return 0;
}
//****************************************************************************************
void CBCGPCalendarBar::SetVertMargin (int nVertMargin)
{
	ASSERT_VALID (this);

	m_nVertMargin = nVertMargin;
	AdjustLayout ();
}
//*****************************************************************************************
void CBCGPCalendarBar::SetHorzMargin (int nHorzMargin)
{
	ASSERT_VALID (this);

	m_nHorzMargin = nHorzMargin;
	AdjustLayout ();
}
//************************************************************************************
LPCTSTR CBCGPCalendarBar::GetMonthName(int index)
{
	ASSERT(index > 0 && index <= 12);

	if (m_strMonthNames[0].IsEmpty())
	{
		CBCGPDefaultLocale dl;
		COleDateTime today = COleDateTime::GetCurrentTime();

		for (int i = 0; i < 12; i ++)
		{
			today.SetDate (today.GetYear(), i + 1, 1);
			m_strMonthNames[i] = today.Format (_T("%B"));
		}
	}
	
	if (index > 0 && index <= 12)
	{
		return m_strMonthNames[index - 1];
	}

	return NULL;
}

//****************************************************************************************
void CBCGPCalendarBar::SelectWeekday(const COleDateTime& date, BOOL isCtrlPressed, BOOL isShiftPressed)
{
	if (!(m_styleFlags & CBR_MULTISELECTION))
		return;
	
	int iMonth = m_dateSelected.GetMonth ();
	int iYear = m_dateSelected.GetYear ();
	int iDaysInMonth = GetMaxMonthDay (m_dateSelected);
	int iWeekDay = date.GetDayOfWeek ();
	
	if (!isCtrlPressed && !isShiftPressed)
	{
		ClearSelectedDays();
	}

	for (int iDay = 1; iDay <= iDaysInMonth; iDay ++)
	{
		COleDateTime date (iYear, iMonth, iDay, 0, 0, 0);
		if (date.GetDayOfWeek () == iWeekDay)
		{
			if (!isShiftPressed && IsDaySelected (date))
			{
				RemoveSelectedDay (iDay);
			}
			else
			{
				m_LastAddedDate = date;
				AddSelectedDay (iDay);
			}
		}
	}

	Invalidate ();
	UpdateWindow ();

	OnSelectionChanged ();
}
//****************************************************************************************
void CBCGPCalendarBar::SelectWeek(const COleDateTime& date, BOOL isCtrlPressed, BOOL isShiftPressed)
{
	if (!(m_styleFlags & CBR_MULTISELECTION))
		return;

	int iMonth = m_dateSelected.GetMonth ();
	int iYear = m_dateSelected.GetYear ();
	int iDaysInMonth = GetMaxMonthDay (m_dateSelected);

	int iWeekNo = CBCGPCalendarBar::GetWeekNo(date, m_nWeekStart);

	if (!isCtrlPressed && !isShiftPressed)
	{
		ClearSelectedDays();
	}

	for (int iDay = 1; iDay <= iDaysInMonth; iDay ++)
	{
		COleDateTime date (iYear, iMonth, iDay, 0, 0, 0);

		if (	iWeekNo == CBCGPCalendarBar::GetWeekNo(date, m_nWeekStart))
		{
			if (!isShiftPressed && IsDaySelected (date))
			{
				RemoveSelectedDay (iDay);
			}
			else
			{
				m_LastAddedDate = date;
				AddSelectedDay (iDay);
			}
		}
	}

	Invalidate ();
	UpdateWindow ();

	OnSelectionChanged ();
}
//****************************************************************************************
void CBCGPCalendarBar::SelectDaySequence(const COleDateTime& date)
{
	int iFirst = 0, iLast = 0;
	int d = date.GetDay ();
	for (POSITION pos = m_lstSelectedDays.GetHeadPosition (); pos != NULL; )
	{
		int i = m_lstSelectedDays.GetNext (pos);
		
		if (!i)
			continue;

		if (iFirst == 0)
			iFirst = i;

		if (iLast == 0)
			iLast = i;

		if (iFirst > i)
			iFirst = i;

		if (iLast < i)
			iLast = i;
	}

	if (d < iFirst)
	{
		iFirst = d;
	}
	else 
	{
		iLast = d;
	}

	ASSERT(iFirst <= iLast && iFirst > 0);
	
	ClearSelectedDays();

	for (int i = iFirst; i <= iLast; i ++)
	{
		m_LastAddedDate = date;
		AddSelectedDay(i);
	}
}
//****************************************************************************************
void CBCGPCalendarBar::SelectDay(const COleDateTime& date, BOOL isCtrlPressed, BOOL isShiftPressed)
{
	if (!(m_styleFlags & CBR_MULTISELECTION) || !isCtrlPressed && !isShiftPressed)
	{
		ClearSelectedDays();
		m_LastAddedDate = date;
		AddSelectedDay (date.GetDay());
	}

    if (!m_bIsTearOff)
    {
        m_dateSelected = date;
    }

	if (date.GetMonth () == m_dateSelected.GetMonth())
		//return;
	{
		if (isCtrlPressed)
		{
			if (!IsDaySelected(date))
			{
				m_LastAddedDate = date;
				AddSelectedDay (date.GetDay());
			}
			else
				RemoveSelectedDay(date.GetDay());
		}
		else if (isShiftPressed)
		{
			SelectDaySequence(date);
		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -