c++ - 在 MFC 中的模型对话中填充 Combobox

我正在尝试在 MFC 应用程序的模型对话框中填充 CComboBox。我的数据来自 API,我设法将其放入 JSON 数组。我需要用 JSON 对象的 name 成员填充 CComboBox 的菜单项。

我知道如何在 for 循环中访问它。问题是我不知道如何用我的名字填充 CComboBox。我在链接到对话的 .cpp 文件中有一个 DoDataExchange() 函数。我尝试使用 DDX_CBString 进行填充,但它只是使用我拥有的姓氏设置 combobox 的文本,而不是填充菜单项。

我对编程世界本身很陌生,但设法使一些应用程序(基本应用程序)......我不知道所有这些 MFC 东西是如何工作的......试图掌握它。如果有人可以帮助简单地解释这一点,那将是一个很大的帮助......谢谢:)

回答1

假设你有一个结构:

struct TheData
{
   CString name; 
   // other stuff ...
};

假设您的收藏在某种数组中...

std::vector<TheData> m_theData;

假设您的组合框是 m_cbDataStuff 并且它已经被初始化为一个在 CYourDerivedDialog::DoDataExchange(CDataExchange* pDX) 中带有 DDX_Control 的控件。

你会想要覆盖 OnInitDialog() ...

BOOL CYourDerivedDialog::OnInitDialog()
{
   __super::OnInitDialog();

   for ( size_t idx = 0; idx < m_theData.size(); ++idx)
   {
      int where = m_cbDataStuff.AddString(m_theData.name);
      m_cbDataStuff.SetItemData(where, idx);
   }


   return TRUE;
}

如果您不进行排序,则不需要通过调用 SetItemData() 来设置索引,因为 combobox 中的索引将匹配集合中的索引。当然,您可以将其他内容放入项目数据中,例如迭代器或指向数据的指针等。 (可能通过使用 SetItemDataPtr() 代替)

相似文章

html - 无法用输入定位 UL

我想将列表放在输入下,我的css有什么问题?https://jsfiddle.net/BNDeveloper/rxm268yd/15/在此示例中,嵌套菜单的位置太靠左且有点太高(它应该在包含菜单结束的...

随机推荐

最新文章