亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? minicalendarctrl.cpp

?? 一款最完整的工業組態軟源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
		const int nOffset = (dtToday - dt).GetDays();
		ptToday.x = nOffset % nDaysPerWeek;
		ptToday.y = nOffset / nDaysPerWeek;
	}

	SelectFont(dc, FontDayNumber);

	CRect rectDate(xBeg, pt.y, xBeg + cxColumn, pt.y + m_dateSize.cy);

	for (int iRow = 0; iRow < nRowsPerCell; ++iRow)
	{
		rectDate.left = xBeg;
		rectDate.right = rectDate.left + cxColumn;

		for (int nCol = 0; nCol < nDaysPerWeek; ++nCol)
		{
			const int nMonth = dt.GetMonth();

			if (nMonth == nThisMonth ||	(m_bShowNonMonthDays &&
					((bBegRange && dt < dtCell) || (bEndRange && dt > dtCell)) ) )
			{
				const CRect rectDigits(
					rectDate.left + m_daySpace.cx / 2,
					rectDate.top,
					rectDate.right + m_daySpace.cx / 2,
					rectDate.bottom + 1);

				COLORREF crText = (nMonth == nThisMonth) ?
					GetSysColor(COLOR_BTNTEXT) : GetSysColor(COLOR_GRAYTEXT);

				if (IsDateSelected(dt))
				{
					crText = COLOR_GRAYTEXT;

					dc.FillSolidRect(
						rectDigits.left, 
						rectDigits.top,
						rectDigits.Width(), 
						rectDate.Height() + m_daySpace.cy,
						GetSysColor(COLOR_BTNFACE));
				}

				TCHAR szBuffer[10];
				_itot(dt.GetDay(), szBuffer, 10);

				dc.SetTextColor(crText);
				dc.DrawText(szBuffer, _tcslen(szBuffer), rectDate,
					DT_BOTTOM | DT_RIGHT | DT_SINGLELINE);

				// Check if date should be hilighted as today.
				if (ptToday.x == nCol && ptToday.y == iRow){
					CRect r = rectDigits;
					r.bottom += 3;
					dc.Draw3dRect(r, RGB(0x80,0,0), RGB(0x80,0,0));
				}
			}

			rectDate.OffsetRect(cxColumn, 0);
			dt += 1;
		}

		rectDate.OffsetRect(0, m_dateSize.cy + m_daySpace.cy);
	}

	return rectDate.bottom - pt.y;
}

// ----------------------------------------------------------------------------
void
CMiniCalendarCtrl::DoPaint(CDCHandle dc)
{
	CRect rectClient;
	GetClientRect(rectClient);

	CRect rectClip;

	dc.SaveDC();
	dc.SetBkMode(TRANSPARENT);
	dc.GetClipBox(rectClip);

	DrawBorder(dc, rectClient);

	for (int nRow = 0; nRow < m_nRows; ++nRow)
		for (int nCol = 0; nCol < m_nCols; ++nCol)
		{
			CRect rectCell(0, 0, m_cellSize.cx, m_cellSize.cy);

			rectCell.OffsetRect(
				nCol * m_cellSize.cx + rectClient.left,
				nRow * m_cellSize.cy + rectClient.top);

			if (rectClip & rectCell)
			{
				rectCell.top += DrawHeader(dc, rectCell.TopLeft(), nCol, nRow);
				dc.FillSolidRect(rectCell, m_crBack);

				rectCell.top += DrawDaysOfWeek(dc, rectCell.TopLeft(), nCol, nRow);
				DrawDays(dc, rectCell.TopLeft(), nCol, nRow);
			}
		}

	dc.RestoreDC(-1);
}

