Я тестирую старое приложение 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
}
Вы не вызываете OnInitDialog из родительского класса в OnInitDialog. Добавьте CDialog :: OnInitDialog() в качестве первой строки в OnInitDialog. (Я предполагаю, что вы наследуете диалог с CDialog).