Утверждение активируется при добавлении новой строки в поле со списком MFC

0

Я тестирую старое приложение MFC, и при запуске в режиме отладки его всегда запускают при попытке добавить новый элемент в поле со списком.

Я мало что знаю о MFC но я вижу, что перед добавлением элементов DoDataExchange его вызывал и, может быть, здесь DoDataExchange его combobox?

DDX_Control(pDX, IDC_BAUDRATE, m_comboBaudRate);

Но тогда, когда внутри OnInitDialog:

m_comboBaudRate.AddString((CString)port[0]);

Это утверждение запускается:

_AFXWIN_INLINE int CComboBox::AddString(LPCTSTR lpszString)
{ 
   ASSERT(::IsWindow(m_hWnd));
   .........................
}

Кто-нибудь знает, почему это происходит, и каковы мои решения, чтобы исправить это?

Изменение: добавлен код OnInitDialog:

CDialogMgr::OnInitDialog();
    //set the window text from message table
    SetWindowText(theApp.GetAtlasCaptionOrMsg(IDD_PCCONFIGURATION_CAPTION));

    ///Adding data from message table
    m_btnOk.SetWindowText(theApp.GetAtlasCaptionOrMsg(IDD_BTN_OK));
    m_btnHelp.SetWindowText(theApp.GetAtlasCaptionOrMsg(IDD_BTN_HELP));
    m_btnCancel.SetWindowText(theApp.GetAtlasCaptionOrMsg(IDD_BTN_CANCEL));

    m_staticDeviceId.SetWindowText(theApp.GetAtlasCaptionOrMsg(IDD_PCCONFIGURATION_DEVICEID));
    m_staticComPort.SetWindowText(theApp.GetAtlasCaptionOrMsg(IDD_PCCONFIGURATION_COMPORT));
    m_staticBaudRate.SetWindowText(theApp.GetAtlasCaptionOrMsg(IDD_PCCONFIGURATION_BAUDRATE));


    //For com port
    TCHAR   PortName[MAX_PORT_NO+1][MAX_COMPORT_STR_LEN]={0};
    int portCount=0;
    int NoPort=searchComPort(PortName);
    if(NoPort==0)
    {
        AfxMessageBox(theApp.GetAtlasCaptionOrMsg(IDD_MSG_COMPORTNOTFOUND));
        EndDialog(IDCANCEL);
        return FALSE;
    }
    else
    {
        //For adding the com port in the combo box
        while(PortName[portCount][0]!=0)
        {
            m_comboComPort.AddString(PortName[portCount]);
            portCount++;
        }
    }

    //For Adding baud rate
    int iBaudRateInd=0;
    char BaudRate[80];
    CComBSTR ccmbstrBaudRate[10];

    theApp.GetProductObject()->getBaudRate(&ccmbstrBaudRate[0]);
    wcstombs(BaudRate,ccmbstrBaudRate[0],80);
    char port[5][6];
    int j;
    int i;
    for( i=0;i<5;i++)
        for(j=0;j<6;j++)
            port[i][j]='\0';
    i=0;
    j=0;

    while(BaudRate[i]!=',')
    {
        port[0][j]=BaudRate[i];
        i++;
        j++; 
    }
    i++;
    j=0;
    iBaudRateInd++;
    m_comboBaudRate.AddString((CString)port[0]);

    while(BaudRate[i]!=',')
    {
        port[1][j]=BaudRate[i];
        i++;
        j++;
    }
    i++;

    iBaudRateInd++;
    m_comboBaudRate.AddString((CString)port[1]);
    j=0;
    while(BaudRate[i]!=',')
    {
        port[2][j]=BaudRate[i];
        i++;
        j++;
    }
    i++;

    iBaudRateInd++;
    m_comboBaudRate.AddString((CString)port[2]);
    j=0;        
    while(BaudRate[i]!=',') 
    {
        port[3][j]=BaudRate[i];
        i++;
        j++;

        if(BaudRate[i]=='\0')
            break;
    }

    iBaudRateInd++;
    m_comboBaudRate.AddString((CString)port[3]);

    if(BaudRate[i]!='\0')
    {
        i++;
        j=0;

        while(BaudRate[i]!=',')
        {
            port[4][j]=BaudRate[i];
            i++;
            j++;
            if(BaudRate[i]=='\0')
                break;

        }

        iBaudRateInd++;
        m_comboBaudRate.AddString((CString)port[4]);

    }

    GetPrivateProfileString("RS232_2","BaudRate","9600",BaudRate,sizeof(BaudRate),CONFIG_GENERIC_INI);

    char  ComPort[10];
    GetPrivateProfileString("RS232_2","COMPort","COM1",ComPort,sizeof(ComPort),CONFIG_GENERIC_INI);

    int indexBaudRate=m_comboBaudRate.FindString(-1,(CString)BaudRate);

    m_comboBaudRate.SetCurSel(indexBaudRate);

    int indexComPort=m_comboComPort.FindString(-1,(CString)ComPort);
    m_comboComPort.SetCurSel(indexComPort);

    //Getting the default value
    char  DeviceID[10];
    GetPrivateProfileString("Secs1_1","DeviceId","251",DeviceID,sizeof(DeviceID),CONFIG_GENERIC_INI);
    GetPrivateProfileString("SecsII_1","DeviceId","251",DeviceID,sizeof(DeviceID),CONFIG_GENERIC_INI);
    m_lDeviceId=atoi(DeviceID);

    UpdateData(false);

    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
}
  • 0
    Покажите нам свой OnInitDialog
  • 0
    Привет, я добавил код OnInitDialog
Теги:
mfc

1 ответ

2

Вы не вызываете OnInitDialog из родительского класса в OnInitDialog. Добавьте CDialog :: OnInitDialog() в качестве первой строки в OnInitDialog. (Я предполагаю, что вы наследуете диалог с CDialog).

  • 0
    Извините, форматированный код не был хорош: это первая строка: CDialogMgr :: OnInitDialog ();
  • 1
    @vBx - это не вызывает OnInitDialog родительского класса. В какой-то момент CDialog :: OnInitDialog () должен быть вызван перед установкой этих элементов управления.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню