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

📄 mychild1.cpp

📁 这是一个在正实际应用当中运行的电力监控系统软件源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#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 + -