commdlg.cpp
来自「这是一个在正实际应用当中运行的电力监控系统软件源代码」· C++ 代码 · 共 1,742 行 · 第 1/5 页
CPP
1,742 行
CheckRadioButton(HWindow,ID_CommCardBaud,ID_CommCardBaud+7,ID_CommCardBaud+CommPara1[COMMNO].COMMBAUD);
CheckDlgButton(HWindow, ID_Used,CommPara1[COMMNO].Used);
CheckDlgButton(HWindow, ID_Open,idComDev[COMMNO+1]+1);
if (idComDev[COMMNO+1]==-10 || idComDev[COMMNO+1]==-2) CheckDlgButton(HWindow, ID_Open,1);
if (CalChNum(COMMNO+1)==0xff || (lpChannelParam+CalChNum(COMMNO+1))->CHType!=2)
{
EnableWindow(GetDlgItem(HWindow,ID_CHANEL1),0);
EnableWindow(GetDlgItem(HWindow,ID_CHANEL2),0);
}
else
{
EnableWindow(GetDlgItem(HWindow,ID_CHANEL1),1);
EnableWindow(GetDlgItem(HWindow,ID_CHANEL2),1);
}
}
//-------------------------------------------------------------------------------------------//
TChannelSetDialog::TChannelSetDialog (PTWindowsObject AParent)
: TDialog(AParent, "CHANNELSET_DLG")
{
}
void TChannelSetDialog::WMInitDialog(RTMessage msg)
{
TDialog::WMInitDialog(msg);
SetDlgItemInt(HWindow, ID_CHNumEdit, TotalChNum, FALSE);
}
void TChannelSetDialog::WMCommand(RTMessage msg)
{
TDialog::WMCommand(msg);
switch(msg.WParam)
{
case ID_CHParaGraph:
GetApplication()->ExecDialog(new ChParamGraphDialog(this));
break;
case ID_StationGraph:
GetApplication()->ExecDialog(new StationGraphDialog(this));
break;
case ID_CHParamPBt:
GetChannelNum();
GetApplication()->ExecDialog(new TChParamSetDialog(this));
break;
case ID_InitPBt:
int i;
for (i=0;i<80;i++)
{
CloseComm(idComDev[i]);
FlushComm(idComDev[i], 0);
FlushComm(idComDev[i], 1);
if (InputCommMem[i]) GlobalFree(InputCommMem[i]);
if (OutputCommMem[i]) GlobalFree(OutputCommMem[i]);
}
InitAllComm();
InitAllModem();
for (int ii=0;ii<TotalChNum;ii++) InitOneModem(ii);
if (HardwareInstallFlag[CTKBOARD])
{
StopCTK();
HardwareInstallFlag[CTKBOARD]=NULL;
CTKSIO FAR *lpctk = (CTKSIO FAR *)GlobalLock(hCTKSIOMem);
HardwareInstallFlag[CTKBOARD]=InitialCTK(hMainWindow, lpChannelParam, lpctk);
GlobalUnlock(hCTKSIOMem);
}
typedef struct
{
BYTE SSTFlag,Retry,RepTimes,RANDOM0,RANDOM1,RANDOM2,Poll,PAFFLAG,TIME,SDBB,DRFTIME;
WORD PollOver;
}Flag;
for (i=0; i<TotalChNum; i++)
{
(lpChannelParam+i)->RxReadP = 0;
(lpChannelParam+i)->RxWriteP = 0;
(lpChannelParam+i)->TxReadP = 0;
(lpChannelParam+i)->TxWriteP = 0;
(lpChannelParam+i)->CHStatus = 0l|ChOpen; //通道开启jgx
for (int j=0; j<256; j++) (lpChannelParam+i)->Reserved[j]=0;
(lpChannelParam+i)->Reserved[92]=0x80;
Flag *FLAG=(Flag *)((lpChannelParam+i)->Reserved+80);
FLAG->PollOver=0x8000;
}
break;
case ID_SavePBt:
GetChannelNum();
SaveChParam();
break;
case ID_ReadPBt:
for (i=0; i<TotalChNum; i++)
{
if ((lpChannelParam+i)->hChRxBuff) GlobalFree((lpChannelParam+i)->hChRxBuff);
if ((lpChannelParam+i)->hChTxBuff) GlobalFree((lpChannelParam+i)->hChTxBuff);
}
ReadChParam();
SetDlgItemInt(HWindow, ID_CHNumEdit, TotalChNum, FALSE);
for (i=0; i<TotalChNum; i++)
{
(lpChannelParam+i)->RxReadP = 0;
(lpChannelParam+i)->RxWriteP = 0;
(lpChannelParam+i)->hChRxBuff = NULL;
(lpChannelParam+i)->RecBuff = NULL;
(lpChannelParam+i)->TxReadP = 0;
(lpChannelParam+i)->TxWriteP = 0;
(lpChannelParam+i)->hChTxBuff = NULL;
(lpChannelParam+i)->SendBuff = NULL;
// for (int j=0; j<256; j++)
// (lpChannelParam+i)->Reserved[j] = 0;
if ((lpChannelParam+i)->CHValidFlag)
{
// (lpChannelParam+i)->hChRxBuff = GlobalAlloc (GMEM_NODISCARD|GMEM_MOVEABLE|GMEM_ZEROINIT,(lpChannelParam+i)->RxBuffLen);
// (lpChannelParam+i)->hChTxBuff = GlobalAlloc (GMEM_NODISCARD|GMEM_MOVEABLE|GMEM_ZEROINIT,(lpChannelParam+i)->TxBuffLen);
(lpChannelParam+i)->hChRxBuff = GlobalAlloc (GMEM_SHARE|GMEM_ZEROINIT,(lpChannelParam+i)->RxBuffLen);
(lpChannelParam+i)->hChTxBuff = GlobalAlloc (GMEM_SHARE|GMEM_ZEROINIT,(lpChannelParam+i)->TxBuffLen);
(lpChannelParam+i)->RecBuff = (BYTE FAR *)GlobalLock((lpChannelParam+i)->hChRxBuff);
(lpChannelParam+i)->SendBuff = (BYTE FAR *)GlobalLock((lpChannelParam+i)->hChTxBuff);
}
}
break;
case ID_ExitPBt:
case IDOK:
GetChannelNum();
CloseWindow(IDOK);
break;
}
}
void TChannelSetDialog::GetChannelNum(void)
{
int tmp = GetDlgItemInt(HWindow, ID_CHNumEdit, 0, 0);
if (tmp>CHANNELMAXNUM) tmp = CHANNELMAXNUM;
TotalChNum = tmp;
}
void SaveChParam()
{
OFSTRUCT OfS;
HFILE hf = OpenFile ((LPSTR)"c:\\TCZ\\COMM.dat", (LPOFSTRUCT)&OfS, OF_CREATE);
if (hf != HFILE_ERROR)
{
if (TotalChNum>CHANNELMAXNUM) TotalChNum = CHANNELMAXNUM;
_lwrite(hf, (LPSTR)&TotalChNum, sizeof(WORD));
_lwrite(hf, lpChannelParam, sizeof(CHANNELPARAM)*TotalChNum);
_lclose(hf);
}
}
void ReadChParam()
{
OFSTRUCT OfS;
HFILE hf = OpenFile ((LPSTR)"c:\\TCZ\\COMM.dat", (LPOFSTRUCT)&OfS, OF_READ);
if (hf != HFILE_ERROR)
{
_lread(hf, (LPSTR)&TotalChNum, sizeof(WORD));
if (TotalChNum>CHANNELMAXNUM) TotalChNum = CHANNELMAXNUM;
_lread(hf, lpChannelParam, sizeof(CHANNELPARAM));//*TotalChNum);
_lclose(hf);
}
}
StationGraphDialog::StationGraphDialog(PTWindowsObject AParent)
: TDialog(AParent, "STATION_GRAPH")
{
}
void StationGraphDialog::WMInitDialog(RTMessage msg)
{
WORD Station_No;
char str[40],ChName[20];
for (int i=0;i<TotalStaNum;i++)
{
GetName(RTUDB, i, 0, str);
SetDlgItemText(HWindow,ID_StaName+i,(LPSTR)str);
if ((lpStaParam+i)->BackCh[0]==-1)
{
sprintf (ChName," 不用");
EnableWindow(GetDlgItem(HWindow,ID_MainChName+i),0);
}
else
sprintf(ChName, " %d%d", (lpStaParam+i)->BackCh[0]/10,(lpStaParam+i)->BackCh[0]%10);
SetDlgItemText(HWindow, ID_MainChName+i, (LPSTR)ChName);
if ((lpStaParam+i)->BackCh[1]==-1)
{
sprintf (ChName," 不用");
EnableWindow(GetDlgItem(HWindow,ID_MinusChName+i),0);
}
else
sprintf(ChName, " %d%d", (lpStaParam+i)->BackCh[1]/10,(lpStaParam+i)->BackCh[1]%10);
SetDlgItemText(HWindow, ID_MinusChName+i,(LPSTR)ChName);
if ((lpStaParam+i)->CurrUsedCh==0xff)
{
sprintf (ChName," 不用");
EnableWindow(GetDlgItem(HWindow,ID_WorkChName+i),0);
}
else
sprintf(ChName, " %d%d", (lpStaParam+i)->CurrUsedCh/10,(lpStaParam+i)->CurrUsedCh%10);
SetDlgItemText(HWindow, ID_WorkChName+i, (LPSTR)ChName);
}
}
ChParamGraphDialog::ChParamGraphDialog(PTWindowsObject AParent)
: TDialog(AParent, "CH_GRAPH")
{
}
void ChParamGraphDialog::WMInitDialog(RTMessage msg)
{
WORD Station_No;
char str[40];
for (int i=0;i<64;i++)
{
strcpy(str,"XXXXXXXXXXXX");
if (i<TotalChNum)
{
strcpy(str," 尚未使用");
if ((lpChannelParam+i)->CHValidFlag)
{
Station_No=(lpChannelParam+i)->StaNo;
GetName(RTUDB, Station_No, 0, str);
SetDlgItemText(HWindow,ID_StaName+i,(LPSTR)str);
continue;
}
}
SetDlgItemText(HWindow,ID_StaName+i,(LPSTR)str);
EnableWindow(GetDlgItem(HWindow,ID_StaName+i),0);
}
}
//-----------------------------------------------------------------------------------------//
TChParamSetDialog::TChParamSetDialog (PTWindowsObject AParent)
: TDialog(AParent, "CHPARAMSET_DLG")
{
}
void TChParamSetDialog::WMInitDialog(RTMessage msg)
{
TDialog::WMInitDialog(msg);
char ChName[30];
char *ChType[]={"CTK板","标准串口","TCZ装置","网络终端"};
char *Work[]={"不用","使用"};
char *Buff[]={"256", "512","1024"};
char *syncw[]={"EB90", "D709"};
chp = lpChannelParam;
chno = 0;
for (int i=0; i<TotalChNum; i++)
{
sprintf(ChName, " %d%d 号 通 道", i/10,i%10);
SendDlgItemMessage(HWindow, ID_ChNameList, LB_ADDSTRING, i, (LONG)(LPSTR)ChName);
}
SendDlgItemMessage(HWindow, ID_ChNameList, LB_SETCURSEL, chno, 0);
for (i=0; i<4; i++)
SendDlgItemMessage(HWindow, ID_ChTypeCBox, CB_ADDSTRING, i, (LONG)(LPSTR)ChType[i]);
for (i=0; i<2; i++)
SendDlgItemMessage(HWindow, ID_WorkCBox, CB_ADDSTRING, i, (LONG)(LPSTR)Work[i]);
for (i=0; i<3; i++)
{
SendDlgItemMessage(HWindow, ID_RxBuffCBox, CB_ADDSTRING, i, (LONG)(LPSTR)Buff[i]);
SendDlgItemMessage(HWindow, ID_TxBuffCBox, CB_ADDSTRING, i, (LONG)(LPSTR)Buff[i]);
}
for (i=0; i<2; i++)
SendDlgItemMessage(HWindow, ID_ChSyncCBox, CB_ADDSTRING, i, (LONG)(LPSTR)syncw[i]);
SetChData();
}
void TChParamSetDialog::SetChData(void)
{
SendDlgItemMessage(HWindow, ID_ChTypeCBox, CB_SETCURSEL, (chp+chno)->CHType, 0);
SendDlgItemMessage(HWindow, ID_WorkCBox, CB_SETCURSEL, (chp+chno)->CHValidFlag, 0);
int bsize = (chp+chno)->RxBuffLen/256;
if (bsize==2) bsize=1;
else if (bsize==4) bsize=2;
else bsize = 0;
SendDlgItemMessage(HWindow, ID_RxBuffCBox, CB_SETCURSEL, bsize, 0);
bsize = (chp+chno)->TxBuffLen/256;
if (bsize==2) bsize=1;
else if (bsize==4) bsize=2;
else bsize = 0;
SendDlgItemMessage(HWindow, ID_TxBuffCBox, CB_SETCURSEL, bsize, 0);
SetDlgItemInt(HWindow, ID_SIONoEdit, (chp+chno)->SIOOrd, FALSE);
SetDlgItemInt(HWindow, ID_ChNoEdit, (chp+chno)->ChNoInComm, FALSE);
EnableWindow(GetDlgItem(HWindow,ID_ModemEdit), ((chp+chno)->CHType==2));
// SetDlgItemInt(HWindow, ID_SIONoEdit, chno, FALSE);
UINT tmp = (chp+chno)->SyncWord[0]*256 + (chp+chno)->SyncWord[1];
if (tmp == 0xd709) tmp=1;
else tmp = 0;
SendDlgItemMessage(HWindow, ID_ChSyncCBox, CB_SETCURSEL, tmp, 0);
CheckDlgButton(HWindow, ID_ChCheckChk, (chp+chno)->CHCheckFlag);
CheckDlgButton(HWindow, ID_RsvChk, (chp+chno)->MultiStation);
CheckDlgButton(HWindow, ID_RsvChk+1,(chp+chno)->ChangFlag&1);
CheckDlgButton(HWindow, ID_RsvChk+2,(chp+chno)->ChangFlag&2);
CheckDlgButton(HWindow, ID_RsvChk+3,(chp+chno)->ChangFlag&4);
CheckDlgButton(HWindow, ID_RsvChk+4,(chp+chno)->ChangFlag&8);
CheckDlgButton(HWindow, ID_RsvChk+5,(chp+chno)->ChangFlag&0X10);
CheckDlgButton(HWindow, ID_RsvChk+6,(chp+chno)->ChangFlag&0x20);
CheckDlgButton(HWindow, ID_RsvChk+7,(chp+chno)->ChangFlag&0x40);
}
void TChParamSetDialog::GetChData(void)
{
(chp+chno)->CHType = SendDlgItemMessage(HWindow, ID_ChTypeCBox, CB_GETCURSEL, 0, 0);
(chp+chno)->CHValidFlag = SendDlgItemMessage(HWindow, ID_WorkCBox, CB_GETCURSEL, 0, 0);
UINT bsize = (UINT) SendDlgItemMessage(HWindow, ID_RxBuffCBox, CB_GETCURSEL, 0, 0);
if (bsize==0) bsize=1;
else if (bsize==1) bsize=2;
else if (bsize==2) bsize=4;
// if ((chp+chno)->RxBuffLen != bsize*256)
{
(chp+chno)->RecBuff = NULL;
while (GlobalFlags((chp+chno)->hChRxBuff)&GMEM_LOCKCOUNT)
GlobalUnlock ((chp+chno)->hChRxBuff);
GlobalFree ((chp+chno)->hChRxBuff);
(chp+chno)->RxBuffLen = bsize*256;
if ((chp+chno)->CHValidFlag)
{
// (chp+chno)->hChRxBuff = GlobalAlloc (GMEM_NODISCARD|GMEM_MOVEABLE|GMEM_ZEROINIT,(chp+chno)->RxBuffLen);
(chp+chno)->hChRxBuff = GlobalAlloc (GMEM_SHARE|GMEM_ZEROINIT,(chp+chno)->RxBuffLen);
(chp+chno)->RecBuff = (BYTE FAR *)GlobalLock((chp+chno)->hChRxBuff);
}
(chp+chno)->RxReadP = (chp+chno)->RxWriteP = 0;
}
bsize = (UINT)SendDlgItemMessage(HWindow, ID_TxBuffCBox, CB_GETCURSEL, 0, 0);
if (bsize==0) bsize=1;
else if (bsize==1) bsize=2;
else if (bsize==2) bsize=4;
// if ((chp+chno)->TxBuffLen != bsize*256)
{
(chp+chno)->SendBuff = NULL;
while (GlobalFlags((chp+chno)->hChTxBuff)&GMEM_LOCKCOUNT)
GlobalUnlock ((chp+chno)->hChTxBuff);
GlobalFree ((chp+chno)->hChTxBuff);
(chp+chno)->TxBuffLen = bsize*256;
if ((chp+chno)->CHValidFlag)
{
// (chp+chno)->hChTxBuff = GlobalAlloc (GMEM_NODISCARD|GMEM_MOVEABLE|GMEM_ZEROINIT,(chp+chno)->TxBuffLen);
(chp+chno)->hChTxBuff = GlobalAlloc (GMEM_SHARE|GMEM_ZEROINIT,(chp+chno)->TxBuffLen);
(chp+chno)->SendBuff = (BYTE FAR *)GlobalLock((chp+chno)->hChTxBuff);
}
(chp+chno)->TxReadP = (chp+chno)->TxWriteP = 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?