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

📄 timedlg.cpp

📁 EVC开发的手持导航的用户操作界面
💻 CPP
字号:
// TimeDlg.cpp : implementation file
//

#include "stdafx.h"
#include "GPS.h"
#include "TimeDlg.h"

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

#include "TimeOfTimeDlg.h"
#include "TimeOfDateDlg.h"
#include "TimeOfZoneDlg.h"
/////////////////////////////////////////////////////////////////////////////
SYSTEMTIME time;
// CTimeDlg dialog


CTimeDlg::CTimeDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTimeDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTimeDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CTimeDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTimeDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CTimeDlg, CDialog)
	//{{AFX_MSG_MAP(CTimeDlg)
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_PAINT()
	ON_WM_ERASEBKGND()
	ON_WM_TIMER()
	ON_WM_KEYDOWN()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTimeDlg message handlers

BOOL CTimeDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	m_Left=0;
	m_Top=0;
	m_Width=320;
	m_Height=240;
	::SetWindowPos(this->GetSafeHwnd(),HWND_TOP,m_Left, m_Top, 
		m_Width, m_Height,SWP_SHOWWINDOW);
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen
	// TODO: Add extra initialization here
	m_BackScreenBitmap.LoadBitmap(IDB_TIME_BKG);

	SetToolRectangle();

	m_prePick=-1;
	m_currentPick=0;
	m_bIsExecute=FALSE ;
	//得到当前时间
//	SetTimer(1,2000,NULL);

//	CDC dc;
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CTimeDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
	m_prePick = m_currentPick ;

	for ( int i = 0 ; i < 4 ; i ++ ) 
	{		
		if (  m_rect[i].PtInRect (point)   )
		{									
		
			{	
				
				CDC* pDC = GetDC () ;
				CDC  memDC ;
				memDC.CreateCompatibleDC ( pDC ) ;
				
				CBitmap bmp ;
				
				switch ( m_prePick )
				{
				case 0:
					{//白
						bmp.LoadBitmap ( IDB_TIME_DATE_W ) ;
						
						CBitmap* pOldBitmap = memDC.SelectObject ( &bmp ) ;
						
						pDC->BitBlt ( m_rect[m_prePick].TopLeft().x, m_rect[m_prePick].TopLeft().y, m_rect[m_prePick].Width(), 
							m_rect[m_prePick].Height(), &memDC, 0, 0, SRCCOPY ) ;
						
						memDC.SelectObject ( pOldBitmap ) ;						
						
						break ;
					}
				case 1:
					{
						bmp.LoadBitmap ( IDB_TIME_TIME_W ) ;
						
						CBitmap* pOldBitmap = memDC.SelectObject ( &bmp ) ;
						
						pDC->BitBlt ( m_rect[m_prePick].TopLeft().x, m_rect[m_prePick].TopLeft().y, m_rect[m_prePick].Width(), 
							m_rect[m_prePick].Height(), &memDC, 0, 0, SRCCOPY ) ;
						
						memDC.SelectObject ( pOldBitmap ) ;
						break ;
					}
				case 2:
					{
						bmp.LoadBitmap ( IDB_TIME_ZONE_W ) ;
						
						CBitmap* pOldBitmap = memDC.SelectObject ( &bmp ) ;
						
						pDC->BitBlt ( m_rect[m_prePick].TopLeft().x, m_rect[m_prePick].TopLeft().y, m_rect[m_prePick].Width(), 
							m_rect[m_prePick].Height(), &memDC, 0, 0, SRCCOPY ) ;
						
						memDC.SelectObject ( pOldBitmap ) ;
						break ;
					}
				case 3:
					{
						bmp.LoadBitmap ( IDB_TIME_CANCEL_W ) ;
						
						CBitmap* pOldBitmap = memDC.SelectObject ( &bmp ) ;
						
						pDC->BitBlt ( m_rect[m_prePick].TopLeft().x, m_rect[m_prePick].TopLeft().y, m_rect[m_prePick].Width(), 
							m_rect[m_prePick].Height(), &memDC, 0, 0, SRCCOPY ) ;
						
						memDC.SelectObject ( pOldBitmap ) ;
						break ;
					}	
			
					
				
				}
				
				CBitmap   bmp1 ;
				switch ( i )
				{
				case 0:
					{			
						//load the bitmap	
						//黑
						bmp1.LoadBitmap ( IDB_TIME_DATE_B ) ;
						
						CBitmap* pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
						
						pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(), 
							m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
						
						memDC.SelectObject ( pOldBitmap ) ;
						
						break ;
					}
				case 1:			
					{				
						//load the bitmap
						
						bmp1.LoadBitmap ( IDB_TIME_TIME_B) ;
						
						CBitmap* pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
						
						pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(), 
							m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
						
						memDC.SelectObject ( pOldBitmap ) ;
						
						break ;
					}
				case 2:
					{							
						//load the bitmap
						
						bmp1.LoadBitmap ( IDB_TIME_ZONE_B ) ;
						
						CBitmap* pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
						
						pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(), 
							m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
						
						memDC.SelectObject ( pOldBitmap ) ;
						
						break ;
					}
				case 3:
					{
						//load the bitmap
						
						bmp1.LoadBitmap ( IDB_TIME_CANCEL_B ) ;
						
						CBitmap* pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
						
						pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(), 
							m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
						
						memDC.SelectObject ( pOldBitmap ) ;
						break ;
					}
			
				
				}
				
				memDC.DeleteDC () ;
				ReleaseDC ( pDC ) ;
				
				m_currentPick = i ;				
			}	

		}
	}
}

