⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dgpslistener.cpp

📁 Gps 数据采集
💻 CPP
📖 第 1 页 / 共 5 页
字号:
           ChangeConnection(hwnd,CONNECTED(TTYInfo));
         }
         break; 
    
    case ID_BLACKBOX_DUMPRAW: // fallthrough
    case ID_FILE_CONNECT:
         gdwReceiveState = RECEIVE_TTY; 

         if (SetupCommPort() != NULL)
         {
           ChangeConnection(hwnd,CONNECTED(TTYInfo));
         }
         break;

    case ID_BLACKBOX_STOPSCREENDUMP: // fallthrough
    case ID_FILE_DISCONNECT:
         if (BreakDownCommPort())
         { 
           ChangeConnection(hwnd,CONNECTED(TTYInfo));
         }
         break;

    case ID_FILE_EXIT:
         PostMessage(hwnd,WM_CLOSE,0,0);
         break;
  }
  
  return;
}

void OpenTTYChildWindow(HWND hWnd)
{
  ghWndTTY = CreateWindow("MTTTYChildClass",
                          "TTY Window", 
                          WS_CHILD | WS_VISIBLE | WS_VSCROLL,
                          0,0,
                          0,0,
                          hWnd, 
                          (HMENU)ID_TTYWINDOW, 
                          ghInst, 
                          NULL);

  if (ghWndTTY == NULL)
  {
    ErrorReporter("Can't Create TTY Child Window");
  }

  return;
}

BOOL NEAR ScrollTTYVert(HWND hWnd,WORD wScrollCmd,WORD wScrollPos)
{
  int  nScrollAmt ;

  switch (wScrollCmd)
  {
    case SB_TOP:
         nScrollAmt = -YOFFSET(TTYInfo);
         break;

    case SB_BOTTOM:
         nScrollAmt = YSCROLL(TTYInfo) - YOFFSET(TTYInfo);
         break ;

    case SB_PAGEUP:
         nScrollAmt = -YSIZE(TTYInfo);
         break ;

    case SB_PAGEDOWN:
         nScrollAmt = YSIZE(TTYInfo);
         break ;

    case SB_LINEUP:
         nScrollAmt = -YCHAR(TTYInfo);
         break ;

    case SB_LINEDOWN:
         nScrollAmt = YCHAR(TTYInfo);
         break ;

    case SB_THUMBPOSITION:
         nScrollAmt = wScrollPos - YOFFSET(TTYInfo);
         break ;

    default:
         return (FALSE);
  }

  if ((YOFFSET(TTYInfo) + nScrollAmt) > YSCROLL(TTYInfo))
      nScrollAmt = YSCROLL(TTYInfo) - YOFFSET(TTYInfo);

  if ((YOFFSET(TTYInfo) + nScrollAmt) < 0)
      nScrollAmt = -YOFFSET(TTYInfo);

  ScrollWindowEx(hWnd,0,-nScrollAmt,NULL,NULL,NULL,NULL,SW_INVALIDATE|SW_ERASE);

  YOFFSET(TTYInfo) = YOFFSET(TTYInfo) + nScrollAmt;

  SetScrollPos(hWnd,SB_VERT,YOFFSET(TTYInfo),TRUE);

  return (TRUE);
}

BOOL NEAR ScrollTTYHorz(HWND hWnd,WORD wScrollCmd,WORD wScrollPos)
{
  int nScrollAmt ;

  switch (wScrollCmd)
  {
    case SB_TOP:
         nScrollAmt = -XOFFSET(TTYInfo);
         break ;

    case SB_BOTTOM:
         nScrollAmt = XSCROLL(TTYInfo) - XOFFSET(TTYInfo);
         break ;

    case SB_PAGEUP:
         nScrollAmt = -XSIZE(TTYInfo);
         break ;

    case SB_PAGEDOWN:
         nScrollAmt = XSIZE(TTYInfo);
         break ;

    case SB_LINEUP:
         nScrollAmt = -XCHAR(TTYInfo);
         break ;

    case SB_LINEDOWN:
         nScrollAmt = XCHAR(TTYInfo);
         break ;

    case SB_THUMBPOSITION:
         nScrollAmt = wScrollPos - XOFFSET(TTYInfo);
         break ;

    default:
         return (FALSE);
  }
  
  if ((XOFFSET(TTYInfo) + nScrollAmt) > XSCROLL(TTYInfo))
  {
    nScrollAmt = XSCROLL(TTYInfo) - XOFFSET(TTYInfo);
  }
  
  if ((XOFFSET(TTYInfo) + nScrollAmt) < 0)
  {
    nScrollAmt = -XOFFSET(TTYInfo);
  }
  
  ScrollWindowEx(hWnd,-nScrollAmt,0,NULL,NULL,NULL,NULL,SW_INVALIDATE|SW_ERASE);
  XOFFSET(TTYInfo) = XOFFSET(TTYInfo) + nScrollAmt;
  SetScrollPos(hWnd,SB_HORZ,XOFFSET(TTYInfo),TRUE);

  return (TRUE);
}

