rtdbm.cpp
来自「这是一个在正实际应用当中运行的电力监控系统软件源代码」· C++ 代码 · 共 1,342 行 · 第 1/3 页
CPP
1,342 行
#include <dos.h>
#include <owl.h>
#include <stdio.h>
//#include <ddeml.h>
#include <dialog.h>
#include <edit.h>
#include <string.h>
#include <time.h>
#include <ctype.h>
#include "def.h"
#include "db.h"
#include "dbfile.h"
#include "cmdefs.h"
#ifndef RTDBM_H
#include "rtdbm.h"
#endif
extern yxnum[];
extern ycnum[];
extern kwhnum[];
extern DBNUM;
PRtdbmWindow pStaticThis = NULL;
HINSTANCE hInst;
HWND HWin;
HWND hwnd;
RECT rect;
char far Text[11];
FARPROC CallBack;
void StartDDEForRtdbm ();
//static HDDEDATA FAR PASCAL _export RtdbmWindow::TczCallBack (WORD,WORD,HCONv,HSZ,HSZ,HDDEDATA,DWORD,DWORD);
//do any hWindow required tasks here
/*static char *ServiceName[] =
{
"DISPATCHING",
"DBMS",
"TABLE",
"FHKZ",
"PAINT",
"NET",
"PRINTEVENT",
"MNP",
"PAS",
"REALDB",
"SERVER2",
"SERVER3",
NULL
}; */
//=====================================================================
// 下面是 RtdbmApp处理程序
void RtdbmApp::InitApplication ()
{
TApplication::InitApplication ();
}
void RtdbmApp::MessageLoop ()
{
MSG msg;
while (GetMessage (&msg,NULL,NULL,NULL) ) {
TranslateMessage (&msg);
DispatchMessage (&msg);
}
}
void RtdbmApp::InitInstance ()
{
if (!hPrevInstance)
TApplication::InitInstance ();
}
/* Construct the ScadaApp's MainWindow of type DDESrvWindow */
void RtdbmApp::InitMainWindow ()
{
MainWindow = new RtdbmWindow (NULL, "TCZ实时数据库管理");
}
void RtdbmApp::IdleAction ()
{
static DWORD dwTime = GetTickCount ();
if ((pStaticThis->FocusChildHandle != NULL) && (GetTickCount ()-dwTime>5000))
{
dwTime = GetTickCount ();
InvalidateRect (pStaticThis->FocusChildHandle, &rect, FALSE);
UpdateWindow (pStaticThis->FocusChildHandle);
}
}
RtdbmApp::RtdbmApp (LPSTR name, HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
: TApplication (name, hInstance, hPrevInstance, lpCmdLine, nCmdShow)
{
}
// 主程序 Run the RtdbmApp
int PASCAL WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
if (!hPrevInstance)
{
HINSTANCE hLib;
hLib = LoadLibrary ("BWCC.DLL");
if (hLib < (HINSTANCE)32) return 0;
hInst=hInstance;
RtdbmApp rtdbmapp ("RTDBM", hInstance, hPrevInstance, lpCmdLine, nCmdShow);
rtdbmapp.Run ();
FreeLibrary (hLib);
return rtdbmapp.Status;
}
else
{
hwnd = FindWindow ("RTDBMWINDOW","TCZ实时数据库管理");
PostMessage (hwnd, WM_DUPEXE,0,0L);
}
return 0;
}
//===================================================================
// 下面是口令对话框的处理
class Password : public TDialog
{
TEdit *edit;
public:
Password (PTWindowsObject AParent);
virtual void SetupWindow ();
virtual BOOL CanClose ();
};
Password::Password (PTWindowsObject AParent)
: TDialog (AParent, "PASSWORD")
{
Text[0] = 0;
edit=new TEdit (this, ID_PASSWORD, sizeof (Text));
};
void Password::SetupWindow ()
{
TDialog::SetupWindow ();
}
BOOL Password::CanClose ()
{
edit->GetLine (Text,10,0);
return TRUE;
}
//=================================================================================
// 下面的程序是RtdbmWindow的处理程序
// Construct a RtdbmWindow, loading its menu
RtdbmWindow::RtdbmWindow (PTWindowsObject AParent, LPSTR ATitle)
:TWindow (AParent, ATitle)
{
Attr.X = 200;
Attr.Y = 150;
Attr.W = 400;
Attr.H = 300;
// AssignMenu ("DISPMEMLEN");
HWin = NULL;
}
// RtdbmWindow 析构函数
RtdbmWindow::~RtdbmWindow ()
{
KillTimer (HWindow,1);
FreeAllDBFile();
/* if (Addr->HPaint)
SendMessage (Addr->HPaint,WM_CLOSE,1,0L);
if (Addr->HDispatching)
SendMessage (Addr->HDispatching,WM_CLOSE,1,0L);
if (Addr->HFHKZ)
SendMessage (Addr->HFHKZ,WM_CLOSE,1,0L);
if (Addr->HPrintEvent)
SendMessage (Addr->HPrintEvent,WM_CLOSE,1,0L);
if (Addr->HMNP)
SendMessage (Addr->HMNP,WM_CLOSE,1,0L);
if (Addr->HTable)
SendMessage (Addr->HTable,WM_CLOSE,1,0L);
if (Addr->HDBMS)
SendMessage (Addr->HDBMS,WM_CLOSE,1,0L);
if (Addr->HRealDB)
SendMessage (Addr->HRealDB,WM_CLOSE,1,0L);
if (Addr->HPAS)
SendMessage (Addr->HPAS,WM_CLOSE,1,0L);
if (Addr->HPAS)
SendMessage (Addr->HPAS,WM_CLOSE,1,0L);
if (Addr->HPAS)
SendMessage (Addr->HPAS,WM_CLOSE,1,0L);
for (int i=0; i<DDENUM; i++) EndDDE (i);
cremem.CloseAllMem (); */
}
void RtdbmWindow::dupexe ()
{
BringWindowToTop (hwnd);
ShowWindow (hwnd, SW_RESTORE);
}
BOOL RtdbmWindow::CanClose ()
{
// if (Addr->HRealDB) return FALSE;
if (GetApplication ()->ExecDialog (new Password (this))== IDOK)
{
if (strncmpi ("TCZ", Text, 10) == 0)
{
if (MessageBox (HWindow, "你想退出TCZ通信处理系统吗?", "警告!!!",
MB_YESNO | MB_DEFBUTTON2 | MB_ICONQUESTION)==IDYES) {
PostQuitMessage (0);
return TRUE;
}
}
}
return FALSE;
}
/*
void RtdbmWindow::RtdbmExit ()
{
// if (Addr->HRealDB) return;
if (GetApplication ()->ExecDialog (new Password (this, PASSWORD))== IDOK)
{
if (strncmpi ("TCZ", Text, 10) == 0)
{
if (MessageBox (HWindow, "你想退出TCZ通信处理系统吗?", "警告!!!",
MB_YESNO | MB_DEFBUTTON2 | MB_ICONQUESTION)==IDYES) {
PostQuitMessage (0);
return;
}
}
}
return;
} */
//----------------------------------------------------------------------
//以下是处理用消息存取实时数据库数据的处理程序
void RtdbmWindow::WMCommand(RTMessage Msg)
{
// TWindow::WMCommand (Msg);
switch (Msg.WParam)
{
case WM_INITREALDB:
FreeAllDBFile();
LoadAllDBFile();
break;
}
}
void RtdbmWindow::WMGetRdbItem(RTMessage Msg)
{
RDBMESSAGE FAR *lpMsg = (RDBMESSAGE FAR *)Msg.LParam;
TRtuDB rtu;
TYxDB yx;
TYcDB yc;
TKwhDB kwh;
TEventDB eve;
ZFDB zf;
ZFYcDB zfyc;
ZFYxDB zfyx;
ZFKwhDB zfkwh;
CALC calc;
TCommandDB cmd;
WORD msglen, dbno, stano, ord;
char name[32];
msglen = lpMsg->MsgDataLen;
dbno = lpMsg->DbNo;
DBNUM=dbno;
switch (lpMsg->MsgType)
{
case GETRCDNUM:
{
stano = *(WORD *)(lpMsg->MsgData);
ord = *((WORD *)lpMsg->MsgData+1);
WORD num=0;
if (dbno==RTUDB) num = rtu.dbGetRcdNum();
else if (dbno==YXDB)
{
if (stano==0xffff) num = yx.dbGetRcdNum();
else num = yxnum[stano];//rtu.GetStaYxNum(stano);
}
else if (dbno==YCDB)
{
if (stano==0xffff) num = yc.dbGetRcdNum();
else num = ycnum[stano];//rtu.GetStaYcNum(stano);
}
else if (dbno==KWHDB)
{
if (stano==0xffff) num = kwh.dbGetRcdNum();
else num = kwhnum[stano];//rtu.GetStaKwhNum(stano);
}
else if (dbno==ZFYX)
{
if (stano==0xffff) num = yx.dbGetRcdNum();
else num = zf.GetStaYxNum(stano);
}
else if (dbno==ZFYC)
{
if (stano==0xffff) num = yc.dbGetRcdNum();
else num = zf.GetStaYcNum(stano);
}
else if (dbno==ZFDD)
{
if (stano==0xffff) num = kwh.dbGetRcdNum();
else num = zf.GetStaKwhNum(stano);
}
else if (dbno==ZFRTUDB)
{
if (stano==0x66) num = (WORD) zf.dbGetRcdNum();
else num=(WORD) zf.GetStation(stano);
}
else if (dbno==CALCULATE)
{
num = (WORD) calc.dbGetRcdNum();
}
else num = 0;
lpMsg->MsgDataLen = sizeof(num);
*(WORD *)lpMsg->MsgData = num;
lpMsg->RetFlag = TRUE;
}
break;
case GETNAME:
{
stano = *(WORD *)(lpMsg->MsgData);
ord = *((WORD *)lpMsg->MsgData+1);
switch (dbno)
{
case RTUDB:
rtu.GetStaName(stano, name);
break;
case YXDB:
yx.GetYxName(stano, ord, name);
break;
case YCDB:
yc.GetYcName(stano, ord, name);
break;
case KWHDB:
kwh.GetKwhName(stano, ord, name);
break;
default:
name[0] = 0;
break;
}
lstrcpy(lpMsg->MsgData, name);
lpMsg->MsgDataLen = strlen(name);
lpMsg->RetFlag = TRUE;
}
break;
case GETATTR:
{
stano = *(WORD *)(lpMsg->MsgData);
ord = *((WORD *)lpMsg->MsgData+1);
DWORD attr;
if (dbno==YXDB)
attr = yx.GetYxAttr(stano, ord);
else if (dbno==YCDB) attr = yc.GetYcAttr(stano, ord);
else if (dbno==KWHDB) attr = kwh.GetKwhAttr(stano, ord);
else attr = 0;
lpMsg->MsgDataLen = sizeof(attr);
*(DWORD *)lpMsg->MsgData = attr;
lpMsg->RetFlag = TRUE;
}
break;
case GETVALUE:
{
stano = *(WORD *)(lpMsg->MsgData);
ord = *((WORD *)lpMsg->MsgData+1);
if (dbno==YXDB)
{
BYTE v = yx.GetYxValue(stano, ord);
lpMsg->MsgDataLen = sizeof(DWORD);
*(DWORD *)lpMsg->MsgData = (DWORD)v;
lpMsg->RetFlag = TRUE;
}
else if (dbno==YCDB)
{
WORD v = yc.GetYcValue(stano, ord);
lpMsg->MsgDataLen = sizeof(DWORD);
*(DWORD *)lpMsg->MsgData = (DWORD)v;
lpMsg->RetFlag = TRUE;
}
else if (dbno==KWHDB)
{
DWORD v = kwh.GetKwhValue(stano, ord);
lpMsg->MsgDataLen = sizeof(v);
*(DWORD *)lpMsg->MsgData = v;
lpMsg->RetFlag = TRUE;
}
else if (dbno==ZFYX)
{
BYTE v = zfyx.GetOrder(stano, ord);
BYTE vv=zfyx.GetStation(stano,ord);
DWORD vvv=v*0x100+vv;
lpMsg->MsgDataLen = sizeof(DWORD);
*(DWORD *)lpMsg->MsgData = vvv;
lpMsg->RetFlag = TRUE;
}
else if (dbno==ZFYC)
{
BYTE v = zfyc.GetOrder(stano, ord);
BYTE vv=zfyc.GetStation(stano,ord);
DWORD vvv=v*0x100+vv;
lpMsg->MsgDataLen = sizeof(DWORD);
*(DWORD *)lpMsg->MsgData = vvv;
lpMsg->RetFlag = TRUE;
}
else if (dbno==ZFDD)
{
BYTE v = zfkwh.GetOrder(stano, ord);
BYTE vv=zfkwh.GetStation(stano,ord);
DWORD vvv=v*0x100+vv;
lpMsg->MsgDataLen = sizeof(DWORD);
*(DWORD *)lpMsg->MsgData = vvv;
lpMsg->RetFlag = TRUE;
}
else if (dbno==CALCULATE+100)
{
WORD v = calc.GetSStation(stano, ord);
lpMsg->MsgDataLen = sizeof(DWORD);
*(DWORD *)lpMsg->MsgData = v;
lpMsg->RetFlag = TRUE;
}
else if (dbno==CALCULATE+101)
{
WORD v = calc.GetDStation(stano,ord);
lpMsg->MsgDataLen = sizeof(DWORD);
*(DWORD *)lpMsg->MsgData = v;
lpMsg->RetFlag = TRUE;
}
else if (dbno==CALCULATE+102)
{
WORD v = calc.GetSOrder(stano, ord);
lpMsg->MsgDataLen = sizeof(DWORD);
*(DWORD *)lpMsg->MsgData = v;
lpMsg->RetFlag = TRUE;
}
else if (dbno==CALCULATE+103)
{
WORD v = calc.GetDOrder(stano, ord);
lpMsg->MsgDataLen = sizeof(DWORD);
*(DWORD *)lpMsg->MsgData = v;
lpMsg->RetFlag = TRUE;
}
else if (dbno==CALCULATE+104)
{
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?