www.pudn.com > gpsCE080506.rar > gpsDlg.cpp


// gpsDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "gps.h" 
#include "gpsDlg.h" 
 
#include "SetDlg.h" 
#include "PlayDlg.h" 
#include "PathDlg.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
typedef  BOOL (WINAPI *_TouchCalibrate)();  
 
///////////////////////////////////////////////////////////////////////////// 
// CGpsDlg dialog 
//HWND hWnd=NULL; 
 
CGpsDlg::CGpsDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(CGpsDlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CGpsDlg) 
		// NOTE: the ClassWizard will add member initialization here 
	//}}AFX_DATA_INIT 
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 
 
	isActiveNav=FALSE; 
	isActiveMP3=FALSE; 
	isActiveSet=FALSE; 
	isNavShell=FALSE; 
	m_pathValue=""; 
	time=0; 
 
	ZeroMemory (&execInf,sizeof(execInf));      
//    hWnd=HWND(*pParent); 
} 
 
void CGpsDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CGpsDlg) 
    // NOTE: the ClassWizard will add DDX and DDV calls here 
	//}}AFX_DATA_MAP 
} 
 
BEGIN_MESSAGE_MAP(CGpsDlg, CDialog) 
	//{{AFX_MSG_MAP(CGpsDlg) 
	ON_WM_PAINT() 
	ON_WM_MOUSEMOVE() 
	ON_WM_LBUTTONUP() 
	ON_WM_LBUTTONDOWN() 
	ON_WM_ERASEBKGND() 
	ON_WM_TIMER() 
	//}}AFX_MSG_MAP 
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	 
	CenterWindow(GetDesktopWindow());	// center to the hpc screen 
	// TODO: Add extra initialization here	 
 
	SetTimer(1,1000,NULL); 
 
 
	return TRUE;  // return TRUE  unless you set the focus to a control 
} 
 
 
 
BOOL CGpsDlg::OnEraseBkgnd(CDC* pDC)  
{ 
	// TODO: Add your message handler code here and/or call default 
/*	CDC     memDC; 
	CBitmap	bitmap; 
	BITMAP  bmp; 
	//	bitmap.LoadBitmap(IDB_MAIN); 
	bitmap.LoadBitmap(IDB_MAIN); 
	bitmap.GetObject (sizeof(BITMAP),&bmp); 
	memDC.CreateCompatibleDC (pDC); 
	memDC.SelectObject (bitmap); 
	pDC->BitBlt (0,0,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
	bitmap.DeleteObject(); 
	return TRUE;  
*/ 
//	return CDialog::OnEraseBkgnd(pDC); 
	return -1; 
} 
 
