hpmapxdlg.cpp

来自「一个mapxmobile+gps的小程序,需要先安装mapx mobile」· C++ 代码 · 共 200 行

CPP
200
字号
// HPMapxDlg.cpp : implementation file
//

#include "stdafx.h"
#include "HPMapx.h"
#include "HPMapxDlg.h"

CHPMapxDlg::CHPMapxDlg(CWnd* pParent):CDialog(CHPMapxDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CHPMapxDlg)
	//}}AFX_DATA_INIT
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CHPMapxDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CHPMapxDlg)
	//}}AFX_DATA_MAP
}
#define OnOK CDialog::OnOK
BEGIN_MESSAGE_MAP(CHPMapxDlg, CDialog)
	//{{AFX_MSG_MAP(CHPMapxDlg)
	ON_WM_TIMER()
	ON_WM_SIZE()
	ON_WM_DESTROY()
	ON_WM_CTLCOLOR()
	ON_COMMAND(IDC_ZOOMIN,		OnToolZoomin)
	ON_COMMAND(IDC_ZOOMOUT,		OnToolZoomout)
	ON_COMMAND(IDC_PAN,		OnToolPan)
	ON_COMMAND(IDC_MAP_ALL,		OnMapEntire)
	ON_COMMAND(ID_SYS_EXIT,		OnOK)
	ON_COMMAND(ID_MENUMSG_SHOW,	OnShow)
	ON_COMMAND(ID_MENUMSG_HIDE,	OnHide)
	
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_RT_MESSAGE,	OnRealTimeMessage)
	ON_MESSAGE(WM_USER_RMCPOS,	OnReposition)
END_MESSAGE_MAP()

// 全屏
void CHPMapxDlg::OnSetFullScreen()
{	
	static int MENU_HIGHT = 26;
	static RECT rc;
	GetWindowRect( &rc);
	
	static SHINITDLGINFO m_shidi;
	m_shidi.dwMask = SHIDIM_FLAGS;
	m_shidi.dwFlags = SHIDIF_FULLSCREENNOMENUBAR;
	m_shidi.hDlg = m_hWnd;
	SHInitDialog(&m_shidi);

	::CommandBar_Show(m_pWndEmptyCB->m_hWnd, FALSE);
	SetForegroundWindow();
	CenterWindow(GetDesktopWindow());

	SHFullScreen(m_hWnd, SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON| SHFS_HIDESTARTICON);
	MoveWindow( rc.left, rc.top-MENU_HIGHT, rc.right,rc.bottom+MENU_HIGHT, TRUE);
//	SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
}

// GPS经纬度,重定位
LRESULT CHPMapxDlg::OnReposition(WPARAM wparam, LPARAM lparama)
{
	double  x = m_GpsMsg.GetMapPosX(),
		y = m_GpsMsg.GetMapPosY();

	if( x == (double)0.0 || y==(double)0.0 )
		return 0;
	
	m_GpsMap.SetStartXY( x ,y);
	m_GpsMap.UpdateSpeed(m_GpsMsg.GetSpeed());
	m_GpsMap.UpdateDirection(m_GpsMsg.GetDirection());
	m_GpsMap.UpdateGraph();
	m_GpsMsg.Clear();

	AddMessage( __TEXT("成功取得定位信息") );
	return 1;
}

LRESULT CHPMapxDlg::OnRealTimeMessage(WPARAM wparam,LPARAM lparama)
{
	AddMessage(theApp.strRealTimeMsg);
	return 0;
}

// 定时器
void CHPMapxDlg::OnTimer(UINT nIDEvent) 
{
	// For Debug Application
	if( nIDEvent == 1 )	
	SendMessage(WM_USER_GGAPOS);
	
	CDialog::OnTimer(nIDEvent);
}

void CHPMapxDlg::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	
	if (	cx != 0 && 
		cy != 0 && 
		m_GpsMap.GetSafeHwnd())

	m_GpsMap.MoveWindow(0,0,cx,cy,TRUE);
}

void CHPMapxDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	theApp.SetRotation(false);
}

void CHPMapxDlg::AddMenu()
{
	SHMENUBARINFO mbi;
	HINSTANCE  hInst = AfxGetInstanceHandle();

	memset(&mbi, 0, sizeof(SHMENUBARINFO));
	mbi.cbSize     = sizeof(SHMENUBARINFO);
	mbi.hwndParent = m_hWnd;
	mbi.nToolBarId = IDR_MENUBAR;
	mbi.hInstRes   = hInst;
	mbi.nBmpId     = 0;
	mbi.cBmpImages = 0;

	SHCreateMenuBar(&mbi);
	CommandBar_AddBitmap(mbi.hwndMB, hInst, IDR_CMDBAR, 9, 16, 15);
}

void CHPMapxDlg::AddMessage(LPCTSTR str)
{
	m_MsgWindow.SetMessage(str);
	m_MsgWindow.ShowWindowEx();
}

bool CHPMapxDlg::LoadMapx()
{
	bool b = m_GpsMap.Create(NULL,NULL,0,CRect(0,0,0,0),this,0)==TRUE;
	if( b )
	{
		m_GpsMap.ShowWindow(SW_SHOW); 
		return true;
	}
	return false;
}

bool CHPMapxDlg::OpenGPS()
{
	m_GpsMsg.Create(NULL,NULL,0,CRect(0,0,0,0),this,0);
	return m_GpsMsg.OpenGPS();
}

HBRUSH CHPMapxDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	switch(nCtlColor) 
	{
	case CTLCOLOR_STATIC:	pDC->SetBkMode(TRANSPARENT);
				return NULL; 
	}
	
	return hbr;
}

// 初始化
BOOL CHPMapxDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	AddMenu();

	if( ! m_MsgWindow.IsCreated())
	m_MsgWindow.Create(CPoint(0,BOT_START),this,IDB_BITMAP_BK);

	SetWindowText( __TEXT("天辉导航系统") );

	bool b = LoadMapx();
	theApp.HideSplash();

	if( !b )
	{
		AddMessage( __TEXT("系统数据损坏,我们对此表示抱歉"));
		theApp.DestroySplash();
	}
	
	theApp.ShowSplash();

	b = OpenGPS();
	theApp.DestroySplash();
	
	b ? 
	AddMessage( __TEXT("正在解析GPS信息 ...") ):
	AddMessage( __TEXT("GPS卫星信号错误,无法定位") );
	
	m_MsgWindow.HideWindowEx();
	return TRUE;
}

⌨️ 快捷键说明

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