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

📄 mychild1.cpp

📁 这是一个在正实际应用当中运行的电力监控系统软件源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			  if (wycv&0x8000)
                 {
                  wycv &= 0x7fff;     ycv = wycv*(-1);
                 }
                else ycv = wycv;
			  ycp = GetPoint(YCDB, CurrentNo, i) & 3;
			  coe=1.0;  for (j=0; j<ycp; j++)  coe *= 0.1;
              sprintf(Str1, "%s%df ", "%.", ycp);
              sprintf(Str, Str1, (float)ycv*coe);
              for (j=strlen(Str); j<8; j++) Str[j]=' '; Str[8]=0;
			  SetTextColor(hdc,RGB(0, 0, 192));  //tzc
			  TextOut(hdc, x+((i%32)/16)*cwWidth+220, y+((i%32)%16+1)*cwHeight+2, Str, lstrlen(Str));
             }
         }
         break;
    case REALKWHWINDOW:
         {
         DWORD kwhv;
         BYTE kwhp,j;
         float coe;
         char Str1[10];
         for (int i=DispPage*32; i<min((DispPage+1)*32,totalnum); i++)
             {
              kwhv = GetValue(KWHDB, CurrentNo, i);
              kwhp = GetPoint(KWHDB, CurrentNo, i) & 3;
              coe=1.0; for (j=0; j<kwhp; j++) coe *= 0.1;
              sprintf(Str1, "%s%df ", "%.", kwhp);
              sprintf(Str, Str1, (float)kwhv*coe);
              for (j=strlen(Str); j<12; j++) Str[j]=' '; Str[12]=0;
			  SetTextColor(hdc,RGB(0, 0, 192));  //tzc
			  TextOut(hdc, x+((i%32)/16)*cwWidth+210, y+((i%32)%16+1)*cwHeight+2, Str, lstrlen(Str));
             }
         }
         break;
   }
 ReleaseDC(HWindow,hdc);
}

void TMyChildWnd1::DrawEventBuf(HDC hdc)
{
 RECT Rect;

//BRUSH hOldBrush = (HBRUSH)SelectObject (hdc, (HBRUSH)GetStockObject(LTGRAY_BRUSH));
 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);

//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);
 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);
 Rectangle (hdc, x, y, x+cwWidth*17, y+cwHeight*17);

 for (int 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);
     }

 SelectObject (hdc, hOldBrush);
 DeleteObject (hBackBrush);
 SelectObject (hdc, hOldPen);
 DeleteObject (hpen);

 FreshEventBuf();
}

void TMyChildWnd1::FreshEventBuf()
{
 char Str[100];
 char szText[8];
 BYTE huge *buf=NULL;

 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 EVENTWINDOW:
         DispPage = min(DispPage, (sizeof(EVENT)*EVENTMAXNUM-1)/256);
         wsprintf(Str, "事项缓冲区          写指针:%x      ", GetWritePtr(EVENTDB, 0));
         buf = (BYTE huge *)GetBuffer(EVENTDB, 0);
         if (buf) buf += DispPage*256;
         break;
    case RECCMDWINDOW:
         DispPage = min(DispPage, (sizeof(COMMAND)*CMDMAXNUM-1)/256);
		 wsprintf(Str, "网络接收命令缓冲区            写指针:%x      ", GetWritePtr(COMMANDDB, RECCMDBUF));
		 buf = (BYTE huge *)GetBuffer(COMMANDDB, RECCMDBUF);
         if (buf) buf += DispPage*256;
         break;
    case RECDATAWINDOW:
         DispPage = min(DispPage, (CMDDATAMAX-1)/256);
         wsprintf(Str, "              网络接收数据缓冲区");
//         buf = (BYTE huge *)GetBuffer(COMMANDDB, RECCMDDATABUF);
           buf=(BYTE huge *)&(NetRcv[0].RXBUF_addr);              //tzc
         if (buf) buf += DispPage*256;
         break;
    case SENDCMDWINDOW:
         DispPage = min(DispPage, (sizeof(COMMAND)*CMDMAXNUM-1)/256);
         wsprintf(Str, "网络发送命令缓冲区            写指针:%x      ", GetWritePtr(COMMANDDB, SENDCMDBUF));
         buf = (BYTE huge *) GetBuffer(COMMANDDB, SENDCMDBUF);
         if (buf) buf += DispPage*256;
         break;
    case SENDDATAWINDOW:
         DispPage = min(DispPage, (CMDDATAMAX-1)/256);
         wsprintf(Str, "              网络发送数据缓冲区");
//         buf = (BYTE huge *)GetBuffer(COMMANDDB, SENDCMDDATABUF);
         buf=(BYTE huge *)&NetSend.TXBUF_addr;
         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+150, CtrlY-42, Str, lstrlen(Str));

 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));
                 }
             }
           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));
          }
    }

 DeleteObject ((HBRUSH)SelectObject (hdc, hOldBrush));
 SelectObject (hdc, hOldPen);
 DeleteObject (hpen);
 ReleaseDC(HWindow,hdc);
}