// ----------------------------------------------------------------------------
void
CMiniCalendarCtrl::NotifySelChanged()
{
	NMMCXSELCHANGED nm = {0};

	if (m_dtSelect.GetStatus() == COleDateTime::valid)
	{
		if (m_bMultiSelEnabled)
		{
			if (m_dtAnchor > m_dtSelect)
			{
				m_dtSelect.GetAsSystemTime(nm.dateFrom);
				m_dtAnchor.GetAsSystemTime(nm.dateTo);
			}
			else
			{
				m_dtAnchor.GetAsSystemTime(nm.dateFrom);
				m_dtSelect.GetAsSystemTime(nm.dateTo);
			}
		}
		else
		{
			m_dtSelect.GetAsSystemTime(nm.dateFrom);
			m_dtSelect.GetAsSystemTime(nm.dateTo);
		}
	}

	NotifyParent(MCXN_SELCHANGED, reinterpret_cast<NMHDR*>(&nm));
}

// ----------------------------------------------------------------------------
void
CMiniCalendarCtrl::NotifyParent(UINT nCode, LPNMHDR lpnmh)
{
	lpnmh->code = nCode;
	lpnmh->hwndFrom = m_hWnd;
	lpnmh->idFrom = GetDlgCtrlID();

	::SendMessage(hNotifyWindow,WM_NOTIFY, lpnmh->idFrom, (LPARAM) lpnmh);
}

// ----------------------------------------------------------------------------
BOOL
CMiniCalendarCtrl::HitTest(HitTestInfo& ht)
{
	ht.nFlags = 0;
	ht.nCol = -1;
	ht.nRow = -1;
	ht.dtHit.SetStatus(COleDateTime::invalid);

	CPoint ptHit = ht.ptHit;

	CRect rectClient;
	GetClientRect(rectClient);

	if (m_bShow3dBorder)
	{
		rectClient.DeflateRect(nBorderSize, nBorderSize);
		ptHit -= CSize(nBorderSize, nBorderSize); 
	}

	if (! rectClient.PtInRect(ht.ptHit))
		return FALSE;

	//rectClient.OffsetRect(-nBorderSize, -nBorderSize);

	// Determine which cell was hit.

	const int nCol = ptHit.x / m_cellSize.cx;
	const int nRow = ptHit.y / m_cellSize.cy;

	if (nCol >= m_nCols)
		return FALSE;

	// Determine if a button was hit.

	if (nRow >= m_nRows)
	{
		return FALSE;
	}

	ht.nCol = nCol;
	ht.nRow = nRow;

	// Determine which part of the cell was hit.

	ptHit.x %= m_cellSize.cx;
	ptHit.y %= m_cellSize.cy;

	if (ptHit.y < (int) m_cyHeader)
	{
		ht.nFlags = htHeader;

		const CRect rectHeader(0, 0, m_cellSize.cx, m_cyHeader);

		if (nRow == 0)
		{
			CRect rl = MC_GetArrowRect(rectHeader, TRUE);
			CRect rr = MC_GetArrowRect(rectHeader, FALSE);
			rl.InflateRect(4,4);
			rr.InflateRect(4,4);
			
			if (nCol == 0 && rl.PtInRect(ptHit))
				ht.nFlags |= htBack;

			else if (nCol == m_nCols - 1 && rr.PtInRect(ptHit))
				ht.nFlags |= htNext;
		}

		return TRUE;
	}

	ptHit.y -= m_cyHeader + m_dateSize.cy + 4;

	// Determine if a date was hit.

	const int cxColumn = m_dateSize.cx + m_daySpace.cx;

	CRect rectDate(CPoint(m_xCol, 0), m_dateSize);

	for (int r = 0; r < nRowsPerCell; ++r)
	{
		rectDate.left = m_xCol;
		rectDate.right = rectDate.left + cxColumn;

		for (int c = 0; c < nDaysPerWeek; ++c)
		{
			if (rectDate.PtInRect(ptHit))
			{
				const COleDateTime dtCell = GetMonthFromCell(nCol, nRow);
				//const COleDateTime dtCell = m_dtSelect;

				const int nDay = r * nDaysPerWeek + c;
				const int nMonth = dtCell.GetMonth();

				const COleDateTime dtBeg = GetFirstDayInCell(nCol, nRow);
				const COleDateTime dtHit = dtBeg + COleDateTimeSpan(nDay);

				if (dtHit.GetMonth() == nMonth)
				{
					ht.nFlags = htDate;
					ht.dtHit = dtHit;
					return TRUE;
				}

				if (m_bShowNonMonthDays)
				{
					if (nCol == 0 && nRow == 0 && dtHit < dtCell)
					{
						ht.nFlags = htDate | htBack;
						ht.dtHit = dtHit;
						return TRUE;
					}

					if (nCol == m_nCols - 1 && nRow == m_nRows - 1 && dtHit > dtCell)
					{
						ht.nFlags = htDate | htNext;
						ht.dtHit = dtHit;
						return TRUE;
					}
				}

				return FALSE;
			}

			rectDate.OffsetRect(cxColumn, 0);
		}

		rectDate.OffsetRect(0, m_dateSize.cy + m_daySpace.cy);
	}

	return FALSE;

}

