新手GPS串口接收有关问题请问

新手GPS串口接收问题请教
#include <windows.h>
#include <windowsx.h>
#include <CommCtrl.h>
#include "SampleGPS.h"
#include <winuser.h>

#define TEXTSIZE 70

struct DecodeUnit DlgMessage[] ={
WM_INITDIALOG ,DoInit,
WM_COMMAND,DoCommand,
};

struct DecodeUnit CommandMessage[] = {
IDOK,OnClose,
IDCANCEL,OnClose,
};



HINSTANCE g_hInst;
HANDLE g_hSendEvent = INVALID_HANDLE_VALUE;
HANDLE hReadThread = INVALID_HANDLE_VALUE;
HANDLE hThread;

BOOL fContinue = TRUE;
HANDLE hComPort = INVALID_HANDLE_VALUE;
int nSpeed = CBR_9600;
int nLastDev = -1;

HWND hwnd ;

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance, 
LPTSTR lpCmdLine,
int nCmdShow)

{

DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DlgPorc);
CommandBar_Show(NULL, TRUE);
return (0);
}



INT_PTR CALLBACK DlgPorc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
int i;
for (i = 0;i < dim(DlgMessage);i++)
{
if(DlgMessage[i].message == message)
(*DlgMessage[i].fun)(hDlg,message,wParam,lParam);
}

return FALSE;
}

LONG DoCommand(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
int i ;
for(i =0 ;i< dim(CommandMessage);++i)
{
if(CommandMessage[i].message == LOWORD(wParam))
(*CommandMessage[i].fun)(hDlg,message,wParam,lParam);
}
return TRUE;
}

LONG DoInit(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{

TCHAR szDev[32] = TEXT("COM2:");

InitCommunication (szDev);

hwnd = hDlg;


return TRUE;
}


LONG OnClose(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
EndDialog(hDlg,0);
return TRUE;
}


HANDLE InitCommunication ( LPTSTR pszDevName) {
DCB dcb;
TCHAR szDbg[128];
COMMTIMEOUTS cto;
HANDLE hLocal;
DWORD dwTStat;
hLocal = hComPort;
hComPort = INVALID_HANDLE_VALUE;

if (hLocal != INVALID_HANDLE_VALUE)
CloseHandle (hLocal);  

hLocal = CreateFile (pszDevName, GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);

if (hLocal != INVALID_HANDLE_VALUE) {
// 配置串口
dcb.DCBlength = sizeof (dcb);
GetCommState (hLocal, &dcb);
dcb.BaudRate = nSpeed;
dcb.fParity = FALSE;
dcb.fNull = FALSE;
dcb.StopBits = ONESTOPBIT;
dcb.Parity = NOPARITY;
dcb.ByteSize = 8;
SetCommState (hLocal, &dcb);

// 设定超时
cto.ReadIntervalTimeout = 0;
cto.ReadTotalTimeoutMultiplier = 0;
cto.ReadTotalTimeoutConstant = 0;
cto.WriteTotalTimeoutMultiplier = 0;
cto.WriteTotalTimeoutConstant = 0;
SetCommTimeouts (hLocal, &cto);

// 启动读取线程
hComPort = hLocal;
if (!GetExitCodeThread (hReadThread, &dwTStat) ||
(dwTStat != STILL_ACTIVE)) {
hReadThread = CreateThread (NULL, 0, ReadThread, NULL,
0, &dwTStat);
if (hReadThread)
CloseHandle (hReadThread);
}
} else {
wsprintf (szDbg, TEXT ("Couldn\'t open port %s. rc=%d\r\n"),
pszDevName, GetLastError());
MessageBox(NULL,szDbg,TEXT("message"),MB_OK | MB_ICONERROR);
}
return hComPort;
}



DWORD WINAPI ReadThread (PVOID pArg) {
HWND hWnd;
DWORD cBytes, i;
WCHAR szText[TEXTSIZE];
char szAnsi[TEXTSIZE];
size_t siz;

HWND hlist = GetDlgItem(hwnd,IDC_LIST1);
while (fContinue) {
for (i = 0; i < sizeof (szAnsi)-1; i++) {

while (!ReadFile (hComPort, &szAnsi[i], 1, &cBytes, 0))
if (hComPort == INVALID_HANDLE_VALUE)