BOOL NEAR PaintTTY(HWND hWnd)
{
  PAINTSTRUCT  ps;
  HFONT        hOldFont;
  RECT         rect;
  HDC          hDC;
  int          nRow, nCol, nEndRow, nEndCol;
  int          nCount, nHorzPos, nVertPos;

  hDC = BeginPaint(hWnd,&ps);

  hOldFont = (HFONT)SelectObject(hDC,HTTYFONT(TTYInfo));
  SetTextColor(hDC,FGCOLOR(TTYInfo));
  SetBkColor(hDC,GetSysColor(COLOR_WINDOW));
  rect = ps.rcPaint;
  nRow = min(MAXROWS - 1,max(0,(rect.top + YOFFSET(TTYInfo)) / YCHAR(TTYInfo)));
  nEndRow = min(MAXROWS - 1,((rect.bottom + YOFFSET(TTYInfo) - 1) / YCHAR(TTYInfo)));
  nCol = min(MAXCOLS - 1,max(0,(rect.left + XOFFSET(TTYInfo)) / XCHAR(TTYInfo)));
  nEndCol = min(MAXCOLS - 1,((rect.right + XOFFSET(TTYInfo) - 1) / XCHAR(TTYInfo)));
  nCount = nEndCol - nCol + 1;

  for (;nRow <= nEndRow;nRow++)
  {
    nVertPos = (nRow * YCHAR(TTYInfo)) - YOFFSET(TTYInfo);
    nHorzPos = (nCol * XCHAR(TTYInfo)) - XOFFSET(TTYInfo);
    rect.top = nVertPos ;
    rect.bottom = nVertPos + YCHAR(TTYInfo);
    rect.left = nHorzPos;
    rect.right = nHorzPos + XCHAR(TTYInfo) * nCount;
    SetBkMode(hDC,OPAQUE);
    ExtTextOut(hDC,nHorzPos,nVertPos,ETO_OPAQUE|ETO_CLIPPED,&rect,
               (LPSTR)(SCREEN(TTYInfo) + nRow * MAXCOLS + nCol),
                nCount,NULL);
  }
  
  SelectObject(hDC,hOldFont);
  EndPaint(hWnd,&ps);
  MoveTTYCursor(hWnd);
  return (TRUE);
}

BOOL NEAR MoveTTYCursor(HWND hWnd)
{
  if (CONNECTED(TTYInfo) && (CURSORSTATE(TTYInfo) & CS_SHOW))
  {
    SetCaretPos((COLUMN(TTYInfo) * XCHAR(TTYInfo)) -
                XOFFSET(TTYInfo),
                (ROW(TTYInfo) * YCHAR(TTYInfo)) -
                YOFFSET(TTYInfo));
  }
   
  return (TRUE);
}

BOOL NEAR SetTTYFocus(HWND hWnd)
{
  if (CONNECTED(TTYInfo) && (CURSORSTATE(TTYInfo) != CS_SHOW))
  {
    CreateCaret(hWnd,NULL,XCHAR(TTYInfo),YCHAR(TTYInfo));
    ShowCaret(hWnd);
    CURSORSTATE(TTYInfo) = CS_SHOW;
  }

  MoveTTYCursor(hWnd);
  return (TRUE);
}

BOOL NEAR KillTTYFocus(HWND hWnd)
{
  if (CURSORSTATE(TTYInfo) != CS_HIDE)
  {
    HideCaret(hWnd);
    DestroyCaret();
    CURSORSTATE(TTYInfo) = CS_HIDE;
  }
  return (TRUE);
}

