// MainDlg.cpp : implementation of the CMainDlg class
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "resource.h"
#include <atlmisc.h>
#include "MainDlg.h"
#include "CommPort.h"
const int nLineHeight = 30;
const int nTop = 10;
const int nLeft = 5;
CMainDlg::CMainDlg()
{
memset(m_nIndex,0,MAX_SATELLITE_COUNT * sizeof(int));
memset(m_nData,0,MAX_SATELLITE_COUNT * sizeof(int));
m_nValidItemCount = 0;
m_nTotalCount = 0;
}
BOOL CMainDlg::PreTranslateMessage(MSG* pMsg)
{
if (!m_hWnd)
{
return FALSE;
}
return CWindow::IsDialogMessage(pMsg);
}
BOOL CMainDlg::OnIdle()
{
return FALSE;
}
LRESULT CMainDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
// center the dialog on the screen
CenterWindow();
// set icons
HICON hIcon = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON, ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR);
SetIcon(hIcon, TRUE);
HICON hIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);
SetIcon(hIconSmall, FALSE);
// register object for message filtering and idle updates
CMessageLoop* pLoop = _Module.GetMessageLoop();
ATLASSERT(pLoop != NULL);
pLoop->AddMessageFilter(this);
pLoop->AddIdleHandler(this);
// Create a MenuBar.
SHMENUBARINFO mbi;
memset(&mbi, 0, sizeof(SHMENUBARINFO)); // Zero structure
mbi.cbSize = sizeof(SHMENUBARINFO); // Size field
mbi.hwndParent = m_hWnd; // Parent window
mbi.hInstRes = _Module.GetModuleInstance();
mbi.nToolBarId = IDR_MENU1;
mbi.dwFlags = SHCMBF_HMENU | SHCMBF_HIDESIPBUTTON ;
// Create bar and check for errors.
if (!SHCreateMenuBar(&mbi))
{
return FALSE;
}
SHDoneButton(m_hWnd,SHDB_SHOWCANCEL);
SHINITDLGINFO shidi;
SecureZeroMemory(&shidi, sizeof(shidi));
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = SHIDIF_SIZEDLGFULLSCREEN;
shidi.hDlg = m_hWnd;
if( !SHInitDialog(&shidi) )
{
EndDialog(0);
}
m_listBox.Attach(GetDlgItem(IDC_LIST1));
SetListBox(&m_listBox);
TestCom_Init();
DWORD dwReadThreadID;
m_hReadThread = CreateThread(NULL, 0, ReadThreadProc, (LPVOID)pComPort, 0, &dwReadThreadID);
return TRUE;
}
LRESULT CMainDlg::OnSize(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
RECT rect;
GetClientRect(&rect);
RECT rect1,rect2;
rect1.left = 10;
rect1.right = rect.right / 2 ;
rect1.top = rect.bottom - 30;
rect1.bottom = rect1.top + 15;
rect2.left = rect1.right + 10;
rect2.right = rect.right;
rect2.top = rect1.top;
rect2.bottom = rect1.bottom;
GetDlgItem(IDC_STATIC_NO1).MoveWindow(&rect1);
GetDlgItem(IDC_STATIC_NO2).MoveWindow(&rect2);
RECT rectList;
rectList.bottom = rect1.top - 10;
rectList.top = rectList.bottom - 60;
rectList.left = 10;
rectList.right = rect.right - 10;
GetDlgItem(IDC_LIST1).MoveWindow(&rectList);
return 0;
}
LRESULT CMainDlg::OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
CPaintDC dc(m_hWnd);
CString strCount;
CString strNo;
strCount.Format(L"Total satellite count: %d, Valid: %d",m_nTotalCount,m_nValidItemCount);
RECT rectCount;
rectCount.left = nLeft;
rectCount.right = 280;
rectCount.top = nTop;
rectCount.bottom = rectCount.top + nLineHeight;
dc.DrawText(strCount,-1,&rectCount,DT_LEFT);
HBRUSH hbr;
COLORREF rgbFill = RGB (119, 183, 148);
hbr = CreateSolidBrush (rgbFill);
int nRectLeft,nRectRight,nRectTop,nRectBottom ;
RECT rectTxt;
RECT rectFill;
TCHAR strIndex[4] = {0};
TCHAR strData[4] = {0};
for (int i = 0;i<m_nValidItemCount;i++ )
{
//draw rectangle
nRectLeft = 30;
nRectRight = nRectLeft + 200;
nRectTop = rectCount.bottom + nLineHeight * i + 2;
nRectBottom = nRectTop + nLineHeight - 2;
Rectangle(dc,nRectLeft,nRectTop,nRectRight,nRectBottom);
rectTxt.left = nLeft;
rectTxt.right = 30;
rectTxt.top = nRectTop + 7;
rectTxt.bottom = nRectBottom;
//Draw index
strNo.Format(L"%d",m_nIndex[i]);
dc.DrawText(strNo,-1,&rectTxt,DT_LEFT);
rectFill.top = nRectTop + 1;
rectFill.bottom = nRectBottom - 1;
rectFill.left = nRectLeft + 1;
rectFill.right = nRectLeft + m_nData[i] * 2;
FillRect (dc, &rectFill, hbr);
//draw data
_itow(m_nData[i],strData,10);
rectTxt.left = rectFill.right + 3;
rectTxt.right = rectTxt.left + 20;
dc.DrawText(strData,-1,&rectTxt,DT_CENTER);
}
DeleteObject (hbr);
return 0;
}
CString strShowTime;
CString strShowData;
static CString strOldData;
LRESULT CMainDlg::OnGetGPRMCInfo(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
strShowTime = g_strTime.Left(2) + ":" + g_strTime.Mid(2,2) + ":" + g_strTime.Right(2);
GetDlgItem(IDC_STATIC_NO2).SetWindowText(strShowTime);
if (strOldData != g_strDate)
{
strShowData = g_strDate.Right(2) + "-" + g_strDate.Mid(2,2) + "-" + g_strDate.Left(2);
GetDlgItem(IDC_STATIC_NO1).SetWindowText(strShowData);
strOldData = g_strDate;
}
return 0;
}
//3直接显示
LRESULT CMainDlg::OnGetGPGSVInfo(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
m_nTotalCount = g_nSatelliteCount;
memset(m_nIndex,0,MAX_SATELLITE_COUNT * sizeof(int));
memset(m_nData,0,MAX_SATELLITE_COUNT * sizeof(int));
m_nValidItemCount = 0;
int i,j, k, nTemp = 0;
for ( i = 0;i < MAX_SATELLITE_COUNT; i++)
{
if (g_nSatelliteIndex[i] && g_nSatelliteData[i])
{
m_nIndex[m_nValidItemCount] = g_nSatelliteIndex[i];
m_nData[m_nValidItemCount] = g_nSatelliteData[i];
m_nValidItemCount++;
}
}
//sort
for ( i = 0;i<m_nValidItemCount-1;i++)
{
k = i;
for (j = i + 1;j< m_nValidItemCount;j++)
{
if (m_nIndex[j] <m_nIndex[k] )
{
k = j;
}
}
if (k != i)
{
nTemp = m_nIndex[i];
m_nIndex[i] = m_nIndex[k];
m_nIndex[k] = nTemp;
nTemp = m_nData[i];
m_nData[i] = m_nData[k];
m_nData[k] = nTemp;
}
}
RedrawWindow();
return 0;
}
#if 0
//2 排序后显示
LRESULT CMainDlg::OnGetInfo(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
memcpy(m_nIndex,g_nSatelliteIndex,MAX_SATELLITE_COUNT * sizeof(int));
memcpy(m_nData,g_nSatelliteData,MAX_SATELLITE_COUNT * sizeof(int));
int i,j, k, nTemp = 0;
for ( i = 0;i<MAX_SATELLITE_COUNT-1;i++)
{
k = i;
for (j = i + 1;j< MAX_SATELLITE_COUNT;j++)
{
if (m_nIndex[j] <m_nIndex[k] )
{
k = j;
}
}
if (k != i)
{
nTemp = m_nIndex[i];
m_nIndex[i] = m_nIndex[k];
m_nIndex[k] = nTemp;
nTemp = m_nData[i];
m_nData[i] = m_nData[k];
m_nData[k] = nTemp;
}
}
RedrawWindow();
TCHAR strIndex[3];
TCHAR strData[3];
for (i = 0;i< MAX_SATELLITE_COUNT;i++)
{
_itow(m_nIndex[i],strIndex,10);
_itow(m_nData[i],strData,10);
GetDlgItem(IDC_STATIC_NO1 + i).SetWindowText(strIndex);
GetDlgItem(IDC_STATIC_NO1 + i + 12).SetWindowText(strData);
}
return 0;
}
//1 过滤信噪比为0的信息
LRESULT CMainDlg::OnGetInfo(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
//GetDlgItem(IDC_STATIC_INFO).SetWindowText(strInfo);
int nIndex[MAX_SATELLITE_COUNT] = {0};
int nData[MAX_SATELLITE_COUNT]={0};
TCHAR strIndex[3];
TCHAR strData[3];
int nValidItemCount = 0;
int i;
for (i = 0;i< MAX_SATELLITE_COUNT;i++)
{
if (g_nSatelliteData[i] > 0)
{
nData[nValidItemCount] = g_nSatelliteData[i];
nIndex[nValidItemCount] = g_nSatelliteIndex[i];
nValidItemCount++;
}
}
for (i=0;i<nValidItemCount;i++ )
{
_itow(nIndex[i],strIndex,10);
_itow(nData[i],strData,10);
GetDlgItem(IDC_S