// ----------------------------------------------------------------------------
void
CMiniCalendarCtrl::DoScroll(UINT nFlags, int nMonths)
{
	ATLASSERT(nMonths > 0);

	if (nFlags & htBack)
		nMonths = -m_nMonthsToScroll;
	else if (nFlags & htNext)
		nMonths = m_nMonthsToScroll;
	else
		nMonths = 0;

	if (nMonths)
	{
		m_nStartYear += nMonths / nMonthsPerYear;
		m_nStartMonth += nMonths % nMonthsPerYear;

		if (m_nStartMonth < 1)
		{
			m_nStartMonth += nMonthsPerYear;
			--m_nStartYear;
		}
		else if (m_nStartMonth > nMonthsPerYear)
		{
			m_nStartMonth -= nMonthsPerYear;
			++m_nStartYear;
		}

		RedrawWindow();
	}
}

// ----------------------------------------------------------------------------
void
CMiniCalendarCtrl::GetMaxTextExtent(CDCHandle dc, SIZE& size)
{
	// Determine the maximum size for the range of day numbers.
	// Single-digit day numbers are obviously smaller, so start at 10.

	for (int i = 10; i <= 31; ++i)
	{
		TCHAR sz[10];
		_itot(i, sz, 10);

		SIZE sizeDate = {0};
		dc.GetTextExtent(sz, _tcslen(sz), &sizeDate);

		size.cx = max(sizeDate.cx, size.cx);
		size.cy = max(sizeDate.cy, size.cy);
	}
}

// ----------------------------------------------------------------------------
void
CMiniCalendarCtrl::RecalcLayout()
{
	ATLASSERT(IsWindow());

	CClientDC dc(m_hWnd);
	HFONT hFontOrig = dc.SelectStockFont(DEFAULT_GUI_FONT);

	m_dateSize = CSize(0, 0);
	
	SelectFont(dc.m_hDC, FontDayNumber);
	GetMaxTextExtent(dc.m_hDC, m_dateSize);

	SelectFont(dc.m_hDC, FontSpecialDayNumber);
	GetMaxTextExtent(dc.m_hDC, m_dateSize);

	// Now check names of weekdays.

	m_cyDayNames = 0;
	SelectFont(dc.m_hDC, FontDayName);

	LPCTSTR szNames = _T("SMTWF");

	for (size_t i = 0; i < _tcslen(szNames); ++i)
	{
		SIZE size = {0};
		dc.GetTextExtent(szNames + i, 1, &size);

		m_dateSize.cx = max(size.cx, m_dateSize.cx);
		m_cyDayNames = max((UINT) size.cy, m_cyDayNames);
	}

	// Lastly, calculate the header size.

	const int cxWeek = (m_dateSize.cx + m_daySpace.cx) * nDaysPerWeek + m_daySpace.cx;
	const int cxCalendar = cxWeek + nCellMargin * 2;

	int cxHeader = 0;

	m_cyHeader = 0;
	SelectFont(dc.m_hDC, FontHeader);

	CString str;

	for (int nYear = 1990; nYear < 2020; ++nYear)
		for (int nMonth = 1; nMonth <= nMonthsPerYear; ++nMonth)
		{
			const COleDateTime dt(nYear, nMonth, 1, 0, 0, 0);
			str = dt.Format(HEADER_FORMAT);

			SIZE size = {0};
			dc.GetTextExtent(str, str.GetLength(), &size);

			cxHeader = max(size.cx, cxHeader);
			m_cyHeader = max((UINT) size.cy, m_cyHeader);
		}

	// Header padding.
	m_cyHeader += 6;

	m_cellSize.cx = max(cxHeader + 30, cxCalendar);

	m_cellSize.cy = m_cyHeader + (m_cyDayNames + 4) + 
		(m_dateSize.cy + m_daySpace.cy) * nRowsPerCell;

	m_xCol = (m_cellSize.cx - cxWeek) / 2;

	dc.SelectFont(hFontOrig);
}

