📄 mychild1.cpp
字号:
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 + -