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 + -
显示快捷键?