// ----------------------------------------------------------------------------
void
CMiniCalendarCtrl::ApplyStyle(DWORD dwStyle)
{
	m_bShow3dBorder = (dwStyle & MCX_3DBORDER) != 0;
	m_bShowNonMonthDays = (dwStyle & MCX_SHOWNONMONTHDAYS) != 0;
	m_bHighlightToday = (dwStyle & MCX_HIGHLIGHTTODAY) != 0;
	m_bMultiSelEnabled = (dwStyle & MCX_MULTISELECT) != 0;

	if (! m_bMultiSelEnabled)
		ResetRange();

	Invalidate();
}

// ----------------------------------------------------------------------------
CString
CMiniCalendarCtrl::GetDayOfWeekName(int nDayOfWeek) const
{
	ATLASSERT(nDayOfWeek >= 1 && nDayOfWeek <= nDaysPerWeek);

	// NOTE: both m_nFirstDayOfWeek and nDayOfWeek are 1-based!

	// Apr 1, 2001 is known to be a Sunday, ie dayOfWeek == 1
	const COleDateTime dt =
		COleDateTime(2001, 4, 1, 0, 0, 0) + 
		COleDateTimeSpan((nDayOfWeek - 1) + (m_nFirstDayOfWeek - 1));

	return dt.Format(_T("%A"));
}

// ----------------------------------------------------------------------------
COleDateTime
CMiniCalendarCtrl::GetMonthFromCell(int nCol, int nRow) const
{
	ATLASSERT(nCol >= 0 && nRow >= 0);

	// NOTE: m_nMonth is 1-based!
	const int nMonth = (m_nStartMonth - 1) + nRow * m_nCols + nCol;
	
	return COleDateTime(m_nStartYear + nMonth / nMonthsPerYear, 
		nMonth % nMonthsPerYear + 1, 1, 0, 0, 0);
}

// ----------------------------------------------------------------------------
COleDateTime
CMiniCalendarCtrl::GetFirstDayInCell(int nCol, int nRow) const
{
	const COleDateTime dt = GetMonthFromCell(nCol, nRow);
	const int nPriorDays = 
		(dt.GetDayOfWeek() - m_nFirstDayOfWeek + nDaysPerWeek) % nDaysPerWeek;

	return dt - COleDateTimeSpan(nPriorDays);
}

// ----------------------------------------------------------------------------
void
CMiniCalendarCtrl::CreateFont(int nFont)
{
	ATLASSERT(nFont >= FontHeader && nFont <= FontSpecialDayNumber);

	FontInfo* pInfo = m_font + nFont;

	CFont font;
	font.CreatePointFont(pInfo->nFontSize * 10, pInfo->strFaceName);

	LOGFONT lf = {0};
	font.GetLogFont(&lf);	
	font.DeleteObject();

	{
		CClientDC dc(m_hWnd);
		lf.lfHeight	= -MulDiv(pInfo->nFontSize, dc.GetDeviceCaps(LOGPIXELSY), 72);
		lf.lfWeight = FW_NORMAL;
		lf.lfQuality = PROOF_QUALITY;
	}

	if (pInfo->bBold)
		lf.lfWeight = FW_BOLD;

	if (pInfo->bItalic)
		lf.lfItalic = TRUE;

	if (pInfo->bUnderline)
		lf.lfUnderline = TRUE;

	if (! pInfo->font.IsNull())
		pInfo->font.DeleteObject();

	pInfo->font.CreateFontIndirect(&lf);
}