void CGpsDlg::OnPaint()  
{ 
 	CPaintDC dc(this); // device context for painting 
	CBitmap	bitmap; 
    BITMAP  bmp; 
	CDC     memDC; 
    CFont font; 
    CRect rect; 
// -----------------背景-------------------------------------- 
	bitmap.LoadBitmap(IDB_BITMAP1);//IDB_NAV 
	bitmap.GetObject (sizeof(BITMAP),&bmp); 
	memDC.CreateCompatibleDC (&dc); 
	memDC.SelectObject (bitmap); 
	dc.BitBlt (0,0,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
	bitmap.DeleteObject(); 
//-------------------------------------------------------------- 
			CString mainStr=TEXT("主界面"); 
 
			CString str1=TEXT("导航");//TEXT("GPS导航"); 
			CString str2=TEXT("播放器");//TEXT("MP3"); 
			CString str3=TEXT("设置");//TEXT("设置"); 
 
	 
			font.CreatePointFont(180,L"黑体"); 
			dc.SelectObject(&font); 
		//	dc.TextOut(130,40,&str); 
			dc.SetBkMode(TRANSPARENT); 
 
	 
			dc.SetTextColor(RGB(255,255,255)); 
			dc.DrawText(mainStr, CRect(128,8,200,40), 0); 
 
			font.CreatePointFont(120,L"宋体"); 
			dc.SelectObject(&font); 
			dc.SetTextColor(RGB(0,0,0)); 
			dc.DrawText(str1, CRect(55,160,100,180), 0); 
			dc.DrawText(str2, CRect(140,160,190,180), 0); 
			dc.DrawText(str3, CRect(235,160,280,180), 0); 
 
			font.DeleteObject(); 
 
 
/*			if(isActiveNav==TRUE) 
			{ 
				bitmap.LoadBitmap(IDB_NAV); 
				bitmap.GetObject (sizeof(BITMAP),&bmp); 
				memDC.CreateCompatibleDC (&dc); 
				memDC.SelectObject (bitmap); 
				dc.BitBlt (42,86,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
				bitmap.DeleteObject(); 
			} 
			else  
			{ 
*/				bitmap.LoadBitmap(IDB_NAV); 
				bitmap.GetObject (sizeof(BITMAP),&bmp); 
				memDC.CreateCompatibleDC (&dc); 
				memDC.SelectObject (bitmap); 
				dc.BitBlt (42,86,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
				bitmap.DeleteObject(); 
//			} 
 
/*			if(isActiveMP3==TRUE) 
			{ 
				bitmap.LoadBitmap(IDB_MP3); 
				bitmap.GetObject (sizeof(BITMAP),&bmp); 
				memDC.CreateCompatibleDC (&dc); 
				memDC.SelectObject (bitmap); 
				dc.BitBlt (132,86,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
				bitmap.DeleteObject(); 
			} 
			else 
			{ 
*/				bitmap.LoadBitmap(IDB_MP3); 
				bitmap.GetObject (sizeof(BITMAP),&bmp); 
				memDC.CreateCompatibleDC (&dc); 
				memDC.SelectObject (bitmap); 
				dc.BitBlt (132,86,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
				bitmap.DeleteObject(); 
//			} 
/*			if(isActiveSet==TRUE) 
			{ 
				bitmap.LoadBitmap(IDB_SET); 
				bitmap.GetObject (sizeof(BITMAP),&bmp); 
				memDC.CreateCompatibleDC (&dc); 
				memDC.SelectObject (bitmap); 
				dc.BitBlt (222,86,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
				bitmap.DeleteObject(); 
			} 
			else 
			{ 
*/				bitmap.LoadBitmap(IDB_SET); 
				bitmap.GetObject (sizeof(BITMAP),&bmp); 
				memDC.CreateCompatibleDC (&dc); 
				memDC.SelectObject (bitmap); 
				dc.BitBlt (222,86,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
				bitmap.DeleteObject(); 
//			} 
 
 
//	dc.DrawText(str, CRect(0,0,320,30), 0); 
	 
	// Do not call CDialog::OnPaint() for painting messages 
} 
 
void CGpsDlg::OnMouseMove(UINT nFlags, CPoint point)  
{ 
	// TODO: Add your message handler code here and/or call default 
 
	CDialog::OnMouseMove(nFlags, point); 
} 
 
 
 
 
void CGpsDlg::OnLButtonUp(UINT nFlags, CPoint point)  
{ 
	// TODO: Add your message handler code here and/or call default 
	    if(isActiveNav==TRUE && isNavShell==FALSE) 
		{//程序没有执行时 
			isActiveNav=FALSE; 
			if(time>=1)  
			{ 
 
				CFile file;  
				TCHAR  *pBuf=NULL; 
				int dwLen; 
				if (file.Open(L"\\Storage Card\\config.ini", CFile::typeBinary|CFile::modeRead))  
				{  
					dwLen=file.GetLength(); 
					pBuf = new TCHAR[dwLen]; 
					file.Seek(0,CFile::begin);  
				//	file.SeekToBegin(); 
					file.Read(pBuf,dwLen);  
					pBuf[dwLen]='\0'; 
				}  
				file.Close();  
				m_pathValue.Format(TEXT("%s"),pBuf);  
 
				int dot=m_pathValue.Find(','); 
				m_pathValue=m_pathValue.Left(dot);//取得字符‘,’前面的字符串 
 
				CString str=m_pathValue.Right(4); 
				delete pBuf; 
 
				if(str==".exe") 
				{//如果是.exe文件 
					DWORD lp; 
					GetExitCodeProcess(execInf.hProcess,&lp); 
					if(lp!=STILL_ACTIVE) 
					{ 
						execInf.cbSize = sizeof(execInf);      
						execInf.fMask = SEE_MASK_NOCLOSEPROCESS;        
						execInf.lpFile = m_pathValue; 
 
						execInf.lpVerb = TEXT("open"); 
						if(ShellExecuteEx(&execInf)==0) 
						{//程序执行标志 
							isNavShell=TRUE; 
						} 
					} 
				} 
			} 
 
		//	CDialog::OnCancel(); 
 
		} 
		else if(isActiveMP3==TRUE) 
		{ 
			isActiveMP3=FALSE; 
			CPlayDlg dlg; 
			dlg.DoModal(); 
		//	CDialog::OnCancel(); 
		} 
		else if(isActiveSet==TRUE) 
		{ 
			isActiveSet=FALSE; 
			CSetDlg dlg; 
		//	CPathDlg dlg; 
			dlg.DoModal(); 
 
		} 
 
					 
	CDialog::OnLButtonUp(nFlags, point); 
} 
 
 
//roman_zh 
void CGpsDlg::OnLButtonDown(UINT nFlags, CPoint point)  
{ 
	if(PtInRect(CRect(42,86,107,151),point)) 
	{//导航 
		isActiveNav=TRUE; 
	} 
	else if(PtInRect(CRect(132,86,218,151),point)) 
	{//MP3 
		isActiveMP3=TRUE; 
	} 
	else if(PtInRect(CRect(222,86,287,151),point)) 
	{//设置 
		isActiveSet=TRUE; 
	} 
	CDialog::OnLButtonDown(nFlags, point); 
} 
 
 
BOOL CGpsDlg::PreCreateWindow(CREATESTRUCT& cs)  
{ 
	// TODO: Add your specialized code here and/or call the base class 
	if( !CDialog::PreCreateWindow(cs) ) 
		return FALSE; 
    cs.cx = 320; 
    cs.cy = 240; 
    cs.style &= ~WS_MAXIMIZEBOX;//禁止最大化 
    cs.style &= ~WS_THICKFRAME;//禁止调整大小 
 
	return TRUE; 
	 
//	return CDialog::PreCreateWindow(cs); 
} 
 
 
void CGpsDlg::OnTimer(UINT nIDEvent)  
{ 
	time++; 
	if(time>=1)  
	{ 
		time=1; 
 
		CFile file;  
		TCHAR  *pBuf=NULL; 
		int dwLen; 
		if (file.Open(L"\\Storage Card\\config.ini", CFile::typeBinary|CFile::modeRead))  
		{  
			dwLen=file.GetLength(); 
			pBuf = new TCHAR[dwLen]; 
			file.Seek(0,CFile::begin);  
		//	file.SeekToBegin(); 
			file.Read(pBuf,dwLen);  
			pBuf[dwLen]='\0'; 
		}  
		file.Close();  
		m_pathValue.Format(TEXT("%s"),pBuf); 
		str=m_pathValue; 
		delete pBuf; 
 
		int dot=m_pathValue.Find(','); 
		m_pathValue=m_pathValue.Left(dot);//取得字符‘,’前面的字符串 
 
 
		str=str.Right(1);//取得字符‘,’后面的字符 
 
		if(str=="1") 
		{//启动时运行导航软件 
			DWORD lp; 
			GetExitCodeProcess(execInf.hProcess,&lp); 
			if(lp!=STILL_ACTIVE) 
			{ 
				execInf.cbSize = sizeof(execInf);      
				execInf.fMask = SEE_MASK_NOCLOSEPROCESS;        
				execInf.lpFile = m_pathValue; 
				execInf.lpVerb = TEXT("open"); 
				if(ShellExecuteEx(&execInf)==0) 
				{//程序执行标志 
					isNavShell=TRUE; 
				} 
			} 
			KillTimer(1); 
		} 
	} 
 
	CDialog::OnTimer(nIDEvent); 
}