void CTimeDlg::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CTimeOfZoneDlg timeofzone_dlg;
	CTimeOfTimeDlg timeoftime_dlg;
	CTimeOfDateDlg timeofdate_dlg;
	// TODO: Add your message handler code here and/or call default
	CopyBMP(IDB_TIME_DATE_W,0);
	CopyBMP(IDB_TIME_TIME_W,1);
	CopyBMP(IDB_TIME_ZONE_W,2);
	CopyBMP(IDB_TIME_CANCEL_W,3);

	
	

	m_bIsExecute = FALSE ;
	for ( int i = 0 ; i < 4 ; i ++ ) 
	{		
		if (  m_rect[i].PtInRect (point)   )
		{
			if ( m_currentPick == i)
			{
				m_bIsExecute =TRUE ;
				switch (i)
				{
				case 0:	
						timeofdate_dlg.DoModal();
						
						break ;
				case 1:
						timeoftime_dlg.DoModal();
						break ;
				case 2:
						timeofzone_dlg.DoModal();
						break ;
				case 3:	
						CDialog::OnOK();		
						break ;
			
			
				default:
						break ;
				}
			}
		}
		
	}
}

void CTimeDlg::OnPaint() 
{
	
	CPaintDC dc(this); // device context for painting
	
	// TODO: Add your message handler code here
	DrawInterface(dc);
	// Do not call CDialog::OnPaint() for painting messages
	
	CString m_strTimeDate;
	CString m_strTimeTime;
	CString m_strTimeZone;
	GetLocalTime(&time);

	dc.SetBkMode(TRANSPARENT);
	dc.SetTextColor(RGB(255,0,10));

	m_strTimeDate.Format(_T("%04d.%02d.%02d"),time.wYear,time.wMonth,time.wDay);
	m_strTimeTime.Format(_T(" %02d:%02d:%02d"),time.wHour,time.wMinute,time.wSecond);
	
	dc.ExtTextOut(98,51,ETO_CLIPPED,CRect(98,51,171,69),m_strTimeDate,NULL);
	dc.ExtTextOut(98,115,ETO_CLIPPED,CRect(98,115,171,131),m_strTimeTime,NULL);
	dc.ExtTextOut(117,178,ETO_CLIPPED,CRect(117,168,179,204),L"中国",NULL);

		
}

BOOL CTimeDlg::OnEraseBkgnd(CDC* pDC) 
{
	// TODO: Add your message handler code here and/or call default
	BITMAP bmpInfo;
	m_BackScreenBitmap.GetBitmap(&bmpInfo);
	
	// Create an in-memory DC compatible with the
	// display DC we're using to paint
	CDC dcMemory;
	dcMemory.CreateCompatibleDC(pDC);
	
	
	// Select the bitmap into the in-memory DC
	CBitmap* pOldBitmap = dcMemory.SelectObject(&m_BackScreenBitmap);
	
	// Find a centerpoint for the bitmap in the client area
	CRect rect;
	GetClientRect(&rect);
	
	// Copy the bits from the in-memory DC into the on-
	// screen DC to actually do the painting. Use the centerpoint
	// we computed for the target offset.
	pDC->BitBlt(0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory, 
		0, 0, SRCCOPY);
	
	dcMemory.SelectObject(pOldBitmap);
	return TRUE;
}