BOOL NEAR SizeTTY(HWND hWnd,WORD wWidth,WORD wHeight)
{
  int nScrollAmt ;

  // adjust vert settings
  YSIZE(TTYInfo) = (int)wHeight ;
  YSCROLL(TTYInfo) = max(0,(MAXROWS * YCHAR(TTYInfo)) - YSIZE(TTYInfo));
  nScrollAmt = min(YSCROLL(TTYInfo),YOFFSET(TTYInfo)) - YOFFSET(TTYInfo);
  ScrollWindow(hWnd,0,-nScrollAmt,NULL,NULL);

  YOFFSET(TTYInfo) = YOFFSET(TTYInfo) + nScrollAmt;
  SetScrollPos(hWnd,SB_VERT,YOFFSET(TTYInfo),FALSE);
  SetScrollRange(hWnd,SB_VERT,0,YSCROLL(TTYInfo),TRUE);

  // adjust horz settings
  XSIZE(TTYInfo) = (int)wHeight ;
  XSCROLL(TTYInfo) = max(0,(MAXCOLS * XCHAR(TTYInfo)) - XSIZE(TTYInfo));
  nScrollAmt = min(XSCROLL(TTYInfo), XOFFSET(TTYInfo)) - XOFFSET(TTYInfo);
  ScrollWindow(hWnd,nScrollAmt,0,NULL,NULL);
  XOFFSET(TTYInfo) = XOFFSET(TTYInfo) + nScrollAmt;
  SetScrollRange(hWnd,SB_HORZ,0,XSCROLL(TTYInfo),FALSE);
  SetScrollPos(hWnd,SB_HORZ,XOFFSET(TTYInfo),TRUE);

  InvalidateRect(hWnd,NULL,FALSE);   // redraw entire window

  return (TRUE);
}

int WINAPI TTYChildProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam)
{
  switch(uMessage)
  {
    case WM_VSCROLL:
         ScrollTTYVert(hWnd,LOWORD(wParam),HIWORD(wParam));
         break;

    case WM_HSCROLL:
         ScrollTTYHorz(hWnd,LOWORD(wParam),HIWORD(wParam));
         break;

    case WM_SIZE:
         SizeTTY(hWnd,LOWORD(lParam),HIWORD(lParam));
         break;

    case WM_PAINT:
         PaintTTY(hWnd);
         break;

    case WM_CHAR:
         {
           // keyboard activity in TTY Window 
           if (CONNECTED(TTYInfo)) 
           {
             if (!WriterAddNewNode(WRITE_CHAR,0,(char)wParam,NULL,NULL,NULL))
             {
               return FALSE;
             }

             if (LOCALECHO(TTYInfo))
             {
               OutputABufferToWindow(ghWndTTY,(CHAR *)&wParam,1);
             }
           }
         }
         break;

    case WM_SETFOCUS:
         SetTTYFocus(ghWndTTY);
         break;

    case WM_KILLFOCUS:
         KillTTYFocus(ghWndTTY);
         break;

    case WM_MOUSEACTIVATE:
         // If mouse is clicked in me (the tty child window) then I need to get the focus.
         SetFocus(hWnd);
         return MA_ACTIVATE;
         break;

    default:
         return DefWindowProc(hWnd,uMessage,wParam,lParam);
  }
  
  return 0L;
}

void GlobalInitialize()
{
  int cyMenuHeight, cyCaptionHeight, cyFrameHeight;

  // critical sections in status reporting & node management
  InitializeCriticalSection(&gStatusCritical);
  InitializeCriticalSection(&gcsWriterHeap);
  InitializeCriticalSection(&gcsDataHeap);

  // status message event
  ghStatusMessageEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
  
  if (ghStatusMessageEvent == NULL)
  {
    ErrorReporter("CreateEvent(Status message event)");
  }

  // thread exit event
  ghThreadExitEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
    
  if (ghThreadExitEvent == NULL)
  {
    ErrorReporter("CreateEvent(Thread exit event)");
  }  

  // used in file transfer status bar
  InitCommonControls();
  
//  Comment by Walter: 
//  InitCommonControls() is deprecated
//  Nowadays Microsoft recommends the following:
//  {
//    INITCOMMONCONTROLSEX iccEx;
//    iccEx.dwSize = sizeof(INITCOMMONCONTROLSEX);
//    iccEx.dwICC = ICC_WIN95_CLASSES;
//      
//    InitCommonControlsEx(&iccEx); 
//  }

  // font for status reporting control
  ghFontStatus = CreateStatusEditFont();

  // the following are used for sizing the tty window and dialog windows
  gwBaseY = HIWORD(GetDialogBaseUnits());
  cyMenuHeight = GetSystemMetrics(SM_CYMENU);
  cyCaptionHeight = GetSystemMetrics(SM_CYCAPTION);
  cyFrameHeight = GetSystemMetrics(SM_CYFRAME);
  gcyMinimumWindowHeight = cyMenuHeight + \
                           4 * cyCaptionHeight + \
                           2 * cyFrameHeight +
                           (SETTINGSFACTOR + STATUSFACTOR) * gwBaseY;
  return;
}

void GlobalCleanup()
{
  DeleteCriticalSection(&gStatusCritical);
  DeleteCriticalSection(&gcsWriterHeap);
  DeleteCriticalSection(&gcsDataHeap);
  DeleteObject(ghFontStatus);
  CloseHandle(ghStatusMessageEvent);
  CloseHandle(ghThreadExitEvent);
  HeapDestroy(ghStatusMessageHeap);
  return;
}

