www.pudn.com > GPS.2.rar > GPSDlg.cpp


// GPSDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "GPS.h" 
#include "GPSDlg.h" 
#include "SetDlg.h" 
#include "ToolDlg.h" 
#include "ErrorDlg.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
SYSTEMTIME time0; 
 
///////////////////////////////////////////////////////////////////////////// 
 
HANDLE hBat; 
HANDLE hBak; 
CSetDlg set_dlg; 
CToolDlg tool_dlg; 
CErrorDlg error_dlg; 
UCHAR chargeStau0=0; 
#define IOCTL_GET_ACSTA			0x807 
#define IOCTL_GET_SCALE			0x809 
 
// CGPSDlg dialog 
BOOL GpsCodeStart() 
{ 
	HANDLE hFile; 
	unsigned char rece; 
	unsigned char buf[100]; 
	unsigned char baud[10]; 
	int iBaudRate=0; 
	DWORD num; 
	int i=0; 
 
	hFile=CreateFile(TEXT("\\Storage Card\\GpsCmd.txt"),GENERIC_READ,0,NULL, 
		OPEN_EXISTING,0,NULL); 
	if(hFile==INVALID_HANDLE_VALUE) 
	{ 
		//CloseHandle(hWndFile); 
		//MessageBox(TEXT("Can't open file!")); 
		return FALSE; 
	} 
	while(1)//read baudrate from file 
	{ 
		if(ReadFile(hFile, &rece, 1, &num, NULL)) 
		{ 
			if(rece==' ') 
				break; 
			else 
			{ 
				baud[i]=rece; 
				i++; 
				if(i==9)//too long for baudrate 
				{ 
					return FALSE; 
				} 
			} 
		} 
		else 
			return FALSE; 
	} 
	baud[i]=0; 
	 
	int len1=i;//lenth fo baud 
 
	i=0; 
	while(1)//read command for codestart form file 
	{ 
		if(ReadFile(hFile, &rece, 1, &num, NULL)) 
		{ 
			if(num==0)//reaches the end of the file 
				break; 
			if((rece==' ')||(rece=='\r')||(rece=='\n')||(rece==0)) 
				break; 
			else 
			{ 
				buf[i]=rece; 
				i++; 
				if(i==99)//too long for command 
				{ 
					return FALSE; 
				} 
			} 
		} 
		else  
			return FALSE; 
	} 
	buf[i]=13;// 
	i++; 
	buf[i]=10;// 
	i++; 
	buf[i]=0; 
	int len2=i; 
	CloseHandle(hFile); 
 
	for(i=0;iLoadIcon(IDR_MAINFRAME); 
} 
 
void CGPSDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CGPSDlg) 
	DDX_Control(pDX, IDC_BT4, m_BT4); 
	DDX_Control(pDX, IDC_BT3, m_BT3); 
	DDX_Control(pDX, IDC_BT2, m_BT2); 
	DDX_Control(pDX, IDC_BT1, m_BT1); 
	DDX_Control(pDX, IDC_BT0, m_BT0); 
	//}}AFX_DATA_MAP 
} 
 
BEGIN_MESSAGE_MAP(CGPSDlg, CDialog) 
	//{{AFX_MSG_MAP(CGPSDlg) 
	ON_WM_ERASEBKGND() 
	ON_WM_PAINT() 
	ON_WM_LBUTTONDOWN() 
	ON_WM_LBUTTONUP() 
	ON_WM_KEYDOWN() 
	ON_BN_CLICKED(IDC_BUTTON1, OnCancel) 
	ON_WM_TIMER() 
	//}}AFX_MSG_MAP 
	ON_MESSAGE(WM_SUSPEND,OnSuspend) 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CGPSDlg message handlers 
 
