📄 mychild1.cpp
字号:
#include <owl.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include "novell.h"
#include "def.h"
#include "wincomm.h"
#include "ctkdef.h"
//-- 定义实时数据库全局变量
#include "db.h"
#include "dbfile.h"
#include "cmdefs.h"
#ifdef __cplusplus
extern int min (int value1, int value2);
extern int max (int value1, int value2);
#endif
extern WORD TotalChNum, TotalProtoNum, TotalStaNum;
extern CHANNELPARAM FAR *lpChannelParam;
extern STATIONPARAM FAR *lpStaParam;
extern HBRUSH hBackgroundBrush;
extern COLORREF BackColor;
extern WORD hRdSysEvent;
extern WORD hRdSysCmd;
extern HWND hMainWindow;
extern char FAR *lpMsgBuf;
//extern NetSend;
//extern NetRcv;
BYTE huge *BUFbuf=(BYTE huge *)&(NetRcv[0].RXBUF_addr); //tzc
char KeyW[9];
void DrawBorder (HDC PaintDC, RECT &Rect, BOOL ShadowFlag, BOOL PrinterFlag);
COLORREF GetColor (COLORREF Color);
//---------------------------------------------------------
TMyChildWnd1::TMyChildWnd1(PTWindowsObject AParent, LPSTR ATitle, int WinType)
: TWindow(AParent, ATitle)
{
KeyW[0]='E';KeyW[1]='B';KeyW[2]='9';KeyW[3]='0';KeyW[4]=0;
char str[40];
// Attr.Style|=WS_CHILD|WS_MAXIMIZE;
Attr.Style|=WS_CHILD;
Attr.X = 10;
Attr.Y = 10;
Attr.W = 720;
Attr.H = 500;
WinFlag = WinType;
DispPage = 0;
StartNo = 0;
lastno = 0;
switch (WinFlag)
{
case RXBUFFWINDOW:
case TXBUFFWINDOW:
CurrentNo = 0;
PauseFlag = FALSE;
CtrlX = 25; CtrlY = 60;
keynum=0;
PauseBt = new TButton(this, ID_PAUSE, "暂停", CtrlX, CtrlY, 40, 25, FALSE);
if (PauseFlag)
SetWindowText(PauseBt->HWindow, "刷新");
new TButton(this, ID_PAGEUP, "前页", CtrlX+40, CtrlY, 40, 25, FALSE);
new TButton(this, ID_PAGEDOWN, "后页", CtrlX+80, CtrlY, 40, 25, FALSE);
new TButton(this, ID_KEYWORD, "关键字读取", CtrlX+120, CtrlY, 90, 25, FALSE);
KeyEdit = new TEdit(this, ID_KEYEDIT, "", CtrlX+210, CtrlY, 80, 25,
MAX_TEXTLEN, FALSE);
new TButton(this, ID_ARROWL, "←", CtrlX+290, CtrlY, 16, 25, FALSE);
new TButton(this, ID_ARROWR, "→", CtrlX+306+4*58, CtrlY, 16, 25, FALSE);
for (int i=0; i<4; i++)
{
if ((StartNo+i)<TotalChNum)
wsprintf(str, "通道%d", StartNo+i);
else str[0]='\0';
TableText[i] = new TBStatic(this, ID_STATICNO1+i, str, CtrlX+312+i*58, CtrlY+5,
50, 16, FALSE);
}
EnableKBHandler();
break;
case CHSTATUSWINDOW:
cwWidth = 130; cwHeight = 95;//tzc132;
CtrlX = 2; CtrlY = 60;
break;
case REALYXWINDOW:
case REALYCWINDOW:
case REALKWHWINDOW:
CurrentNo = 0;
PauseFlag = FALSE;
CtrlX = 25; CtrlY = 60;
new TButton(this, ID_PAGEUP, "前页", CtrlX, CtrlY, 40, 25, FALSE);
new TButton(this, ID_PAGEDOWN, "后页", CtrlX+40, CtrlY, 40, 25, FALSE);
new TButton(this, ID_ARROWL, "←", CtrlX+80, CtrlY, 20, 25, FALSE);
new TButton(this, ID_ARROWR, "→", CtrlX+100+4*132, CtrlY, 20, 25, FALSE);
for ( i=0; i<4; i++)
{
GetName(RTUDB, StartNo+i, 0, str);
TableText[i] = new TBStatic(this, ID_STATICNO1+i, str, CtrlX+106+i*132, CtrlY+5,
124, 16, FALSE);
}
EnableKBHandler();
break;
case EVENTWINDOW:
case RECCMDWINDOW:
case RECDATAWINDOW:
case SENDCMDWINDOW:
case SENDDATAWINDOW:
PauseFlag = FALSE;
CtrlX = 25; CtrlY = 60;
keynum=0;
PauseBt = new TButton(this, ID_PAUSE, "暂停", CtrlX, CtrlY, 40, 25, FALSE);
if (PauseFlag)
SetWindowText(PauseBt->HWindow, "刷新");
new TButton(this, ID_PAGEUP, "前页", CtrlX+40, CtrlY, 40, 25, FALSE);
new TButton(this, ID_PAGEDOWN, "后页", CtrlX+80, CtrlY, 40, 25, FALSE);
new TButton(this, ID_KEYWORD, "关键字读取", CtrlX+120, CtrlY, 90, 25, FALSE);
KeyEdit = new TEdit(this, ID_KEYEDIT, "", CtrlX+210, CtrlY, 80, 25,
MAX_TEXTLEN, FALSE);
EnableKBHandler();
break;
}
}
TMyChildWnd1::~TMyChildWnd1()
{
BOOL Flag = 0;
/* for (int i=0; i<6; i++)
{
if (i != WinFlag)
{
if (((TMainWindow *)Parent)->DispWindow[i] != 0)
{
((TMainWindow *)Parent)->ActiveDispWindow = ((TMainWindow *)Parent)->DispWindow[i];
Flag = 1;
break;
}
}
} // end for
if (Flag == 0) {
((TMainWindow *)Parent)->ActiveDispWindow = 0;*/
((TMainWindow *)Parent)->DispWindow[WinFlag] = 0;
KillTimer (HWindow, 2);
// if (Scroller) delete Scroller;
}
void TMyChildWnd1::GetWindowClass(WNDCLASS _FAR &AWndClass)
{
TWindow::GetWindowClass(AWndClass);
AWndClass.hbrBackground = hBackgroundBrush; // 设置窗口背景色
}
void TMyChildWnd1::SetupWindow()
{
TWindow::SetupWindow();
if (!SetTimer(HWindow, 2, 500u, NULL))
MessageBox (HWindow, "\n\n Too Many Timers", "", MB_ICONEXCLAMATION|MB_OK);
}
void TMyChildWnd1::WMTimer(RTMessage)
{
switch (WinFlag)
{
case RXBUFFWINDOW:
case TXBUFFWINDOW:
if (!PauseFlag) FreshBuffDisp();
break;
case CHSTATUSWINDOW:
FreshChStatus();
break;
case REALYXWINDOW:
case REALYCWINDOW:
case REALKWHWINDOW:
FreshRealData();
break;
case EVENTWINDOW:
case RECCMDWINDOW:
case SENDCMDWINDOW:
case SENDDATAWINDOW:
case RECDATAWINDOW:
if (!PauseFlag) FreshEventBuf();
break;
}
}
void TMyChildWnd1::WMPaint(RTMessage)
{
PAINTSTRUCT ps;
HDC hdc=BeginPaint(HWindow, &ps);
switch (WinFlag)
{
case RXBUFFWINDOW:
case TXBUFFWINDOW:
DrawBuffDisp(hdc);
break;
case CHSTATUSWINDOW:
DrawChStatus(hdc);
break;
case REALYXWINDOW:
case REALYCWINDOW:
case REALKWHWINDOW:
DrawRealData(hdc);
break;
case EVENTWINDOW:
case RECCMDWINDOW:
case RECDATAWINDOW:
case SENDCMDWINDOW:
case SENDDATAWINDOW:
DrawEventBuf(hdc);
break;
}
EndPaint(HWindow, &ps);
}
//--------------------------------------
void TMyChildWnd1::DrawBuffDisp(HDC hdc)
{
RECT Rect;
HBRUSH hOldBrush = (HBRUSH)SelectObject (hdc, (HBRUSH)GetStockObject(LTGRAY_BRUSH));
HBRUSH hBackBrush = CreateSolidBrush (BackColor);
HPEN hpen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
HPEN hOldPen = (HPEN)SelectObject (hdc, hpen);
// 为静态控制画背景,如通道号显示
Rectangle (hdc, CtrlX+306, CtrlY, CtrlX+306+4*58, CtrlY+25);
for (int i=0; i<4; i++)
{
MoveTo(hdc, CtrlX+312+i*58, CtrlY);
LineTo(hdc, CtrlX+306+i*58, CtrlY+6);
LineTo(hdc, CtrlX+306+i*58, CtrlY+25);
}
SelectObject (hdc, hBackBrush);
SetBkMode (hdc, TRANSPARENT);
SetBkColor (hdc, BackColor);
int Width = 475, Height = 24;
int x=CtrlX+40, y=CtrlY-45;
Rect.left = x-5; Rect.top = y-5;
Rect.right = x+Width+5; Rect.bottom = y+Height+5;
DrawBorder (hdc, Rect, 1, 0); //PrinterFlag);
Rectangle (hdc, x, y, x+Width, y+Height);
cwWidth = 32; cwHeight = 21;
x=CtrlX+5; y=CtrlY+30;
Rect.left = x-5; Rect.top = y-5;
Rect.right = x+cwWidth*17+5; Rect.bottom = y+cwHeight*17+5;
DrawBorder (hdc, Rect, 1, 0); //PrinterFlag);
Rectangle (hdc, x, y, x+cwWidth*17, y+cwHeight*17);
for (i=1; i<17; i++)
{
MoveTo (hdc, x+i*cwWidth, y);
LineTo (hdc, x+i*cwWidth, y+cwHeight*17);
MoveTo (hdc, x, y+i*cwHeight);
LineTo (hdc, x+17*cwWidth, y+i*cwHeight);
}
DeleteObject ((HBRUSH)SelectObject (hdc, hOldBrush));
SelectObject (hdc, hOldPen);
DeleteObject (hpen);
lastno = 0;
FreshBuffDisp();
}
void TMyChildWnd1::FreshBuffDisp()
{
char Str[100];
char szText[8];
BYTE FAR *buf;
int curpt;
if (CurrentNo >= TotalChNum) CurrentNo = 0;
HDC hdc = GetDC(HWindow);
HBRUSH hBackBrush = CreateSolidBrush (BackColor);
HBRUSH hOldBrush = (HBRUSH)SelectObject (hdc, hBackBrush);
HPEN hpen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
HPEN hOldPen = (HPEN)SelectObject (hdc, hpen);
SetBkColor (hdc, BackColor);
int x=CtrlX+5, y=CtrlY+30;
switch(WinFlag)
{
case 0:
DispPage = min(DispPage, ((lpChannelParam+CurrentNo)->RxBuffLen-1)/256);
wsprintf(Str, "串行接收缓冲区___通道%d 读指针:%x 写指针:%x ",
CurrentNo, (lpChannelParam+CurrentNo)->RxReadP, (lpChannelParam+CurrentNo)->RxWriteP);
buf = (lpChannelParam+CurrentNo)->RecBuff;
curpt = (lpChannelParam+CurrentNo)->RxWriteP%256;
if (buf) buf += DispPage*256;
break;
case 1:
DispPage = min(DispPage, ((lpChannelParam+CurrentNo)->TxBuffLen-1)/256);
wsprintf(Str, "串行发送缓冲区___通道%d 读指针:%x 写指针:%x ",
CurrentNo, (lpChannelParam+CurrentNo)->TxReadP, (lpChannelParam+CurrentNo)->TxWriteP);
buf = (lpChannelParam+CurrentNo)->SendBuff;
curpt = (lpChannelParam+CurrentNo)->TxWriteP%256;
if (buf) buf += DispPage*256;
break;
}
COLORREF color = GetColor (BackColor);
SetTextColor (hdc, color);
for (int i=0; i<16; i++)
{
wsprintf(szText, "%x", i);
for (int k=0; k<strlen(szText); k++) szText[k]=toupper(szText[k]);
TextOut(hdc, x+(i+1)*cwWidth+12, y+3, szText, lstrlen(szText));
wsprintf(szText, "%02x", DispPage*16+i);
for (k=0; k<strlen(szText); k++) szText[k]=toupper(szText[k]);
TextOut(hdc, x+8, y+(i+1)*cwHeight+3, szText, lstrlen(szText));
}
SetTextColor(hdc,RGB(0,0,0));//RGB(255,255,255));
TextOut(hdc, CtrlX+65, CtrlY-42, Str, lstrlen(Str));
// BYTE curdisp;
// if (WinFlag ==RXBUFFWINDOW) curdisp = (lpChannelParam+CurrentNo)->RxWriteP%256;
// else curdisp = (lpChannelParam+CurrentNo)->TxWriteP%256;
if (curpt < lastno) curpt += 256;
char knum;
if (buf)
{
for (i=0; i<16; i++)
for (int j=0; j<16; j++)
{
if (keynum==0)
{
strcpy(Str,"");
knum=strlen(KeyW);
for (int h=0; h<knum; h+=2)
{
wsprintf(szText, "%02x",*(buf+(16*i+j+h/2)%256));
for (int k=0; k<strlen(szText); k++) szText[k]=toupper(szText[k]);
strcat(Str, szText);
}
Str[knum]=0;
if (strcmp(Str,KeyW)) keynum=0;
else
{
keynum=knum/2;
SetTextColor(hdc,RGB(255,0,0));
}
}
// if (*(buf+16*i+j)==0xeb &&*(buf+16*i+j+1)==0x90){ SetTextColor(hdc,RGB(0,255,0));keynum=2;}
wsprintf(szText, "%02x ", *(buf+16*i+j));
for (int k=0; k<strlen(szText); k++) szText[k]=toupper(szText[k]);
if (keynum==0)
SetTextColor(hdc,RGB(0,0,0));//RGB(255,255,255));
else keynum--;
TextOut(hdc, x+(j+1)*cwWidth+8, y+(i+1)*cwHeight+2, szText, lstrlen(szText));
}
/* for (i=lastno; i<curpt; i++)
{
wsprintf(szText, "%s", " ");
TextOut(hdc, x+((i%256)%16+1)*cwWidth+8, y+((i%256)/16+1)*cwHeight+2, szText, lstrlen(szText));
}
{
wsprintf(szText, "%02x ", *(buf+(i%256)));
for (int k=0; k<strlen(szText); k++) szText[k]=toupper(szText[k]);
TextOut(hdc, x+((i%256)%16+1)*cwWidth+8, y+((i%256)/16+1)*cwHeight+2, szText, lstrlen(szText));
} */
}
lastno = curpt%256;
DeleteObject ((HBRUSH)SelectObject (hdc, hOldBrush));
SelectObject (hdc, hOldPen);
DeleteObject (hpen);
ReleaseDC(HWindow,hdc);
}
//--------------------------------------
void TMyChildWnd1::WMVScroll (RTMessage Msg)
{
// CtrlY+=5;
}
void TMyChildWnd1::WMHScroll (RTMessage Msg)
{
// CtrlX+=5;
}
void TMyChildWnd1::DrawChStatus(HDC hdc)
{
RECT r;
char Text[32];
char *ITile[]={"误码", "运行", "停运"};
char *status[]={"OFF", "ON"};
RowNum = 6;
//tzc
/*
Scroller->TrackMode=TRUE;
Scroller->HasVScrollBar=TRUE;
Scroller->HasHScrollBar=TRUE;
CtrlX=(short)Scroller->XUnit;
CtrlY=(short)Scroller->YUnit;
*/
COLORREF color1=BackColor;
COLORREF color2=RGB(192,208,214);
HBRUSH hBackBrush1 = CreateSolidBrush (color1);
HBRUSH hBackBrush2 = CreateSolidBrush (color2);
HBRUSH hOldBrush = (HBRUSH)SelectObject (hdc, hBackBrush1);
HPEN hpen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -