簡體   English   中英

在 MFC 的模型對話框中填充組合框

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM