formitemdatetime.cpp

来自「基于WINDOWS mobile 的用于创建一个窗体和自定义试图的工程」· C++ 代码 · 共 263 行

CPP
263
字号
// FormItemDateTime.cpp: implementation of the CFormItemDateTime class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "DrawTextEx.h"
#include "FormItemDateTime.h"
#include "FormListCtrl.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif


//---------------------------------------------------------------------------
//
//	CFormItemDateTime
//
//---------------------------------------------------------------------------


CFormItemDateTime::CFormItemDateTime()
{

}


CFormItemDateTime::~CFormItemDateTime()
{

}


// CFormItemDateTime::CustomDraw
//
//		Draws a date and time control
//
LRESULT CFormItemDateTime::CustomDraw(CFormListCtrl* pForm, NMLVCUSTOMDRAW *pLVCD)
{
	DWORD	dwDrawStage = pLVCD->nmcd.dwDrawStage;
	LRESULT	lRet		= CDRF_SKIPDEFAULT;

	if(dwDrawStage == (CDDS_ITEMPREPAINT | CDDS_SUBITEM))
	{
		if(pLVCD->iSubItem == 1)
		{
			HDC		hDC		= pLVCD->nmcd.hdc;
			RECT	rc		= pLVCD->nmcd.rc;
			HFONT	hFontOld= NULL;
			CFont*	pFont	= pForm->GetContentFont();

			if(pFont)
				hFontOld = (HFONT)::SelectObject(hDC, *pFont);

			rc.left += 6;
			rc.top++;

			if(m_dwStyle & DTS_DATEANDTIME)
			{
			}
			else
			{
				TCHAR	szBuf[65];
				_tcscpy(szBuf, RenderData(NULL));

				DrawTextEx(hDC, szBuf, -1, &rc, 
						DT_LEFT | DT_SINGLELINE | DT_TOP | DT_END_ELLIPSIS | DT_MODIFYSTRING);
			}

			if(hFontOld)
				::SelectObject(hDC, hFontOld);

			if(m_dwFlags & FIF_LINE)
				DrawBottomLine(pLVCD);

			DrawFocus(hDC, &pLVCD->nmcd.rc);
		}
		else
		{
			//
			// Use default painter
			//
			lRet = CFormItem::CustomDraw(pForm, pLVCD);
		}
	}
	return lRet;
}


// CFormItemDateTime::RenderData
//
//		Renders the data as a string
//
LPCTSTR CFormItemDateTime::RenderData(LV_DISPINFO *pDispInfo)
{
	LPCTSTR			pszData = _T("");
	int				iSubItem;

	if(!pDispInfo)
		iSubItem = 1;
	else
		iSubItem = pDispInfo->item.iSubItem;

	if(iSubItem == 1)
	{
		TCHAR	szLoc[128];

		if(m_dwStyle == 0 || (m_dwStyle && DTS_SHORTDATEFORMAT))
		{
			GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SSHORTDATE,
				szLoc, 128);
		}
		else if(m_dwStyle & DTS_LONGDATEFORMAT)
		{
			GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SLONGDATE,
				szLoc, 128);
		}
		else if(m_dwStyle & DTS_TIMEFORMAT)
		{
			GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_STIMEFORMAT,
				szLoc, 128);
		} 

		m_dtf.SetDateTime(m_odtDateTime);
		m_dtf.SetFormat(szLoc);
		pszData = m_dtf.GetString();
	}
	else
		pszData = CFormItem::RenderData(pDispInfo);

	return pszData;
}


// CFormItemDateTime::ShowEditor
//
//		Shows or hides the specialized editor
//
BOOL CFormItemDateTime::ShowEditor(CFormListCtrl* pForm, BOOL bShow, int iItem, int iSubItem)
{
	BOOL	bOk = FALSE;

	ASSERT(pForm);

	if(m_dwStyle & DTS_DATEANDTIME)
	{
		CPoint	pt;

		pt = pForm->GetClickPoint();
	}
	else
		bOk = ShowDateTime(pForm, iItem, bShow);

	return bOk;
}


// CFormItemDateTime::ShowDateTime
//
//		Shows the date time control
//
BOOL CFormItemDateTime::ShowDateTime(CFormListCtrl *pForm, int iItem, BOOL bShow)
{
	BOOL	bOk = FALSE;

	if(bShow)
	{
		RECT	rc;

		if(pForm->GetSubItemRect(iItem, 1, rc))
		{
			DWORD	dwStyle = m_dwStyle & ~DTS_DATEANDTIME;

			dwStyle |= WS_CHILD | WS_VISIBLE;

			//
			// Create the date time control
			//
			rc.left		+= 4;
			rc.top		-= 1;
			rc.bottom	-= 1;
			if(m_dwStyle & DTS_DATEANDTIME)
				rc.right -= 48;

			if(m_wndDateTime.Create(dwStyle, rc, pForm, IDC_FORM_ITEM))
			{
				//
				// Setup the date time control
				//
				m_wndDateTime.SetTime(m_odtDateTime);
				m_wndDateTime.SetFont(pForm->GetContentFont());
				m_wndDateTime.SetFocus();

				SHSipPreference(*pForm, SIP_UP);
				bOk = TRUE;
			}
		}
	}
	else
	{
		if(IsWindow(m_wndDateTime))
		{
			bOk = m_wndDateTime.GetTime(m_odtDateTime);
			if(bOk)
			{
				SHSipPreference(*pForm, SIP_DOWN);
				m_wndDateTime.DestroyWindow();
			}
		}
	}

	return bOk;
}


// CFormItemDateTime::ShowTimeOnly
//
//		Shows the time combobox
//
BOOL CFormItemDateTime::ShowTimeOnly(CFormListCtrl *pForm, int iItem, BOOL bShow)
{
	BOOL	bOk = FALSE;

	if(bShow)
	{
		CRect	rc;

		if(pForm->GetSubItemRect(iItem, 1, rc))
		{
			DWORD	dwStyle = WS_CHILD | WS_VISIBLE | WS_VSCROLL  | CBS_DROPDOWN;

			//
			// Create the date time control
			//
			rc.left		+= rc.Width() - 48;
			rc.top		-= 1;
			rc.bottom	+= rc.Height() * 4;

			if(m_wndTime.Create(dwStyle, rc, pForm, IDC_FORM_ITEM))
			{
				//
				// Setup the combo box control
				//
				m_wndTime.SetFont(pForm->GetContentFont());
				m_wndTime.SetFocus();

				bOk = TRUE;
			}
		}
	}
	else
	{
		if(IsWindow(m_wndTime))
		{
		}
	}

	return bOk;
}

⌨️ 快捷键说明

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