我正在尝试在 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()
代替)