Окно со списком не было создано в точке, которую вы вызываете foo ().Возможно, вы захотите добавить элемент CStringArray в CClass1, а затем настроить его на использование DDX для загрузки комбинированного списка.Шаг DDX будет выполнен ПОСЛЕ создания окна со списком.
Вот пользовательская функция DDX, которая выполняет именно эту задачу:
void AFXAPI
DDX_CBStringArray (CDataExchange* pDX, int nIDC, CStringArray& strings)
{
HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
bool bMine = false;
CComboBox* pCB = dynamic_cast<CComboBox*>(CWnd::FromHandlePermanent(hWndCtrl));
if (!pCB)
{
pCB = new CComboBox;
pCB->Attach(hWndCtrl);
bMine = true;
}
if (pDX->m_bSaveAndValidate)
{
strings.RemoveAll();
int nNumStrings = pCB->GetCount();
CString strVal("");
for (int x = 0; x < nNumStrings; ++x)
{
pCB->GetLBText(x, strVal);
strings.Add(strVal);
}
}
else
{
pCB->ResetContent();
INT_PTR nSize = strings.GetSize();
for (INT_PTR x = 0; x < nSize; ++x)
{
pCB->AddString(strings.GetAt(x));
}
}
if (bMine)
{
pCB->Detach();
delete pCB;
}
}
Вы добавите элемент CStringArray в CClass1 и добавитессылка на эту функцию в вашем блоке DDX.Вы добавляете нужные вам строки в свой ComboBox в переменную StringArray после создания экземпляра класса, но перед вызовом DoModal ().Эта функция заполнит поле со списком для вас.
CClass1 изменяется следующим образом:
CClass1 : public CDialogEx
{
...
public:
CStringArray myStringEntries;
...
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
...
};
Ваше переопределение DoDataExchange будет выглядеть так:
void CClass1::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CClass1)
DDX_CBStringArray(pDX, IDC_COMBO1, myStringEntries);
...
//}}AFX_DATA_MAP
}
Ваш вызывающий классизменяется на:
CClass1 dlg(this);
dlg.myStringEntries.Add("Some text");
dlg.myStringEntries.Add("More text");
dlg.DoModal();
Или, альтернативно, CClass1 :: foo () может быть изменен для заполнения CStringArray:
void CClass1::Foo()
{
myStringEntries.Add(TEXT("text"));
myStringEntries.Add(TEXT("more text"));
}