为什么我无法将字符串添加到组合框?

Why can't I add a string to a combo box?

本文关键字:组合 添加 字符串 为什么      更新时间:2023-10-16

这似乎微不足道,但与MFC我总是结束了一些愚蠢的琐碎的问题,使我的工作流程停止。

我得到一个"调试断言失败"错误指向afxcmn2。第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"));
}

谷歌上的大多数答案似乎表明,AddString是发生在OnInitDialog之前,这似乎不是这里的情况。谷歌上的另一系列答案表明,数据交换没有发生,或者是错误的,但事实并非如此:

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);
}

我已经清理了溶液并重建了它。我不确定我还错过了什么。我所要做的就是在组合框中添加一个字符串,这在。net中需要2秒钟(这个程序是几年前由其他人编写的,这就是为什么它在MFC而不是。net中,但我离题了)。

进入游戏有点晚,但谁知道呢,这可能会帮助某人某天:

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

FWIW, AddString()功能从CComboEx中删除,因为该控件的目的是显示高级项(带有图像,标识,等等),而不是直接的常规文本项。

如果你看看这个方法在做什么它们里面有一个ASSERT(FALSE),所以不足为奇。它实际上并没有做任何事情来表明它向ComboBoxEx控件添加了一个项目。根据docs

Windows ComboBoxEx控件不支持此功能。有关此控件的详细信息,请参阅平台SDK中的ComboBoxEx控件。

文档是你的朋友:)