[英]Populating a Combobox in a model dialogue in MFC
我正在嘗試在 MFC 應用程序的模型對話框中填充CComboBox
。 我的數據來自 API,我設法將其放入 JSON 數組。 我需要使用 JSON 對象的name
成員填充CComboBox
的菜單項。
我知道如何在for
循環中訪問它。 問題是我不知道如何用我擁有的名稱填充CComboBox
。 我在鏈接到對話的 .cpp 文件中有一個DoDataExchange()
函數。 我嘗試使用DDX_CBString
進行填充,但它只是使用我擁有的姓氏設置組合框的文本,而不是填充菜單項。
我對編程世界本身很陌生,但設法使一些應用程序(基本的)......我不知道所有這些 MFC 的東西是如何工作的......試圖掌握它。 如果有人可以幫助簡單地解釋這一點,那將是一個很大的幫助......謝謝:)
假設你有一個結構:
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()
來設置索引,因為組合框中的索引將匹配集合中的索引。 當然,您可以將其他內容放入項目數據中,例如迭代器或指向數據的指針等。 (可能通過使用SetItemDataPtr()
代替)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.