📄 dlgdblink.cpp
字号:
// dlgdblink.cpp : implementation file
//
#include "stdafx.h"
#include "vqcwin.h"
#include "dlgdblink.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
BOOL DoDataDblinkDefineProc(CWnd * item, char * noteName, char * currDlgName, char * dbName, DBLINK * db, int dataType)
{
dlgdblink dblinkDef;
int l;
l = strlen(currDlgName);
strcat(currDlgName,dbName);
dblinkDef.dlgName = currDlgName;
dblinkDef.dblink = *db;
if (dataType == DATA_TYPE_YXDEV){
dataType = DATA_TYPE_YX;
dblinkDef.bCanDefineDev = TRUE;
}
dblinkDef.dblink.dataType = dataType;
if (IDOK==dblinkDef.DoModal()) {
char szText[128];
*db = dblinkDef.dblink;
if (noteName) strcpy(szText, noteName);
else strcpy(szText, dbName);
strcat(szText, ":");
dblinkDef.dblink.GetName(&szText[strlen(szText)]);
item->SetWindowText(szText);
currDlgName[l] = 0;
return TRUE;
}
currDlgName[l] = 0;
return FALSE;
}
/////////////////////////////////////////////////////////////////////////////
// dlgdblink dialog
void dlgdblink::InitDataDefineProc()
{
m_rtuNo = dblink.GetRtuNo();
m_dotNo = dblink.GetDotNo();
if (m_rtuNo<0) m_rtuNo = 0;
if (m_dotNo<0) m_dotNo = 0;
if (!bCanDefineDev)
if (dblink.dataType == DATA_TYPE_YX)
dblink.SetYxIdType(ID_TYPE_YX);
idType = dblink.GetYxIdType();
}
void dlgdblink::EndDataDefineProc()
{
UpdateData(TRUE);
dblink.SetRtuNo(m_rtuNo);
dblink.SetDotNo(m_dotNo);
if (bCanDefineDev){
dblink.dataType = DATA_TYPE_YX;
dblink.SetYxIdType(idType);
if ((idType == ID_TYPE_RTU)||(idType == ID_TYPE_WORKSTATION))
dblink.SetYxIdType(m_YxType.GetCurSel());
}
else
if (dblink.dataType == DATA_TYPE_YX)
dblink.SetYxIdType(ID_TYPE_YX);
}
dlgdblink::dlgdblink(CWnd* pParent /*=NULL*/)
: CDialog(dlgdblink::IDD, pParent)
{
//{{AFX_DATA_INIT(dlgdblink)
m_dotNo = 0;
m_rtuNo = 0;
//}}AFX_DATA_INIT
bCanDefineDev = FALSE;
}
void dlgdblink::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(dlgdblink)
DDX_Control(pDX, IDC_YxType, m_YxType);
DDX_Control(pDX, IDC_LIST1, m_List);
DDX_Control(pDX, IDC_RtuName, m_cbRtuName);
DDX_Control(pDX, IDC_DotName, m_cbDotName);
DDX_Text(pDX, IDC_DotNo, m_dotNo);
DDV_MinMaxInt(pDX, m_dotNo, 0, 6000);
DDX_Text(pDX, IDC_RtuNo, m_rtuNo);
DDV_MinMaxInt(pDX, m_rtuNo, 0, 255);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(dlgdblink, CDialog)
//{{AFX_MSG_MAP(dlgdblink)
ON_EN_CHANGE(IDC_DotNo, OnChangeDotNo)
ON_CBN_SELCHANGE(IDC_RtuName, OnSelchangeRtuName)
ON_CBN_SELCHANGE(IDC_DotName, OnSelchangeDotName)
ON_CBN_SELCHANGE(IDC_YxType, OnSelchangeYxType)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// dlgdblink message handlers
void dlgdblink::OnOK()
{
// TODO: Add extra validation here
CDialog::OnOK();
EndDataDefineProc();
}
BOOL dlgdblink::OnInitDialog()
{
memset(&maxPar, 0, sizeof(FJS_MAX_PARAM_SYSTEM));
FjLibGetSysMaxParam(maxPar);
InitDataDefineProc();
CDialog::OnInitDialog();
if (!bCanDefineDev){
GetDlgItem(IDC_YXSTATIC)->ShowWindow(SW_HIDE);
m_YxType.ShowWindow(SW_HIDE);
m_List.ShowWindow(SW_HIDE);
ResetDblinkRtuNameProc();
}
else{
m_YxType.AddString("遥信状态");
m_YxType.AddString("设备状态");
m_YxType.AddString("厂站RTU");
m_YxType.AddString("网络工作站");
m_YxType.SetCurSel(idType);
if ((idType == ID_TYPE_RTU)||(idType == ID_TYPE_WORKSTATION)) {
m_cbRtuName.ShowWindow(SW_HIDE);
m_cbDotName.ShowWindow(SW_HIDE);
ResetDblinkListNameProc();
}
else{
m_List.ShowWindow(SW_HIDE);
m_cbRtuName.ShowWindow(SW_SHOW);
m_cbDotName.ShowWindow(SW_SHOW);
ResetDblinkRtuNameProc();
}
}
char headName[60];
strcpy(headName, dlgName);
strcat(headName,"库连接设置");
SetWindowText(headName);
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void dlgdblink::ResetDblinkDotNameProc()
{
int i,rtuIdx,dotNum;
char szText[128];
rtuIdx = m_rtuNo;
switch(dblink.dataType){
case DATA_TYPE_YC:
if (rtuIdx == FJD_RTUNUM_YCA){
rtuIdx = maxPar.numMaxRtu;
dotNum = maxPar.numMaxYca;
}
else dotNum = maxPar.parRtuMax[m_rtuNo].numYc;
break;
case DATA_TYPE_BH:
dotNum = GetBhUintNumProc(m_rtuNo);
break;
case DATA_TYPE_YT:
dotNum = maxPar.parRtuMax[m_rtuNo].numYt;
break;
default :
dblink.dataType = DATA_TYPE_YX;
if (idType == ID_TYPE_ADEV) {
dotNum = maxPar.parRtuMax[m_rtuNo].numADev;
break;
}
if (idType != ID_TYPE_YX) return;
if (rtuIdx == FJD_RTUNUM_YXV){
rtuIdx = maxPar.numMaxRtu;
dotNum = maxPar.numMaxYxv;
}
else if (rtuIdx == FJD_RTUNUM_YXA){
rtuIdx = maxPar.numMaxRtu+1;
dotNum = maxPar.numMaxYxa;
}
else{
dotNum = maxPar.parRtuMax[m_rtuNo].numYx;
}
break;
}
m_cbRtuName.SetCurSel(rtuIdx);
for (i=0;i<dotNum;i++){
switch(dblink.dataType){
case DATA_TYPE_YC:
FjLibGetYcName(m_rtuNo,i, szText);
break;
case DATA_TYPE_BH:
GetBhNameProc(m_rtuNo,i, szText);
break;
case DATA_TYPE_YT:
FjLibGetYtName(m_rtuNo,i, szText);
break;
default :
if (idType==ID_TYPE_ADEV)
FjLibGetADevName(m_rtuNo,i, szText);
else FjLibGetYxName(m_rtuNo,i, szText);
break;
}
m_cbDotName.AddString(szText);
}
m_cbDotName.SetCurSel(m_dotNo);
UpdateData(FALSE);
}
void dlgdblink::ResetDblinkListNameProc()
{
int i;
char szText[128];
if (idType==ID_TYPE_WORKSTATION){
for (i=0;i<maxPar.numMaxNet;i++){
FjLibGetWsName(i,(LPSTR)&szText[0]);
m_List.AddString(szText);
}
}
else if (idType==ID_TYPE_RTU){
for (i=0;i<maxPar.numMaxRtu;i++){
FjLibGetRtuName(i,(LPSTR)&szText[0]);
m_List.AddString(szText);
}
}
}
void dlgdblink::ResetDblinkRtuNameProc()
{
int i;
char szText[128];
for (i=0;i<maxPar.numMaxRtu;i++){
FjLibGetRtuName(i,(LPSTR)&szText[0]);
m_cbRtuName.SetItemData(m_cbRtuName.AddString((LPSTR)&szText[0]),i);
}
switch(dblink.dataType){
case DATA_TYPE_YC:
m_cbRtuName.SetItemData(m_cbRtuName.AddString("计算遥测"),FJD_RTUNUM_YCA);
break;
case DATA_TYPE_BH:
case DATA_TYPE_YT:
break;
default :
dblink.dataType = DATA_TYPE_YX;
if (idType==ID_TYPE_ADEV) break;
idType = ID_TYPE_YX;
m_cbRtuName.SetItemData(m_cbRtuName.AddString("虚遥信"),FJD_RTUNUM_YXV);
m_cbRtuName.SetItemData(m_cbRtuName.AddString("计算遥信"),FJD_RTUNUM_YXA);
break;
}
ResetDblinkDotNameProc();
}
void dlgdblink::OnChangeDotNo()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_cbDotName.SetCurSel(m_dotNo);
}
void dlgdblink::OnSelchangeRtuName()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_rtuNo = m_cbRtuName.GetItemData(m_cbRtuName.GetCurSel());
m_cbDotName.ResetContent();
ResetDblinkDotNameProc();
}
void dlgdblink::OnSelchangeDotName()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_dotNo = m_cbDotName.GetCurSel();
UpdateData(FALSE);
}
void dlgdblink::OnSelchangeYxType()
{
// TODO: Add your control notification handler code here
int type;
UpdateData(TRUE);
type = m_YxType.GetCurSel();
if (type == LB_ERR) return;
idType = type;
m_List.ResetContent();
m_cbRtuName.ResetContent();
m_cbDotName.ResetContent();
if ((idType==ID_TYPE_RTU)||(idType==ID_TYPE_WORKSTATION)){
m_List.ShowWindow(SW_SHOW);
m_cbRtuName.ShowWindow(SW_HIDE);
m_cbDotName.ShowWindow(SW_HIDE);
ResetDblinkListNameProc();
}
else{
m_List.ShowWindow(SW_HIDE);
m_cbRtuName.ShowWindow(SW_SHOW);
m_cbDotName.ShowWindow(SW_SHOW);
ResetDblinkRtuNameProc();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -