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

标签 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::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);
}

我已经清理了解决方案并重建了它。我不确定我还缺少什么。我想做的就是向组合框添加一个字符串,这在 .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 中删除,因为该控件的目的是显示高级项目(带有图像、标识等......),而不是直接的常规文本项目。

关于c++ - 为什么我无法将字符串添加到组合框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7757931/

相关文章:

c++ - 为 Visual Studio 安装 openCV 2.4 for C/C++

c++ - 你如何旋转给定的图像?

windows - 使用 Win32 API 找出图标资源中的图标数量

c++ - 如何更改 SysDateTimePick32 或 CDateTimeCtrl 的背景颜色?

web.config 文件中的 C# 连接字符串

c++ - 指向类链接器错误的静态指针

c++ - linux 中 windows SYSTEM_INFO 结构的替代方案

c++ - 我可以像这样使用 mem_fun 吗?

c++ - 如何将 VS2008 C++ 项目链接为 DLL 而不是 LIB?

c - 修改开源程序?