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 + -
显示快捷键?