//-----------------------------------------------------------
void TMyChildWnd1::WMCommand(RTMessage msg)
{
 TWindow::WMCommand(msg);
 char str[40];

 switch (msg.WParam)
   {
    case ID_PAUSE:
         PauseFlag = !PauseFlag;
         if (PauseFlag)
             SetWindowText(PauseBt->HWindow, "刷新");
           else
             SetWindowText(PauseBt->HWindow, "暂停");
         break;
    case ID_PAGEUP:
         if (DispPage) DispPage--;
         if ((WinFlag==REALYXWINDOW) || (WinFlag==REALYCWINDOW) || (WinFlag==REALKWHWINDOW))
            {
             RECT rect;
             rect.left = CtrlX;      rect.right = CtrlX+cwWidth*2;
             rect.top = CtrlY+51;    rect.bottom = CtrlY+30+cwHeight*17;
             InvalidateRect(HWindow, &rect, FALSE);
            }
         break;
    case ID_PAGEDOWN:
         DispPage++; 
         if ((WinFlag==REALYXWINDOW) || (WinFlag==REALYCWINDOW) || (WinFlag==REALKWHWINDOW))
            {
             RECT rect;
             rect.left = CtrlX;      rect.right = CtrlX+cwWidth*2;
             rect.top = CtrlY+51;    rect.bottom = CtrlY+30+cwHeight*17;
             InvalidateRect(HWindow, &rect, FALSE);
            }
         break;
    case ID_KEYWORD:
         char keyw[9]; 
         GetWindowText(KeyEdit->HWindow, KeyW, sizeof(KeyW));
         KeyW[8]=0;
         for (int k=0; k<strlen(KeyW); k++) KeyW[k]=toupper(KeyW[k]);
         break;
    case ID_ARROWL:
         if ((WinFlag==0) || (WinFlag==1))
            {
             StartNo = max(min(StartNo-4,TotalChNum-4), 0);
             for (int i=0; i<4; i++)
                 {
                  if ((StartNo+i)<TotalChNum)
                      wsprintf(str, "通道%d", StartNo+i);
                     else str[0]='\0';
                  SetWindowText(TableText[i]->HWindow, str);
                 }
            }
           else if ((WinFlag==3) || (WinFlag==4) || (WinFlag==5))
                   {
                    StartNo = max(min(StartNo-4, TotalStaNum-4), 0);
                    for (int i=0; i<4; i++)
                        {
                         GetName(RTUDB, StartNo+i, 0, str);
                         SetWindowText(TableText[i]->HWindow, str);
                        }
                   }
         break;
    case ID_ARROWR:
         if ((WinFlag==0) || (WinFlag==1))
            {
			 StartNo = min(StartNo+4, max(0,TotalChNum-4));
             for (int i=0; i<4; i++)
                 {
                  if ((StartNo+i)<TotalChNum)
                      wsprintf(str, "通道%d", StartNo+i);
                     else str[0]='\0';
                  SetWindowText(TableText[i]->HWindow, str);
                 }
            }
           else if ((WinFlag==3) || (WinFlag==4) || (WinFlag==5))
                   {
                    StartNo = min(StartNo+4, max(0,TotalStaNum-4));
                    for (int i=0; i<4; i++)
                        {
                         GetName(RTUDB, StartNo+i, 0, str);
                         SetWindowText(TableText[i]->HWindow, str);
                        }
                   }
         break;
   }
}

void TMyChildWnd1::WMLButtonDown(RTMessage msg)
{
  int xPos, yPos, no;
  RECT rect;

  xPos = LOWORD(msg.LParam);    /* horizontal position of cursor */
  yPos = HIWORD(msg.LParam);    /* vertical position of cursor   */

  switch (WinFlag)
    {
     case RXBUFFWINDOW:
     case TXBUFFWINDOW:
          if ((xPos>(CtrlX+306)) && (xPos<(CtrlX+306+4*58)) &&
              (yPos>CtrlY) && (yPos<(CtrlY+25)) )
             {
              no = (xPos-(CtrlX+306))/58;
              CurrentNo = StartNo+no;
              rect.left = CtrlX+cwWidth;      rect.right = CtrlX+cwWidth*17;
              rect.top = CtrlY+51;    rect.bottom = CtrlY+30+cwHeight*17;
              InvalidateRect(HWindow, &rect, FALSE);
             }
          break;
     case CHSTATUSWINDOW:
          int x, y;
          for (int i=0; i<TotalChNum; i++)
              {
               x = (i%RowNum)*cwWidth+CtrlX+12;//tzc old=8
               y = (i/RowNum)*cwHeight+CtrlY+27;    
               if ((xPos>x) && (xPos<(x+24)) && (yPos>y) && (yPos<(y+36)))
                  {
				   (lpChannelParam+i)->CHStatus ^= ChOpen;
                   rect.left = (i%RowNum)*cwWidth+CtrlX;
                   rect.right = rect.left+cwWidth;
                   rect.top = (i/RowNum)*cwHeight+CtrlY;
                   rect.bottom = rect.top+cwHeight;
                   InvalidateRect(HWindow, &rect, FALSE); 
                   break;
                  }
              }
          break;
     case REALYXWINDOW:
     case REALYCWINDOW:
     case REALKWHWINDOW:
          if ((xPos>(CtrlX+106)) && (xPos<(CtrlX+106+4*132)) &&
              (yPos>CtrlY) && (yPos<(CtrlY+25)) )
             {
              no = (xPos-(CtrlX+106))/132;
              CurrentNo = StartNo+no;
              DispPage = 0;
              rect.left = CtrlX;      rect.right = CtrlX+cwWidth*2;
              rect.top = CtrlY+51;    rect.bottom = CtrlY+30+cwHeight*17;
              InvalidateRect(HWindow, &rect, FALSE);
              }
          break;
     case EVENTWINDOW:
          break;
    }
}