// ----------------------------------------------------------------------------
void
CMiniCalendarCtrl::SelectFont(CDCHandle dc, int nFont)
{
	ATLASSERT(nFont >= FontHeader && nFont <= FontSpecialDayNumber);

	dc.SetTextColor(m_font[nFont].crColor);
	dc.SelectFont(m_font[nFont].font);
}

// ----------------------------------------------------------------------------
CMiniCalendarCtrl::FontInfo::FontInfo()
{
	strFaceName = _T("Tahoma");
	crColor = GetSysColor(COLOR_BTNTEXT);
	nFontSize = 9;
	bBold = FALSE;
	bItalic = FALSE;
	bUnderline = FALSE;
}

// ----------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区四区精品在线视频 | jlzzjlzz亚洲日本少妇| 成人精品视频一区二区三区 | 日韩二区在线观看| 国产传媒一区在线| 日本亚洲三级在线| 成人97人人超碰人人99| 欧美另类高清zo欧美| 国产女人18毛片水真多成人如厕| 亚洲国产va精品久久久不卡综合| 国产高清久久久| 欧美一区二区三区免费视频 | 亚洲综合清纯丝袜自拍| 国产一区二区精品在线观看| 欧美午夜视频网站| 国产精品成人午夜| 国产一区二区三区四区五区入口| 欧美美女视频在线观看| 亚洲激情一二三区| 99久久婷婷国产综合精品电影| 久久久久一区二区三区四区| 六月丁香婷婷色狠狠久久| 欧美三级电影网站| 亚洲一区精品在线| 色伊人久久综合中文字幕| 国产精品不卡一区| 国产电影一区在线| 久久久99精品免费观看不卡| 久久99精品久久久久久国产越南| 91精品国产一区二区三区| 亚洲图片自拍偷拍| 欧美日韩成人高清| 日日骚欧美日韩| 91精品91久久久中77777| 国产精品久久久久三级| 免费亚洲电影在线| 欧美精选一区二区| 亚洲在线免费播放| 99视频一区二区| 国产视频一区二区在线观看| 中文字幕高清不卡| 精品一区二区三区视频| 91麻豆精品91久久久久久清纯| 亚洲欧美另类久久久精品| av一本久道久久综合久久鬼色| 久久久综合九色合综国产精品| 免费观看一级欧美片| 欧美精品tushy高清| 亚洲国产视频a| 欧洲一区二区av| 亚洲综合色视频| 欧美系列在线观看| 一区二区三国产精华液| 91久久免费观看| 亚洲精品久久7777| 欧美体内she精视频| 亚洲777理论| 日韩欧美色电影| 国产一区在线精品| 国产精品网站导航| 色婷婷久久久久swag精品| 亚洲色图都市小说| 欧美系列亚洲系列| 日本不卡在线视频| 欧洲一区二区三区免费视频| 亚洲精品亚洲人成人网在线播放| 91久久免费观看| 日韩国产欧美三级| 久久视频一区二区| 成人黄色电影在线| 亚洲综合清纯丝袜自拍| 欧美日韩成人在线一区| 韩国av一区二区三区四区| 国产片一区二区| 欧美艳星brazzers| 亚洲一区二区三区影院| 色网站国产精品| 欧美不卡在线视频| 亚洲福利视频三区| 日韩美女在线视频| 国产成a人无v码亚洲福利| 国产视频一区在线播放| 色婷婷久久一区二区三区麻豆| 日韩成人午夜精品| 久久奇米777| 国产精品99精品久久免费| 国产精品免费人成网站| 欧美视频自拍偷拍| 国产精品资源在线| 一区二区不卡在线视频 午夜欧美不卡在 | 另类欧美日韩国产在线| 欧美激情一区不卡| 欧美精品 国产精品| 国产精品一区二区黑丝| 亚洲高清免费观看高清完整版在线观看| 久久99久久久欧美国产| 日韩精品一区二区三区蜜臀| 成人免费视频免费观看| 亚洲国产精品久久一线不卡| 91麻豆精品国产综合久久久久久| 高清日韩电视剧大全免费| 丝袜亚洲另类欧美| 国产精品激情偷乱一区二区∴| 日韩午夜电影av| 色婷婷亚洲精品| 成人影视亚洲图片在线| 蜜桃av一区二区三区电影| 一区二区三区不卡视频| 国产精品国模大尺度视频| 精品久久久久久久一区二区蜜臀| 一本大道久久a久久精二百| 国产一区 二区| 午夜精品福利在线| 亚洲人成网站色在线观看| 2020国产精品自拍| 欧美一卡二卡三卡| 欧美日韩国产高清一区二区三区| 一区二区三区欧美久久| 国产婷婷色一区二区三区四区| 一本大道av伊人久久综合| 美女视频黄频大全不卡视频在线播放| 亚洲视频你懂的| 欧美国产成人在线| 久久久影视传媒| 欧美日韩国产成人在线91| 在线影院国内精品| 91麻豆国产在线观看| 成人app在线| 成人午夜免费av| 国产福利一区二区三区| 韩国av一区二区| 久久99精品久久只有精品| 美女国产一区二区三区| 丝瓜av网站精品一区二区| 亚洲成人av电影| 同产精品九九九| 日韩精品国产精品| 亚洲国产精品久久一线不卡| 亚洲免费毛片网站| 日本一区二区三区视频视频| 51精品视频一区二区三区| 一区视频在线播放| 日韩美女啊v在线免费观看| 欧美撒尿777hd撒尿| 日韩亚洲欧美在线| 国产日韩欧美不卡在线| 国产精品久久久久久久久免费丝袜| 日韩免费高清电影| 欧美一级久久久久久久大片| www.成人网.com| 成人免费毛片aaaaa**| 国内偷窥港台综合视频在线播放| 国产精品66部| 狠狠色狠狠色综合系列| 成人综合在线观看| 日本成人在线看| 国产91对白在线观看九色| 精品一区二区在线免费观看| 国产成人av电影在线| 国产激情精品久久久第一区二区| 亚洲成av人片一区二区梦乃 | 国产在线国偷精品免费看| ww亚洲ww在线观看国产| 日韩午夜av一区| 日韩欧美国产一区在线观看| 91麻豆精品国产91久久久久| 欧美va亚洲va在线观看蝴蝶网| 日韩欧美中文字幕精品| 久久亚洲精华国产精华液| 国产拍揄自揄精品视频麻豆| 欧美日韩亚洲高清一区二区| aa级大片欧美| 91蝌蚪porny九色| 日韩午夜电影av| 久久久久亚洲蜜桃| 国产精品久久久久久福利一牛影视| 国产精品嫩草影院av蜜臀| 亚洲免费在线视频| 午夜精品一区二区三区电影天堂 | 国产女人18毛片水真多成人如厕 | 91在线porny国产在线看| 亚洲午夜免费电影| 久久综合九色欧美综合狠狠| 久久久亚洲高清| 欧美一级高清片在线观看| 欧美视频一区二区三区四区 | 亚洲一区二区免费视频| 一区二区三区四区在线播放 | 精品国产乱码久久久久久1区2区 | 蜜臀久久久久久久| 精彩视频一区二区| 成人高清av在线| 天天亚洲美女在线视频| 成人午夜电影网站| av男人天堂一区| av中文字幕亚洲| 国产成人精品1024| 成人一二三区视频| 欧美区一区二区三区| 久久精品一区二区三区不卡牛牛 |