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