BOOL ClearTTYContents()
{
  FillMemory(SCREEN(TTYInfo),MAXCOLS*MAXROWS,' ');
  return TRUE;
}

void InitNewFont(LOGFONT LogFont, COLORREF rgbColor)
{
  TEXTMETRIC tm;
  HDC        hDC;

  // if old one exists, then I should delete it
  if (HTTYFONT(TTYInfo))
  {
    DeleteObject(HTTYFONT(TTYInfo));
  }

  LFTTYFONT(TTYInfo) = LogFont;
  HTTYFONT(TTYInfo) = CreateFontIndirect(&(LFTTYFONT(TTYInfo)));
  FGCOLOR(TTYInfo) = rgbColor;

  hDC = GetDC(ghwndMain);
  SelectObject(hDC,HTTYFONT(TTYInfo));
  GetTextMetrics(hDC,&tm);
  ReleaseDC(ghwndMain,hDC);

  // character width and height
  XCHAR(TTYInfo) = tm.tmAveCharWidth;
  YCHAR(TTYInfo) = tm.tmHeight + tm.tmExternalLeading;

  XOFFSET(TTYInfo) = 0;
  YOFFSET(TTYInfo) = YCHAR(TTYInfo) * ROW(TTYInfo);
}

BOOL InitTTYInfo()
{
  // Initialize TTY info for dBlackBox plus (you can look up the DCB structure in help)
  // Many of these values are also very common for other devices
  COMDEV(TTYInfo)          = NULL;
  CONNECTED(TTYInfo)       = FALSE;
  LOCALECHO(TTYInfo)       = FALSE;
  CURSORSTATE(TTYInfo)     = CS_HIDE;
  PORT(TTYInfo)            = 1;
  BAUDRATE(TTYInfo)        = CBR_4800;
  BYTESIZE(TTYInfo)        = 8;
  PARITY(TTYInfo)          = NOPARITY;
  STOPBITS(TTYInfo)        = ONESTOPBIT;
  AUTOWRAP(TTYInfo)        = TRUE;
  NEWLINE(TTYInfo)         = FALSE;
  XSIZE(TTYInfo)           = 0;
  YSIZE(TTYInfo)           = 0;
  XSCROLL(TTYInfo)         = 0;
  YSCROLL(TTYInfo)         = 0;
  COLUMN(TTYInfo)          = 0;
  ROW(TTYInfo)             = MAXROWS - 1;
  DISPLAYERRORS(TTYInfo)   = TRUE;

  // timeouts
  TIMEOUTSNEW( TTYInfo )   = gTimeoutsDefault;

  // read state and status events
  gdwReceiveState          = RECEIVE_TTY;
  EVENTFLAGS(TTYInfo)      = EVENTFLAGS_DEFAULT;
  FLAGCHAR(TTYInfo)        = FLAGCHAR_DEFAULT;

  // Flow Control Settings
  DTRCONTROL(TTYInfo)      = DTR_CONTROL_DISABLE;
  RTSCONTROL(TTYInfo)      = RTS_CONTROL_DISABLE;
  XONCHAR(TTYInfo)         = ASCII_XON;
  XOFFCHAR(TTYInfo)        = ASCII_XOFF;
  XONLIMIT(TTYInfo)        = 0;
  XOFFLIMIT(TTYInfo)       = 0;
  CTSOUTFLOW(TTYInfo)      = FALSE;
  DSROUTFLOW(TTYInfo)      = FALSE;
  DSRINFLOW(TTYInfo)       = FALSE;
  XONXOFFOUTFLOW(TTYInfo)  = FALSE;
  XONXOFFINFLOW(TTYInfo)   = FALSE;
  TXAFTERXOFFSENT(TTYInfo) = FALSE;

  NOREADING(TTYInfo)       = FALSE;
  NOWRITING(TTYInfo)       = FALSE;
  NOEVENTS(TTYInfo)        = FALSE;
  NOSTATUS(TTYInfo)        = FALSE;
  SHOWTIMEOUTS(TTYInfo)    = FALSE;

  // setup default font information
  LFTTYFONT(TTYInfo).lfHeight =         12 ;
  LFTTYFONT(TTYInfo).lfWidth =          0 ;
  LFTTYFONT(TTYInfo).lfEscapement =     0 ;
  LFTTYFONT(TTYInfo).lfOrientation =    0 ;
  LFTTYFONT(TTYInfo).lfWeight =         0 ;
  LFTTYFONT(TTYInfo).lfItalic =         0 ;

⌨️ 快捷键说明

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