BOOL CGPSDlg::OnInitDialog() 
{ 
	CDialog::OnInitDialog(); 
 
	// Set the icon for this dialog.  The framework does this automatically 
	//  when the application's main window is not a dialog 
	SetIcon(m_hIcon, TRUE);			// Set big icon 
	SetIcon(m_hIcon, FALSE);		// Set small icon 
	 
	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_BKG); 
 
	SetToolRectangle(); 
 
	 
	m_prePick=-1; 
 
	m_currentPick =0 ; 
 
	m_bIsExecute=FALSE ; 
	m_NavRefresh = FALSE ; 
	 
 
	PROCESS_INFORMATION info; 
 
	if(!(CreateProcess(TEXT("\\Windows\\usbcnect.exe"),NULL,NULL,NULL,NULL,CREATE_NEW_CONSOLE, 
		NULL,NULL,NULL, &info))) 
	{ 
		//MessageBox(TEXT("Can't run !"),TEXT("Error")); 
	} 
 
	//open battery file to get battery power电池 
	hBat = CreateFile(TEXT("BAT1:"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0); 
	if(INVALID_HANDLE_VALUE==hBat) 
	{ 
		//MessageBox(TEXT("Can't open BAT1!")); 
	} 
	UCHAR out; 
	 
	DeviceIoControl(hBat,IOCTL_GET_SCALE,NULL,0,&out,1,NULL,NULL); 
	ShowBattery(out); 
 
	//open backlite file to get AC state背光 
	hBak=CreateFile(TEXT("BAK1:"),GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); 
	if(INVALID_HANDLE_VALUE==hBak) 
	{ 
		//MessageBox(_T("CAN NOT OPEN BANK1!")); 
		//return FALSE; 
	} 
 
	Sleep(1000); 
	SetTimer(3,1000,NULL); 
	//开始播放音。 
	PlaySound(TEXT("startup.wav"),NULL,SND_FILENAME|SND_ASYNC); 
	GpsCodeStart(); 
	 
	 
 
 
	// TODO: Add extra initialization here 
	SetFocus(); 
	 
	return TRUE;  // return TRUE  unless you set the focus to a control 
} 
 
 
 
void CGPSDlg::SetToolRectangle() 
{ 
	m_rect [0].SetRect(37,44,101,125); 
	m_rect [1].SetRect(134,43,195,125); 
	m_rect [2].SetRect(228,44,287,126); 
	m_rect [3].SetRect(29,131,101,216); 
	m_rect [4].SetRect(125,130,210,218); 
	m_rect [5].SetRect(225,127,289,214); 
 
	logo.SetRect(12,12,151,41); 
 
} 
 
BOOL CGPSDlg::OnEraseBkgnd(CDC* pDC)  
{ 
	 BITMAP bmpInfo; 
      m_BackScreenBitmap.GetBitmap(&bmpInfo); 
 
       
      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); 
 
      
      pDC->BitBlt(0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory,  
         0, 0, SRCCOPY); 
 
      dcMemory.SelectObject(pOldBitmap); 
 
	  return true;	 
} 
 
void CGPSDlg::OnCancel()  
{ 
	// TODO: Add your control notification handler code here 
	CDialog::OnCancel(); 
} 
 
void CGPSDlg::OnPaint()  
{ 
	CPaintDC dc(this); // device context for painting 
	DrawInterface ( dc ) ; 
 
	//设透明字体 
	GetLocalTime(&time0); 
 
	dc.SetBkMode(TRANSPARENT); 
	dc.SetTextColor(RGB(255,255,255)); 
 
	CString str; 
	str.Format(_T(" %02d:%02d"),time0.wHour,time0.wMinute); 
	 
	dc.ExtTextOut(220,16,ETO_CLIPPED,CRect(220,16,262,29),str,NULL); 
 
 
} 
 
