C++ 为什么可以';我不能在组合框中添加字符串吗?

C++ 为什么可以';我不能在组合框中添加字符串吗?,c++,windows,visual-studio-2008,windows-7,mfc,C++,Windows,Visual Studio 2008,Windows 7,Mfc,这看起来很琐碎,但对于MFC,我总是会遇到一些愚蠢的琐碎问题,从而停止我的工作流程 我收到一个指向afxcmn2.inl第352行的“调试断言失败”错误: _AFXCMN_INLINE int CComboBoxEx::AddString(LPCTSTR lpszString) { UNUSED_ALWAYS(lpszString); ASSERT(FALSE); return CB_ERR;} 我试图在初始化时向组合框添加一些字符串,如下所示: BOOL myDialog::OnIn

这看起来很琐碎,但对于MFC,我总是会遇到一些愚蠢的琐碎问题,从而停止我的工作流程

我收到一个指向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"));
}
谷歌上的大多数答案似乎都表明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中,但我离题了)。

如果你看看这个方法在做什么,它们在那里有一个
断言(FALSE)
,这也就不足为奇了。实际上,它没有做任何表示它向
ComboBoxEx
控件添加项的操作。

Windows ComboBox控件不支持此函数。有关此控件的更多信息,请参阅平台SDK中的ComboBoxEx控件


文档是您的朋友:)

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

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

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

CComboxex将图像与项目相关联。改用InsertItem()方法。@Thomas:出于某种原因,人们似乎不先看那里。我之所以这么做,可能是因为我在一个系统组工作,为相对不常见的硬件编写接口。在论坛上寻求帮助通常不是一个选项,你只要有手册。我最终只使用了一个常规组合框,它允许我查看属性中的“数据”设置,并将字符串值保持在静态状态,因为我实际上不需要动态更改它。谢谢你的哲学课。