//-----------------------------------------------------------------------------------------//
// 画立体边框
void DrawBorder (HDC PaintDC, RECT &Rect, BOOL ShadowFlag, BOOL PrinterFlag)
{
    HBRUSH hOldBrush;
    if (PrinterFlag == 0)
        hOldBrush = (HBRUSH)SelectObject (PaintDC, (HBRUSH)GetStockObject(LTGRAY_BRUSH));
    else
        hOldBrush = (HBRUSH)SelectObject (PaintDC, (HBRUSH)GetStockObject(NULL_BRUSH));

    HPEN hOldPen = (HPEN)SelectObject (PaintDC, (HPEN)GetStockObject(BLACK_PEN));

    Rectangle (PaintDC, Rect.left, Rect.top, Rect.right, Rect.bottom);
    Rectangle (PaintDC, Rect.left+5, Rect.top+5, Rect.right-5, Rect.bottom-5);
    DeleteObject ((HBRUSH)SelectObject (PaintDC, hOldBrush));

    LOGPEN lpPen = {PS_SOLID, {1, 1}, RGB(128, 128, 128)};
    HPEN hGrayPen   = CreatePenIndirect (&lpPen);

    DeleteObject ((HPEN)SelectObject (PaintDC, hGrayPen));
    MoveTo (PaintDC, Rect.left+4, Rect.top+4);
    LineTo (PaintDC, Rect.right-4, Rect.top+4);
    MoveTo (PaintDC, Rect.left+4, Rect.top+4);
    LineTo (PaintDC, Rect.left+4, Rect.bottom-4);

    MoveTo (PaintDC, Rect.right-2, Rect.bottom-2);
    LineTo (PaintDC, Rect.right-2, Rect.top+1);
    MoveTo (PaintDC, Rect.right-2, Rect.bottom-2);
    LineTo (PaintDC, Rect.left+1, Rect.bottom-2);

    DeleteObject ((HPEN)SelectObject (PaintDC, (HPEN)GetStockObject(WHITE_PEN)));
    MoveTo (PaintDC, Rect.left+1,  Rect.top+1);
    LineTo (PaintDC, Rect.right-1, Rect.top+1);
    MoveTo (PaintDC, Rect.left+1,  Rect.top+1);
    LineTo (PaintDC, Rect.left+1,   Rect.bottom-1);

    MoveTo (PaintDC, Rect.right-4, Rect.bottom-4);
    LineTo (PaintDC, Rect.right-4, Rect.top+4);
    MoveTo (PaintDC, Rect.right-4, Rect.bottom-4);
    LineTo (PaintDC, Rect.left+4,  Rect.bottom-4);

    if (ShadowFlag == 1) {
        LOGPEN lpPen1 = {PS_SOLID, {4, 4}, RGB(0, 0, 0)};
        HPEN hBlackPen = CreatePenIndirect (&lpPen1);
        DeleteObject ((HPEN)SelectObject(PaintDC, hBlackPen));
        MoveTo (PaintDC, Rect.right+2, Rect.bottom+2);
        LineTo (PaintDC, Rect.right+2, Rect.top+8);
        MoveTo (PaintDC, Rect.right+2, Rect.bottom+2);
        LineTo (PaintDC, Rect.left+8,  Rect.bottom+2);
    }
    DeleteObject ((HPEN)SelectObject (PaintDC, hOldPen));
}


//-----------------------------------------------------------------------------------------//
// 获得 Color 的反色
COLORREF GetColor (COLORREF Color)     
{
    COLORREF Ret; 
    DWORD color = (~Color)<<1;

    int R, G, B;
    R = 64*((GetRValue(color)+63)/64);
    G = 64*((GetGValue(color)+63)/64);
    B = 64*((GetBValue(color)+63)/64);
    R = R<255 ? R:255;
    G = G<255 ? G:255;
    B = B<255 ? B:255;
    Ret = RGB (R, G, B);
    if (Color == RGB (192, 192, 192))  Ret = RGB(255, 255, 255);
    return Ret;
}

⌨️ 快捷键说明

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