void CGPSDlg::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_NavRefresh ||  m_currentPick == 0) 
	{ 
	//黑 
		pBitmap ->LoadBitmap ( IDB_GPS_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_GPS_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_MP3_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_MP3_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_MP4_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_MP4_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_PICTURE_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_PICTURE_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 ; 
	//................................................................ 
	//分配bitmap对象内存 
	pBitmap = new CBitmap ; 
	 
	if ( m_currentPick == 4 ) 
	{ 
	pBitmap ->LoadBitmap ( IDB_TOOL_B ) ; 
	pOldBitmap = memDC.SelectObject ( pBitmap ) ; 
	 
	//将图片COPY到指定的像素位置 
	dc.BitBlt ( m_rect[4].TopLeft().x, m_rect[4].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ; 
	} 
	else 
	{		 
		pBitmap ->LoadBitmap ( IDB_TOOL_W ) ; 
		pOldBitmap = memDC.SelectObject ( pBitmap ) ; 
		 
		//将图片COPY到指定的像素位置 
		dc.BitBlt ( m_rect[4].TopLeft().x, m_rect[4].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ; 
	} 
	 
	memDC.SelectObject ( pOldBitmap ) ; 
	 
	//释放bitmap对象内存 
	delete pBitmap ; 
	 
	//................................................................ 
	//分配bitmap对象内存 
	pBitmap = new CBitmap ; 
	 
	if ( m_currentPick == 5 ) 
	{ 
	pBitmap ->LoadBitmap ( IDB_SET_B ) ; 
	pOldBitmap = memDC.SelectObject ( pBitmap ) ; 
	 
	//将图片COPY到指定的像素位置 
	dc.BitBlt ( m_rect[5].TopLeft().x, m_rect[5].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ; 
	} 
	else 
	{		 
		pBitmap ->LoadBitmap ( IDB_SET_W ) ; 
		pOldBitmap = memDC.SelectObject ( pBitmap ) ; 
		 
		//将图片COPY到指定的像素位置 
		dc.BitBlt ( m_rect[5].TopLeft().x, m_rect[5].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ; 
	} 
	 
	memDC.SelectObject ( pOldBitmap ) ; 
	//释放bitmap对象内存 
	delete pBitmap ; 
	 
 
	/////////// 
	//设LOGO 
	pBitmap = new CBitmap ; 
	pBitmap ->LoadBitmap ( IDB_LOGO ) ; 
	pOldBitmap = memDC.SelectObject ( pBitmap ) ; 
		 
	//将图片COPY到指定的像素位置 
	dc.BitBlt ( logo.TopLeft().x, logo.TopLeft().y, 131, 33, &memDC, 0, 0, SRCCOPY ) ; 
	 
	memDC.SelectObject ( pOldBitmap ) ; 
	delete pBitmap; 
 
	////////////////////// 
	memDC.DeleteDC ()  ; 
 
	//dc.ExtTextOut(120,30,ETO_CLIPPED,CRect(19,43,63,93),L"asf",NULL); 
	 
} 
 
void CGPSDlg::OnLButtonDown(UINT nFlags, CPoint point)  
{ 
	m_prePick = m_currentPick ; 
 
	for ( int i = 0 ; i < 6 ; 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_GPS_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_MP3_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_MP4_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_PICTURE_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 4: 
					{ 
						bmp.LoadBitmap ( IDB_TOOL_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 5: 
					{ 
						bmp.LoadBitmap ( IDB_SET_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_GPS_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_MP3_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_MP4_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_PICTURE_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 4: 
					{ 
						//load the bitmap 
						 
						bmp1.LoadBitmap ( IDB_TOOL_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 5: 
					{ 
						//load the bitmap 
						 
						bmp1.LoadBitmap ( IDB_SET_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 CGPSDlg::OnLButtonUp(UINT nFlags, CPoint point)  
{ 
 
 
	 
	//GPS 
	char sName[100]={0}; 
	TCHAR wName[100]={0}; 
	PROCESS_INFORMATION info; 
	HANDLE Handle=NULL; 
 
	HANDLE hNavFile; 
	char buff[100]={0}; 
	DWORD LineNum; 
	DWORD num; 
	int dwSize; 
	//将所有图片变白	 
	CopyBMP(IDB_GPS_W,0); 
	CopyBMP(IDB_MP3_W,1); 
	CopyBMP(IDB_MP4_W,2); 
	CopyBMP(IDB_PICTURE_W,3); 
	CopyBMP(IDB_TOOL_W,4); 
	CopyBMP(IDB_SET_W,5); 
	 
 
	m_bIsExecute = FALSE ; 
	for ( int i = 0 ; i < 6 ; i ++ )  
	{		 
		if (  m_rect[i].PtInRect (point)   ) 
		{ 
			if ( m_currentPick == i) 
			{ 
				m_bIsExecute =TRUE ; 
				switch (i) 
				{ 
				case 0: 
					 
						hNavFile=CreateFile(TEXT("\\Storage Card\\Nav.txt"),GENERIC_READ,0,NULL, 
						OPEN_EXISTING,0,NULL); 
						if(hNavFile==INVALID_HANDLE_VALUE) 
						{ 
							error_dlg.m_strError = "      请检查SD卡!      "; 
							error_dlg.DoModal(); 
							m_NavRefresh = TRUE ; 
							InvalidateRect(&m_rect[0]); 
							break; 
					 
						} 
						if(!ReadFile(hNavFile, buff, 2, &num, NULL)) 
						{ 
							error_dlg.m_strError = "      请检查SD卡!      "; 
							error_dlg.DoModal(); 
							CloseHandle(hNavFile); 
							m_NavRefresh = TRUE ; 
							InvalidateRect(&m_rect[0]); 
							break ; 
					 
						} 
						if(num!=2) 
						{ 
							error_dlg.m_strError =  "      请检查SD卡!      "; 
							error_dlg.DoModal(); 
							CloseHandle(hNavFile); 
							m_NavRefresh = TRUE ; 
							InvalidateRect(&m_rect[0]); 
							break; 
						 
						} 
						LineNum=(buff[0]-48)*10+(buff[1]-48); 
						 
						if(!ReadFile(hNavFile,buff,LineNum,&num,NULL)) 
						{ 
							error_dlg.m_strError =  "      请检查SD卡!      "; 
							error_dlg.DoModal(); 
							CloseHandle(hNavFile); 
							m_NavRefresh = TRUE ; 
							InvalidateRect(&m_rect[0]); 
							break; 
						//return; 
						} 
						if(num!=LineNum) 
						{ 
							error_dlg.m_strError = "      请检查SD卡!      "; 
							error_dlg.DoModal(); 
							CloseHandle(hNavFile); 
							m_NavRefresh = TRUE ; 
							InvalidateRect(&m_rect[0]); 
							break; 
					 
						} 
						CloseHandle(hNavFile); 
					 
						memcpy(sName,buff,LineNum); 
					 
						dwSize = MultiByteToWideChar (CP_ACP, 0, sName, -1, NULL, 0); 
					 
						MultiByteToWideChar (CP_ACP, 0, sName, -1, wName, dwSize); 
					 
					 
						if(!(CreateProcess(wName,NULL,NULL,	NULL,NULL,CREATE_NEW_CONSOLE, 
							NULL,NULL,NULL,&info))) 
						{ 
							error_dlg.m_strError = "  不能运行请检查SD卡!  "; 
							error_dlg.DoModal(); 
						} 
						 
						break ; 
				case 1://打开mp3 
						 
 
						if(!(CreateProcess(TEXT("\\Storage Card\\vmaxplayer\\vmaxplayer.exe"),NULL,NULL,NULL,NULL,CREATE_NEW_CONSOLE, 
							NULL,NULL,NULL, &info))) 
						{ 
							error_dlg.m_strError = "      请检查SD卡!      "; 
							error_dlg.DoModal(); 
						} 
	 
						break ; 
				case 2://打开mp4 
					 
 
						if(!(CreateProcess(TEXT("\\Storage Card\\vmaxplayer\\vmaxplayer.exe"),NULL,NULL,NULL,NULL,CREATE_NEW_CONSOLE, 
							NULL,NULL,NULL, &info))) 
						{ 
							error_dlg.m_strError =  "      请检查SD卡!      "; 
							error_dlg.DoModal(); 
						} 
	 
						break ; 
				case 3:	//打开图片浏览 
					 
						if(!(CreateProcess(TEXT("\\Storage Card\\VMaxSee\\VmaxSee.exe"),NULL,NULL,NULL,NULL,CREATE_NEW_CONSOLE, 
						NULL,NULL,NULL, &info))) 
						{ 
						error_dlg.m_strError = "      请检查SD卡!      "; 
							error_dlg.DoModal(); 
						} 
	 
						break ; 
				case 4:			 
						tool_dlg.DoModal(); 
						break ; 
				case 5:		 
						set_dlg.DoModal(); 
						break ; 
				default: 
						break ; 
				} 
			} 
		} 
		 
	} 
 
} 
 
void CGPSDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)  
{ 
	 
 
	m_prePick=m_currentPick ; 
			 
	if ( nChar == VK_UP|| nChar == VK_LEFT ) 
		{ 
			switch (m_prePick) 
					{ 
					case 0: 
						//GPS黑别的白 
						CopyBMP(IDB_GPS_B,0); 
						CopyBMP(IDB_MP3_W,1); 
						CopyBMP(IDB_MP4_W,2); 
						CopyBMP(IDB_PICTURE_W,3); 
						CopyBMP(IDB_TOOL_W,4); 
						CopyBMP(IDB_SET_W,5); 
						m_currentPick = 0 ; 
						break ; 
					case 1: 
						//mp3黑别的白 
						CopyBMP(IDB_GPS_B,0); 
						CopyBMP(IDB_MP3_W,1); 
						CopyBMP(IDB_MP4_W,2); 
						CopyBMP(IDB_PICTURE_W,3); 
						CopyBMP(IDB_TOOL_W,4); 
						CopyBMP(IDB_SET_W,5); 
						 
						m_currentPick = 0 ; 
						break ; 
					case 2: 
						//mp4黑别的白 
						CopyBMP(IDB_GPS_W,0); 
						CopyBMP(IDB_MP3_B,1); 
						CopyBMP(IDB_MP4_W,2); 
						CopyBMP(IDB_PICTURE_W,3); 
						CopyBMP(IDB_TOOL_W,4); 
						CopyBMP(IDB_SET_W,5); 
 
						m_currentPick = 1 ; 
						break ; 
					case 3: 
						//图黑 
						CopyBMP(IDB_GPS_W,0); 
						CopyBMP(IDB_MP3_W,1); 
						CopyBMP(IDB_MP4_B,2); 
						CopyBMP(IDB_PICTURE_W,3); 
						CopyBMP(IDB_TOOL_W,4); 
						CopyBMP(IDB_SET_W,5); 
						m_currentPick = 2 ; 
						break; 
					case 4: 
						//工具黑 
						CopyBMP(IDB_GPS_W,0); 
						CopyBMP(IDB_MP3_W,1); 
						CopyBMP(IDB_MP4_W,2); 
						CopyBMP(IDB_PICTURE_B,3); 
						CopyBMP(IDB_TOOL_W,4); 
						CopyBMP(IDB_SET_W,5); 
						m_currentPick = 3 ; 
						break ; 
					case 5: 
						//设置黑 
						CopyBMP(IDB_GPS_W,0); 
						CopyBMP(IDB_MP3_W,1); 
						CopyBMP(IDB_MP4_W,2); 
						CopyBMP(IDB_PICTURE_W,3); 
						CopyBMP(IDB_TOOL_B,4); 
						CopyBMP(IDB_SET_W,5); 
						m_currentPick = 4 ; 
						break; 
					 
					} 
				} 
				 
				if ( nChar == VK_DOWN || nChar == VK_RIGHT) 
				{ 
					switch (m_prePick)  
					{ 
					case 0: 
						//MP3黑别的白 
						CopyBMP(IDB_GPS_W,0); 
						CopyBMP(IDB_MP3_B,1); 
						CopyBMP(IDB_MP4_W,2); 
						CopyBMP(IDB_PICTURE_W,3); 
						CopyBMP(IDB_TOOL_W,4); 
						CopyBMP(IDB_SET_W,5); 
						m_currentPick = 1 ; 
						break ; 
					case 1: 
						//mp4黑别的白 
						CopyBMP(IDB_GPS_W,0); 
						CopyBMP(IDB_MP3_W,1); 
						CopyBMP(IDB_MP4_B,2); 
						CopyBMP(IDB_PICTURE_W,3); 
						CopyBMP(IDB_TOOL_W,4); 
						CopyBMP(IDB_SET_W,5); 
						 
						m_currentPick = 2 ; 
						break ; 
					case 2: 
						//picture黑别的白 
						CopyBMP(IDB_GPS_W,0); 
						CopyBMP(IDB_MP3_W,1); 
						CopyBMP(IDB_MP4_W,2); 
						CopyBMP(IDB_PICTURE_B,3); 
						CopyBMP(IDB_TOOL_W,4); 
						CopyBMP(IDB_SET_W,5); 
 
						m_currentPick = 3 ; 
						break ; 
					case 3: 
						//tool黑 
						CopyBMP(IDB_GPS_W,0); 
						CopyBMP(IDB_MP3_W,1); 
						CopyBMP(IDB_MP4_W,2); 
						CopyBMP(IDB_PICTURE_W,3); 
						CopyBMP(IDB_TOOL_B,4); 
						CopyBMP(IDB_SET_W,5); 
						m_currentPick = 4 ; 
						break; 
					case 4: 
						//set黑 
						CopyBMP(IDB_GPS_W,0); 
						CopyBMP(IDB_MP3_W,1); 
						CopyBMP(IDB_MP4_W,2); 
						CopyBMP(IDB_PICTURE_W,3); 
						CopyBMP(IDB_TOOL_W,4); 
						CopyBMP(IDB_SET_B,5); 
						m_currentPick = 5 ; 
						break ; 
					case 5: 
						//设置黑 
						CopyBMP(IDB_GPS_W,0); 
						CopyBMP(IDB_MP3_W,1); 
						CopyBMP(IDB_MP4_W,2); 
						CopyBMP(IDB_PICTURE_W,3); 
						CopyBMP(IDB_TOOL_W,4); 
						CopyBMP(IDB_SET_B,5); 
						m_currentPick = 5 ; 
						break; 
				 
					} 
				} 
				 
						 
				 
	CDialog::OnKeyDown(nChar, nRepCnt, nFlags); 
} 
 
LRESULT CGPSDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)  
{ 
	// TODO: Add your specialized code here and/or call the base class 
	 
	return CDialog::DefWindowProc(message, wParam, lParam); 
} 
 
BOOL CGPSDlg::PreTranslateMessage(MSG* pMsg)  
{ 
	// TODO: Add your specialized code here and/or call the base class 
	  
	return CDialog::PreTranslateMessage(pMsg); 
} 
 
void CGPSDlg::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 CGPSDlg::ShowBattery(char num) 
{ 
	switch(num) 
	{ 
	case 5: 
		m_BT4.ShowWindow(SW_SHOW); 
		m_BT3.ShowWindow(SW_HIDE); 
		m_BT2.ShowWindow(SW_HIDE); 
		m_BT1.ShowWindow(SW_HIDE); 
		m_BT0.ShowWindow(SW_HIDE); 
		break; 
	case 4: 
	 
		m_BT4.ShowWindow(SW_HIDE); 
		m_BT3.ShowWindow(SW_SHOW); 
		m_BT2.ShowWindow(SW_HIDE); 
		m_BT1.ShowWindow(SW_HIDE); 
		m_BT0.ShowWindow(SW_HIDE); 
		break; 
	case 3: 
	 
		m_BT4.ShowWindow(SW_HIDE); 
		m_BT3.ShowWindow(SW_HIDE); 
		m_BT2.ShowWindow(SW_SHOW); 
		m_BT1.ShowWindow(SW_HIDE); 
		m_BT0.ShowWindow(SW_HIDE); 
		break; 
	case 2: 
	 
		m_BT4.ShowWindow(SW_HIDE); 
		m_BT3.ShowWindow(SW_HIDE); 
		m_BT2.ShowWindow(SW_HIDE); 
		m_BT1.ShowWindow(SW_SHOW); 
		m_BT0.ShowWindow(SW_HIDE); 
		break; 
	case 1: 
	 
		m_BT4.ShowWindow(SW_HIDE); 
		m_BT3.ShowWindow(SW_HIDE); 
		m_BT2.ShowWindow(SW_HIDE); 
		m_BT1.ShowWindow(SW_HIDE); 
		m_BT0.ShowWindow(SW_SHOW); 
		break; 
	default: 
	 
		m_BT4.ShowWindow(SW_HIDE); 
		m_BT3.ShowWindow(SW_HIDE); 
		m_BT2.ShowWindow(SW_HIDE); 
		m_BT1.ShowWindow(SW_HIDE); 
		m_BT0.ShowWindow(SW_HIDE); 
		break; 
	} 
} 
 
void CGPSDlg::OnTimer(UINT nIDEvent)  
{ 
	 
	 
	UCHAR out; 
	BOOL bACIn; 
 
	if(nIDEvent==3) 
	{ 
		DeviceIoControl(hBak,IOCTL_GET_ACSTA,NULL,0,&out,1,NULL,NULL); 
		if(out==1) 
		{ 
			//m_staAC.ShowWindow(SW_SHOW); 
			bACIn=TRUE; 
		} 
		else 
		{ 
			//m_staAC.ShowWindow(SW_HIDE); 
			bACIn=FALSE; 
		} 
 
		DeviceIoControl(hBat,IOCTL_GET_SCALE,NULL,0,&out,1,NULL,NULL); 
 
		//show charg up state 
		if((bACIn)&&(out!=5)) 
		{ 
			ShowBattery(chargeStau0); 
			if(chargeStau0<4) 
				chargeStau0++; 
			else 
			{ 
				chargeStau0=0; 
			} 
		} 
		else 
		{ 
			ShowBattery(out); 
		} 
 
	} 
	CDialog::OnTimer(nIDEvent); 
	 
} 
void CGPSDlg::OnOK()  
{ 
 
//	int nResponse; 
 
	//GPS 
	char sName[100]={0}; 
	TCHAR wName[100]={0}; 
	PROCESS_INFORMATION info; 
	HANDLE Handle=NULL; 
 
	HANDLE hNavFile; 
	char buff[100]={0}; 
	DWORD LineNum; 
	DWORD num; 
	int dwSize; 
	//**************************************************************// 
	 
				//if ( nChar == VK_RETURN ) 
				{ 
					switch (m_currentPick) 
					{ 
				case 0: 
					 
						hNavFile=CreateFile(TEXT("\\Storage Card\\Nav.txt"),GENERIC_READ,0,NULL, 
						OPEN_EXISTING,0,NULL); 
						if(hNavFile==INVALID_HANDLE_VALUE) 
						{ 
							error_dlg.m_strError = "      请检查SD卡!      "; 
							error_dlg.DoModal(); 
							m_NavRefresh = TRUE ; 
							InvalidateRect(&m_rect[0]); 
							break; 
					 
						} 
						if(!ReadFile(hNavFile, buff, 2, &num, NULL)) 
						{ 
							error_dlg.m_strError = "      请检查SD卡!      "; 
							error_dlg.DoModal(); 
							CloseHandle(hNavFile); 
							m_NavRefresh = TRUE ; 
							InvalidateRect(&m_rect[0]); 
							break ; 
					 
						} 
						if(num!=2) 
						{ 
							error_dlg.m_strError =  "      请检查SD卡!      "; 
							error_dlg.DoModal(); 
							CloseHandle(hNavFile); 
							m_NavRefresh = TRUE ; 
							InvalidateRect(&m_rect[0]); 
							break; 
						 
						} 
						LineNum=(buff[0]-48)*10+(buff[1]-48); 
						 
						if(!ReadFile(hNavFile,buff,LineNum,&num,NULL)) 
						{ 
							error_dlg.m_strError =  "      请检查SD卡!      "; 
							error_dlg.DoModal(); 
							CloseHandle(hNavFile); 
							m_NavRefresh = TRUE ; 
							InvalidateRect(&m_rect[0]); 
							break; 
						//return; 
						} 
						if(num!=LineNum) 
						{ 
							error_dlg.m_strError = "      请检查SD卡!      "; 
							error_dlg.DoModal(); 
							CloseHandle(hNavFile); 
							m_NavRefresh = TRUE ; 
							InvalidateRect(&m_rect[0]); 
							break; 
					 
						} 
						CloseHandle(hNavFile); 
					 
						memcpy(sName,buff,LineNum); 
					 
						dwSize = MultiByteToWideChar (CP_ACP, 0, sName, -1, NULL, 0); 
					 
						MultiByteToWideChar (CP_ACP, 0, sName, -1, wName, dwSize); 
					 
					 
						if(!(CreateProcess(wName,NULL,NULL,	NULL,NULL,CREATE_NEW_CONSOLE, 
							NULL,NULL,NULL,&info))) 
						{ 
							error_dlg.m_strError = " 不能运行,请检查SD卡! "; 
							error_dlg.DoModal(); 
						} 
						 
						break ; 
				case 1://打开mp3 
						 
 
						if(!(CreateProcess(TEXT("\\Storage Card\\vmaxplayer\\vmaxplayer.exe"),NULL,NULL,NULL,NULL,CREATE_NEW_CONSOLE, 
							NULL,NULL,NULL, &info))) 
						{ 
							error_dlg.m_strError = "      请检查SD卡!      "; 
							error_dlg.DoModal(); 
						} 
	 
						break ; 
				case 2://打开mp4 
					 
 
						if(!(CreateProcess(TEXT("\\Storage Card\\vmaxplayer\\vmaxplayer.exe"),NULL,NULL,NULL,NULL,CREATE_NEW_CONSOLE, 
							NULL,NULL,NULL, &info))) 
						{ 
							error_dlg.m_strError = "      请检查SD卡!      "; 
							error_dlg.DoModal(); 
						} 
	 
						break ; 
				case 3:	//打开图片浏览 
					 
						if(!(CreateProcess(TEXT("\\Storage Card\\VMaxSee\\VmaxSee.exe"),NULL,NULL,NULL,NULL,CREATE_NEW_CONSOLE, 
						NULL,NULL,NULL, &info))) 
						{ 
						error_dlg.m_strError = "      请检查SD卡!      "; 
							error_dlg.DoModal(); 
						} 
	 
						break ; 
				case 4:			 
						tool_dlg.DoModal(); 
						break ; 
				case 5:		 
						set_dlg.DoModal(); 
						break ; 
					default: 
						break ; 
					} 
				} 
				 
} 
 
 
HRESULT CGPSDlg::OnSuspend() 
{ 
	HWND hWnd; 
	HANDLE hWndFile; 
	char buff[100]={0}; 
	DWORD LineNum; 
	DWORD num; 
	int dwSize; 
	char flag; 
	 
	hWnd=::FindWindow(TEXT("TCPMP_Win"),NULL); 
 
	if(hWnd!=NULL) 
	{ 
		::SendMessage(hWnd,WM_CLOSE,0,0); 
	} 
 
	hWndFile=CreateFile(TEXT("\\Storage Card\\NavWnd"),GENERIC_READ,0,NULL, 
		OPEN_EXISTING,0,NULL); 
	if(hWndFile==INVALID_HANDLE_VALUE) 
	{ 
		CloseHandle(hWndFile); 
		//MessageBox(TEXT("Can't open file!")); 
		return 0; 
	} 
	 
	if(!ReadFile(hWndFile, buff, 2, &num, NULL)) 
	{ 
		//MessageBox(L"Can't Read file"); 
		CloseHandle(hWndFile); 
		return 0; 
	} 
	if(num!=2) 
	{ 
		//MessageBox(L"File Error!"); 
		CloseHandle(hWndFile); 
		return 0; 
	} 
	LineNum=(buff[0]-48)*10+(buff[1]-48); 
 
	if(!ReadFile(hWndFile,buff,LineNum,&num,NULL)) 
	{ 
		//MessageBox(TEXT("File Error!")); 
		//RETAILMSG(1,(TEXT("aaaaaaaaaaaaaaaaaa"))); 
		CloseHandle(hWndFile); 
		return 0; 
	} 
	if(num!=LineNum) 
	{ 
		//MessageBox(TEXT("File Error!")); 
		//RETAILMSG(1,(TEXT("LineNum==%d\r\n"),LineNum)); 
		//RETAILMSG(1,(TEXT("NUM==%d\r\n"),num)); 
		CloseHandle(hWndFile); 
		return 0; 
		//return 0; 
	} 
		 
	if(!ReadFile(hWndFile,&flag,1,&num,NULL)) 
	{ 
		//RETAILMSG(1,(TEXT("bbbbbbbbbbbbbbbb"))); 
		//MessageBox(TEXT("File Error!")); 
		CloseHandle(hWndFile); 
		return 0; 
	} 
 
	if(num!=1) 
	{ 
		//RETAILMSG(1,(TEXT("cccccccccccccccccccc"))); 
		//MessageBox(TEXT("File Error!")); 
		CloseHandle(hWndFile); 
		return 0; 
	} 
	flag-=48; 
	//RETAILMSG(1,(TEXT("flag is%d\r\n"),flag)); 
	CloseHandle(hWndFile); 
 
	char sName[100]={0}; 
	TCHAR wName[100]={0}; 
 
	memcpy(sName,buff,LineNum); 
	 
	dwSize = MultiByteToWideChar (CP_ACP, 0, sName, -1, NULL, 0); 
				 
	MultiByteToWideChar (CP_ACP, 0, sName, -1, wName, dwSize); 
 
	if(flag==1) 
	{ 
		hWnd=::FindWindow(wName,NULL); 
		//RETAILMSG(1,(TEXT("1111wName is%d\r\n"),wName)); 
		if(hWnd!=NULL) 
		{ 
			::SendMessage(hWnd,WM_CLOSE,0,0); 
		} 
	} 
	else if(flag==2) 
	{ 
		//RETAILMSG(1,(TEXT("2222wName is%d\r\n"),wName)); 
		hWnd=::FindWindow(NULL,wName); 
		if(hWnd!=NULL) 
		{ 
			::SendMessage(hWnd,WM_CLOSE,0,0); 
		} 
	} 
	else  
		return 0; 
	return 0; 
}