📄 mainfrm.cpp
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "vqcwin.h"
#include "MainFrm.h"
#include "vqc.h"
#include "dlgSelRtu.h"
#include "dlgvqc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_SYSCOMMAND() //手工加
ON_WM_CREATE()
ON_MESSAGE(FJD_MSG_RELAY_VQC, FjRelayMsg) //手工加,自定义消息
ON_MESSAGE(FJD_MSG_SCD_VQC, FjScadaMsg) //手工加,自定义消息
ON_WM_CLOSE()
ON_COMMAND(IDM_ZB1MX1, OnZb1mx1)
ON_COMMAND(IDM_ZB1MX2, OnZb1mx2)
ON_COMMAND(IDM_ZB2MX1, OnZb2mx1)
ON_COMMAND(IDM_ZB2MX2, OnZb2mx2)
ON_COMMAND(IDM_ZB3MX1, OnZb3mx1)
ON_COMMAND(IDM_ZB3MX2, OnZb3mx2)
ON_COMMAND(IDM_ZB4MX1, OnZb4mx1)
ON_COMMAND(IDM_ZB4MX2, OnZb4mx2)
ON_COMMAND(IDM_ZB5MX1, OnZb5mx1)
ON_COMMAND(IDM_ZB5MX2, OnZb5mx2)
ON_COMMAND(IDM_ZB6MX1, OnZb6mx1)
ON_COMMAND(IDM_ZB6MX2, OnZb6mx2)
ON_COMMAND(IDM_SelectRtu, OnSelectRtu)
ON_COMMAND(IDM_StopVqc, OnStopVqc)
ON_COMMAND(IDM_ParamSet, OnParamSet)
ON_COMMAND(IDM_Fjt, OnFjt)
ON_COMMAND(IDM_DKQ1, OnDkq1)
ON_COMMAND(IDM_DKQ2, OnDkq2)
ON_COMMAND(IDM_DKQ3, OnDkq3)
ON_COMMAND(IDM_DKQ4, OnDkq4)
ON_COMMAND(IDM_DKQ5, OnDkq5)
ON_COMMAND(IDM_DKQ6, OnDkq6)
ON_COMMAND(IDM_DRQ2, OnDrq2)
ON_COMMAND(IDM_DRQ3, OnDrq3)
ON_COMMAND(IDM_DRQ4, OnDrq4)
ON_COMMAND(IDM_DRQ5, OnDrq5)
ON_COMMAND(IDM_DRQ6, OnDrq6)
ON_COMMAND(IDM_DRQ1, OnDrq1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
afx_msg void CMainFrame::OnSysCommand(UINT nID,LPARAM lParam) //手工加,系统菜单:窗口最大,最小,恢复。
{
switch(nID){
case SC_CLOSE:
//case SC_HOTKEY:
//case SC_HSCROLL:
//case SC_KEYMENU:
//he case SC_RESTORE:
//he case SC_MAXIMIZE:
//case SC_MINIMIZE:
//case SC_MOUSEMENU:
//case SC_MOVE:
//case SC_NEXTWINDOW:
//case SC_PREVWINDOW:
//case SC_SCREENSAVE:
//case SC_SIZE:
//case SC_TASKLIST:
//case SC_VSCROLL:
OnAppExit();
break;
default:
CFrameWnd::OnSysCommand(nID,lParam);
}
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
// CWnd* pFjVQCWnd=FindWindow(NULL,"VQC");
// if(pFjVQCWnd) return;
pApp = (CVqcwinApp *) AfxGetApp();
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
/*
if (!m_wndToolBar.Create(this) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}*/
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// TODO: Remove this if you don't want tool tips or a resizeable toolbar
/* m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
*/
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
// m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
// EnableDocking(CBRS_ALIGN_ANY);
// DockControlBar(&m_wndToolBar);
if (!FjLibGetFjWinHandle(FJD_WIN_ID_FJSCADA))
{
MessageBox("Scada没运行,自动VQC控制程序(VQC.exe)退出 !","出错",MB_ICONSTOP|MB_OK);
PostMessage(WM_CLOSE);
return 0;
}
FjLibSetFjWinHandle(FJD_WIN_ID_FJVQC,m_hWnd); //FjLibDef.h = 8
for (int i=0;i<pApp->maxPar.numMaxRtu;i++) LoadVqcRunParam(i);
CString pMsg;
pMsg = "VQC系统投入";
VqcPutMsgProc(pApp->currVqcRtuNo, pMsg.LockBuffer());
ReFreshVqcStatusMenu();
ReFreshVqcDeviceRunMenu();
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CFrameWnd::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
void CMainFrame::OnClose()
{
// TODO: Add your message handler code here and/or call default
CFrameWnd::OnClose();
}
void CMainFrame::OnSelectRtu()
{
// TODO: Add your command handler code here
dlgSelRtu selRtuDef;
selRtuDef.DoModal();
ReFreshVqcDeviceRunMenu();
ReFreshVqcStatusMenu();
char szText[128];
FjLibGetRtuName(pApp->currVqcRtuNo,szText);
strcat(szText, ":电压无功自动控制系统 [南京电研 后台VQC系统Ver2.0]");
::SetWindowText(m_hWnd,szText);
}
void CMainFrame::OnStopVqc()
{
// TODO: Add your command handler code here
if (pApp->VQCDefine[pApp->currVqcRtuNo] == NULL) return;
WORD pwa=FJD_ATTR_YKYT;
CString csPswdName="";
CString pMsg;
if (!FjLibInPassWord(this,&csPswdName,&pwa,"操作员口令")) return;
BOOL bStat;
//程序已运行,状态作切换
if (pApp->VQCDefine[pApp->currVqcRtuNo]->globalDef.bCanUse){
if (pApp->VQCDefine[pApp->currVqcRtuNo]->LocalStatRec.GetStatus()){
bStat = FALSE;
pMsg = "VQC就地处于手动位置 操作人:";
}
else{
bStat = TRUE;
pMsg = "VQC就地处于自动位置 操作人:";
}
pMsg += csPswdName;
VqcPutMsgProc(pApp->currVqcRtuNo, pMsg.LockBuffer());
pApp->VQCDefine[pApp->currVqcRtuNo]->LocalStatRec.SetWfStatus(bStat);
ReFreshVqcStatusMenu();
return;
}
//程序未运行
char msg[128];
BOOL VQCParamOK;
pApp->countTime[pApp->currVqcRtuNo] = 0;
VQCParamOK = FALSE;
if (pApp->VQCDefine[pApp->currVqcRtuNo]->ReadParamFileProc(pApp->currVqcRtuNo)){
if (pApp->VQCDefine[pApp->currVqcRtuNo]->CheckParam(msg)) {
VQCParamOK = TRUE;
pApp->VQCDefine[pApp->currVqcRtuNo]->globalDef.SelectSeasonProc(); //选择季节
}
else{
pApp->VQCDefine[pApp->currVqcRtuNo]->globalDef.bCanUse = FALSE;
MessageBox(msg, "参数定义有错!",MB_OK);
return;
}
}
if (!VQCParamOK) {
pApp->VQCDefine[pApp->currVqcRtuNo]->VQCSET::VQCSET();
return;
};
pApp->VQCDefine[pApp->currVqcRtuNo]->globalDef.bCanUse = TRUE;
VqcPutMsgProc(pApp->currVqcRtuNo, "VQC就地处于自动位置");
pApp->VQCDefine[pApp->currVqcRtuNo]->LocalStatRec.SetWfStatus(TRUE);
pApp->VQCDefine[pApp->currVqcRtuNo]->currDispZbNo = 0;
pApp->VQCDefine[pApp->currVqcRtuNo]->currDispMxNo = 0;
ReFreshVqcStatusMenu();
}
void CMainFrame::ReFreshVqcDeviceRunMenu()
{
VQCZB_DBS *zb;
VQCMUXI_DBS *mx;
if (pApp->VQCDefine[pApp->currVqcRtuNo]==NULL) return;
if (!pApp->VQCDefine[pApp->currVqcRtuNo]->globalDef.bCanUse) return;
char szText[128];
int i;
zb = &(pApp->VQCDefine[pApp->currVqcRtuNo]->ZB[pApp->VQCDefine[pApp->currVqcRtuNo]->currDispZbNo]);
mx = &(zb->MX[pApp->VQCDefine[pApp->currVqcRtuNo]->currDispMxNo]);
if (zb->pFatherVQC->globalDef.DevControlMode!= DEVMODE_ONLY_DRQ){
if (zb->bFjtActMan) strcpy(szText, "允许:");
else strcpy(szText, "禁止:");
zb->FjtYtSJRec.GetName(&szText[strlen(szText)]);
strcat(szText, " 参与VQC调节");
GetMenu()->ModifyMenu(IDM_Fjt, MF_BYCOMMAND, IDM_Fjt, szText);
}
for (i=0;i<VQC_DRQNUM;i++){
if (i<mx->DRQNum){
if (mx->DRQ[i].manActStatus)
strcpy(szText, "允许:");
else
strcpy(szText, "禁止:");
mx->DRQ[i].KgRec.GetName(&szText[strlen(szText)]);
}
else wsprintf(szText, "允许:第%d组电容器", i+1);
strcat(szText, " 参与VQC调节");
GetMenu()->ModifyMenu(IDM_DRQ1+i, MF_BYCOMMAND, IDM_DRQ1+i, szText);
}
for (i=0;i<VQC_DRQNUM;i++){
if (i<mx->DKQNum){
if (mx->DKQ[i].manActStatus)
strcpy(szText, "允许:");
else
strcpy(szText, "禁止:");
mx->DKQ[i].KgRec.GetName(&szText[strlen(szText)]);
}
else wsprintf(szText, "允许:第%d组电抗器", i+1);
strcat(szText, " 参与VQC调节");
GetMenu()->ModifyMenu(IDM_DKQ1+i, MF_BYCOMMAND, IDM_DKQ1+i, szText);
}
}
void CMainFrame::ReFreshVqcStatusMenu()
{
char szText[128];
if (pApp->VQCDefine[pApp->currVqcRtuNo]==NULL) return;
strcpy(szText,"启动");
if (pApp->VQCDefine[pApp->currVqcRtuNo]->globalDef.bCanUse)
if (pApp->VQCDefine[pApp->currVqcRtuNo]->LocalStatRec.GetStatus())
strcpy(szText,"停止");
FjLibGetRtuName(pApp->currVqcRtuNo,(LPSTR)&szText[strlen(szText)]);
strcat(szText, "VQC运行");
GetMenu()->ModifyMenu(IDM_StopVqc, MF_BYCOMMAND, IDM_StopVqc, szText);
}
void CMainFrame::OnAppExit()
{
// TODO: Add your command handler code here
if (IDNO==MessageBox("你真的想结束VQC系统运行吗?","警告",MB_YESNO)) return;
WORD pwa=FJD_ATTR_SYSTEM;
CString csPswdName="";
if (!FjLibInPassWord(this,&csPswdName,&pwa,"维护员口令")) return;
CString pMsg;
pMsg = "VQC系统退出 操作人:";
pMsg += csPswdName;
VqcPutMsgProc(pApp->currVqcRtuNo, pMsg.LockBuffer());
CFrameWnd::OnClose();
}
LRESULT CMainFrame::FjRelayMsg(WPARAM wParam, LPARAM lParam) //wParam=RtuNO, lParam=DotNO
{
// TODO: Add your command handler code here
for (int i=0;i<pApp->maxPar.numMaxRtu;i++)
if (pApp->VQCDefine[i]) pApp->VQCDefine[i]->RecRelayMsg(wParam, lParam);
return 1;
}
LRESULT CMainFrame::FjScadaMsg(WPARAM wParam, LPARAM lParam) //wParam=ObjNO, lParam=
{
// TODO: Add your command handler code here
if(wParam==0){
//接受调度下发的VQC投退命令
typedef union _DW_UNION_{
BYTE b[4];
DWORD dw;
} DW_UNION;
DW_UNION DiaoDu;
DiaoDu.dw = lParam;
BYTE Rtu = DiaoDu.b[3];
/* if(Rtu < LenRtu){
BYTE Cmd = DiaoDu.b[0];
if(Cmd==0xcc){ //投运
// pTr[Rtu].z.bPCAutoRegulate = TRUE;
// sprintf(Buf,"调度下发:开放 VQC控制命令报文");
// WriteRec(Rtu, Buf, FJVQC_START); //存相应厂站
}
else if(Cmd==0x33){ //退出
// pTr[Rtu].z.bPCAutoRegulate = FALSE;
// sprintf(Buf,"调度下发:关闭 VQC控制命令报文");
// WriteRec(Rtu, Buf, FJVQC_EXIT); //存相应厂站
}
}
*/ }
return 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -