Почему я не могу добавить строку в поле со списком? - PullRequest
2 голосов
/ 13 октября 2011

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

Я получаю сообщение об ошибке «Отладка не подтверждено», указывающее на строку 352 afxcmn2.inl:

_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, но я отвлекся).

Ответы [ 2 ]

4 голосов
/ 19 октября 2011

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

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

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

1 голос
/ 13 октября 2011

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

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

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

...