2011-10-13 3 views
2

Это кажется тривиальным, но с MFC я всегда получаю какую-то тупую тривиальную проблему, которая останавливает мой рабочий процесс.Почему я не могу добавить строку в поле со списком?

Я получаю «Debug Assertion Failed» ошибка указывает на afxcmn2.inl линии 352:

_AFXCMN_INLINE int CComboBoxEx::AddString(LPCTSTR lpszString) 
    { UNUSED_ALWAYS(lpszString); ASSERT(FALSE); return CB_ERR;} 

Я пытающегося просто добавить несколько строк в поле со списком инициализации, как так:

BOOL myDialog::OnInitDialog() 
{ 
    CDHtmlDialog::OnInitDialog(); 
    cb_direction.AddString(CString("North")); 
} 

Большинство ответов на Google, похоже, предполагают, что AddString происходит до OnInitDialog, что, похоже, не так. Еще одна серии ответов на Google предполагает обмен данных не происходит или это неправильно, но это не так:

void myDialog::DoDataExchange(CDataExchange* pDX) 
{ 
    CDHtmlDialog::DoDataExchange(pDX); 
    DDX_Control(pDX, IDC_WHEDIT_DIR, cb_direction); 
} 

Другое предложение заключалось в том, что поле со списком не было создано, но если отключить выпадающий с помощью следующий код, я не только НЕ получаю сообщение об ошибке, но он действительно работает и отключает этот ящик!

BOOL myDialog::OnInitDialog() 
{ 
    CDHtmlDialog::OnInitDialog(); 
    cb_direction.EnableWindow(FALSE); 
} 

Я очистил решение и перестроил его. Я не уверен, что еще мне не хватает. И все, что я хочу сделать, это добавить строку в поле со списком, которое займет 2 секунды в .Net (эта программа была написана много лет назад кем-то другим, поэтому именно в MFC, а не в .NET, но я отвлекаюсь) ,

+0

CComboBoxEx связывает изображения с элементами. Вместо этого используйте метод InsertItem(). –

ответ

1

Хорошо, если вы посмотрите, что делает этот метод, у них есть ASSERT(FALSE), так что не удивительно. На самом деле он ничего не делает, что указывает на добавление элемента в элемент управления ComboBoxEx. Per the docs

Эта функция не поддерживается элементом управления Windows ComboBoxEx. Дополнительные сведения об этом элементе управления см. В разделе Элементы управления ComboBoxEx в Platform SDK.

документация является вашим другом :)

+0

+1 для «Документация - ваш друг». –

+0

@Thomas: По какой-то причине люди просто не выглядят там в первую очередь. Возможно, я это делаю, потому что я работаю в системной группе, пишущей интерфейсы с относительно необычными аппаратными средствами. Просить о помощи на форуме обычно не вариант, у вас просто есть руководство. –

+0

В итоге я просто использовал обычный поле со списком, что позволило мне увидеть настройку «данные» в свойствах и просто оставить значения строк статическими, поскольку мне действительно не нужно динамически изменять его. Спасибо за урок философии. – alex

4

Ввод в игру немного поздно, но, кто знает, что это может помочь кому-то когда-нибудь:

COMBOBOXEXITEM item; 
    ZeroMemory(&item, sizeof(item)); 
    item.mask = CBEIF_TEXT; 
    item.iItem = 0; 
    item.pszText = _T("Hello"); 
    m_ComboEx.InsertItem(&item); 

FWIW, функциональность AddString() удаляется из CComboEx, потому что целью управления является отображение продвинутых элементов (с изображениями, идентификацией, независимо от ...), а не прямых регулярных текстовых элементов.

+0

спасибо, InsertString() работает для меня в WTL – sailfish009

Смежные вопросы