?? dgpslistener.cpp
字號:
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 + -