从组合框中的DWORD_PTR检索项目值?

时间:2019-09-05 14:21:11

标签: combobox mfc

我要检索项目值(字符串) arrange_if在哪里

s

基本上,DWORD_PTR s = m_laybox.GetItemData(idx); 被选中,我保存在配置中 现在如何从s

获取项目值(字符串)

1 个答案:

答案 0 :(得分:1)

嗯,有多种策略。您必须知道的一件事是,数据在组合框的生存期内必须存在(或多或少)。您不必将字符串放入组合框。可以,但是也可以将对象指针放入组合框(作为项目数据)。

我喜欢做某事的一种方法是拥有一组项目,然后将索引存储到组合框中。

但是,请考虑将“字符串”放入组合框。...

您执行类似操作:

假设pString是TCHAR *(或char *或wchar_t *)

// for all the items you need to add ....
int idx = m_combo.AddString(pString); // or something different
m_combo.SetItemDataPtr(idx, pString);

后记,响应CBN_SELENDOK或CBN_SELCHANGE,您想要获取数据...

您将获得一个idx ....

TCHAR* pRetrieved = reinterpret_cast<TCHAR*>(m_combo.GetItemDataPtr(idx);

CComboBox :: GetItemDataPtr()返回LPVOID。您需要将其转换为所需的类型。

对于差异示例,请考虑以下记录...

struct ClientInfo
{
   CString m_Name;
   int m_CliendID;
   CString m_Address;
};

考虑一下,也许您有这些记录的数组:

CArray<ClientInfo> m_arrayClientInfo;

稍后在某处初始化它。然后,您想在对话框中填充组合框。您可以执行以下操作:

for (int i = 0; i < m_arrayClientInfo.GetCount(); ++i)
{
   int idx = m_combo.AddString(m_arrayClientInfo[i].m_Name);
   m_combo.SetItemDataPtr(idx, i); // store index, not pointer, but you could store pointer
}

有时在程序中想要获取数据时...

int nArrayIndex = reinterpret_cast<int>(m_combo.GetItemDataPtr(idx));
const ClientInfo& clientInfo = m_arrayClientInfo[nArrayIndex];

这些都是基础知识...不保证任何东西都能编译或工作...但是很接近