void CTimeDlg::DrawInterface(CDC &dc)
{
	CDC  memDC ;
	memDC.CreateCompatibleDC ( &dc ) ;
	
	CBitmap*  pBitmap ;		//load all bitmap
	CBitmap*  pOldBitmap ;	//save old bitmap temp
	
	//.............................................................
	//分配bitmap对象内存
	pBitmap = new CBitmap ;
	
	if (  m_currentPick == 0)
	{
	//黑
		pBitmap ->LoadBitmap ( IDB_TIME_DATE_B ) ;
		pOldBitmap = memDC.SelectObject ( pBitmap ) ;
		
		//将图片COPY到指定的像素位置
		dc.BitBlt ( m_rect[0].TopLeft().x, m_rect[0].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
	}
	else
	{		//白
		pBitmap ->LoadBitmap ( IDB_TIME_DATE_W) ;
		pOldBitmap = memDC.SelectObject ( pBitmap ) ;
		
		//将图片COPY到指定的像素位置
		dc.BitBlt ( m_rect[0].TopLeft().x, m_rect[0].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
	}
	
	
	memDC.SelectObject ( pOldBitmap ) ;
	
	//释放bitmap对象内存
	delete pBitmap ;
	
	//.............................................................
	//分配bitmap对象内存
	pBitmap = new CBitmap ;
	
	if ( m_currentPick == 1 )
	{
	pBitmap ->LoadBitmap ( IDB_TIME_TIME_B ) ;
	pOldBitmap = memDC.SelectObject ( pBitmap ) ;
	
	//将图片COPY到指定的像素位置
	dc.BitBlt ( m_rect[1].TopLeft().x, m_rect[1].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
	}
	else
	{		
		pBitmap ->LoadBitmap ( IDB_TIME_TIME_W ) ;
		pOldBitmap = memDC.SelectObject ( pBitmap ) ;
		
		//将图片COPY到指定的像素位置
		dc.BitBlt ( m_rect[1].TopLeft().x, m_rect[1].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
	}

	
	memDC.SelectObject ( pOldBitmap ) ;
	
	//释放bitmap对象内存
	delete pBitmap ;
	
	//...............................................................
	//分配bitmap对象内存
	pBitmap = new CBitmap ;
	
	if ( m_currentPick == 2 )
	{
	pBitmap ->LoadBitmap ( IDB_TIME_ZONE_B ) ;
	pOldBitmap = memDC.SelectObject ( pBitmap ) ;
	
	//将图片COPY到指定的像素位置
	dc.BitBlt ( m_rect[2].TopLeft().x, m_rect[2].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
	}
	else
	{		
		pBitmap ->LoadBitmap ( IDB_TIME_ZONE_W ) ;
		pOldBitmap = memDC.SelectObject ( pBitmap ) ;
		
		//将图片COPY到指定的像素位置
		dc.BitBlt ( m_rect[2].TopLeft().x, m_rect[2].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
	}
	
	memDC.SelectObject ( pOldBitmap ) ;
	
	//释放bitmap对象内存
	delete pBitmap ;
	
	//................................................................
	//分配bitmap对象内存
	pBitmap = new CBitmap ;
	
	if ( m_currentPick == 3 )
	{
	pBitmap ->LoadBitmap ( IDB_TIME_CANCEL_B ) ;
	pOldBitmap = memDC.SelectObject ( pBitmap ) ;
	
	//将图片COPY到指定的像素位置
	dc.BitBlt ( m_rect[3].TopLeft().x, m_rect[3].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
	}
	else
	{		
		pBitmap ->LoadBitmap ( IDB_TIME_CANCEL_W ) ;
		pOldBitmap = memDC.SelectObject ( pBitmap ) ;
		
		//将图片COPY到指定的像素位置
		dc.BitBlt ( m_rect[3].TopLeft().x, m_rect[3].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
	}
	
	memDC.SelectObject ( pOldBitmap ) ;
	
	//释放bitmap对象内存
	delete pBitmap ;
	//................................................................
	

	//////////////////////
	memDC.DeleteDC ()  ;
		
}

void CTimeDlg::CopyBMP(int m_map, int i)
{
	CDC* pDC = GetDC () ;
	CDC  memDC ;
	memDC.CreateCompatibleDC ( pDC ) ;
	CBitmap bmp,bmp1 ;
	CBitmap* pOldBitmap ;
	bmp1.LoadBitmap ( m_map) ;
	pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
	pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(), 
	m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
	memDC.SelectObject ( pOldBitmap ) ;
	
	memDC.DeleteDC () ;
	ReleaseDC ( pDC ) ;	
}

void CTimeDlg::SetToolRectangle()
{
	m_rect [0].SetRect(221,41,256,87);
	m_rect [1].SetRect(221,105,256,141);
	m_rect [2].SetRect(221,169,256,205);
	m_rect [3].SetRect(275,198,310,233);
}

void CTimeDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if (nIDEvent == 1)
	{
	
	}
//	Invalidate();
	CDialog::OnTimer(nIDEvent);
}

LRESULT CTimeDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	// TODO: Add your specialized code here and/or call the base class

	if ( message == DATETOTIME )
	{
		OnPaint();
	}
	return CDialog::WindowProc(message, wParam, lParam);
}

void CTimeDlg::OnOK() 
{
		CTimeOfZoneDlg timeofzone_dlg;
	CTimeOfTimeDlg timeoftime_dlg;
	CTimeOfDateDlg timeofdate_dlg;

	switch (m_currentPick)
	{
	case 0:	
						timeofdate_dlg.DoModal();
						
						break ;
				case 1:
						timeoftime_dlg.DoModal();
						break ;
				case 2:
						timeofzone_dlg.DoModal();
						break ;
				case 3:	
						CDialog::OnOK();		
						break ;
			
		default:
			break ;
	}
		
}

void CTimeDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
		
	m_prePick=m_currentPick ;
			
	if ( nChar == VK_UP || nChar == VK_LEFT )
		{
			switch (m_prePick)
					{
					case 0:
						CopyBMP(IDB_TIME_DATE_B,0);
						CopyBMP(IDB_TIME_TIME_W,1);
						CopyBMP(IDB_TIME_ZONE_W,2);
						CopyBMP(IDB_TIME_CANCEL_W,3);
						m_currentPick = 0 ;
						break ;
					case 1:
						CopyBMP(IDB_TIME_DATE_B,0);
						CopyBMP(IDB_TIME_TIME_W,1);
						CopyBMP(IDB_TIME_ZONE_W,2);
						CopyBMP(IDB_TIME_CANCEL_W,3);
	
						m_currentPick = 0 ;
						break ;
					case 2:
					
						CopyBMP(IDB_TIME_DATE_W,0);
						CopyBMP(IDB_TIME_TIME_B,1);
						CopyBMP(IDB_TIME_ZONE_W,2);
						CopyBMP(IDB_TIME_CANCEL_W,3);

						m_currentPick = 1 ;
						break ;
					case 3:
						CopyBMP(IDB_TIME_DATE_W,0);
						CopyBMP(IDB_TIME_TIME_W,1);
						CopyBMP(IDB_TIME_ZONE_B,2);
						CopyBMP(IDB_TIME_CANCEL_W,3);

						m_currentPick = 2 ;
						break;
					
					}
				}
				
			if ( nChar == VK_DOWN  || nChar == VK_RIGHT)
				{
					switch (m_prePick) 
					{
					case 0:
						
						CopyBMP(IDB_TIME_DATE_W,0);
						CopyBMP(IDB_TIME_TIME_B,1);
						CopyBMP(IDB_TIME_ZONE_W,2);
						CopyBMP(IDB_TIME_CANCEL_W,3);

						m_currentPick = 1 ;
						break ;
					case 1:
					
						CopyBMP(IDB_TIME_DATE_W,0);
						CopyBMP(IDB_TIME_TIME_W,1);
						CopyBMP(IDB_TIME_ZONE_B,2);
						CopyBMP(IDB_TIME_CANCEL_W,3);

		
						m_currentPick = 2 ;
						break ;
					case 2:
						CopyBMP(IDB_TIME_DATE_W,0);
						CopyBMP(IDB_TIME_TIME_W,1);
						CopyBMP(IDB_TIME_ZONE_W,2);
						CopyBMP(IDB_TIME_CANCEL_B,3);
						m_currentPick = 3 ;
						break ;
					case 3:
						CopyBMP(IDB_TIME_DATE_W,0);
						CopyBMP(IDB_TIME_TIME_W,1);
						CopyBMP(IDB_TIME_ZONE_W,2);
						CopyBMP(IDB_TIME_CANCEL_B,3);

						m_currentPick = 3 ;
						break;
				
					}
				}
				
	
	CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}

⌨️ 快捷键说明

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