为什么我不能在组合框中添加字符串?

时间:2011-10-13 17:22:59

标签: c++ windows visual-studio-2008 windows-7 mfc

这看起来微不足道,但是对于MFC,我总是会遇到一些愚蠢的琐碎问题,这会阻碍我的工作流程。

我收到指向afxcmn2.inl第352行的“Debug Assertion Failed”错误:

_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之前发生的,这似乎不是这里的情况。谷歌的另一系列答案表明数据交换没有发生或者是错误的,但事实并非如此:

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,但我离题了)

2 个答案:

答案 0 :(得分: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中删除,因为控件的目的是显示高级项目(包含图像,标识,等等......),而非直接常规文本项目。< / p>

答案 1 :(得分:1)

如果你看一下这个方法在做什么,他们就有ASSERT(FALSE),所以难怪。它实际上并没有做任何表明它向ComboBoxEx控件添加项目的事情。每the docs

  

Windows ComboBoxEx控件不支持此功能。有关此控件的更多信息,请参阅Platform SDK中的ComboBoxEx控件。

文档是你的朋友:)