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

Combobox 从组合框中的DWORD_PTR中检索项目值?,combobox,mfc,Combobox,Mfc,我要检索项目值(字符串) 其中是sis DWORD_PTR s = m_laybox.GetItemData(idx); 基本上,s是选中项,我保存在配置中 现在我如何从s中获取项目值(字符串)嗯,有多种策略。您必须知道的一件事是,在组合框的生命周期内,数据必须存在(或多或少)。您不必在组合框中输入字符串。可以,但也可以将对象指针放入组合框(作为项数据) 我喜欢做的一种方法是拥有一个项目数组,然后将索引存储到组合框中 但是,考虑你把“字符串”放入组合框… 你可以这样做: for (int i

我要检索项目值(字符串) 其中是
s
is

DWORD_PTR s = m_laybox.GetItemData(idx);
基本上,
s
是选中项,我保存在配置中
现在我如何从s中获取项目值(字符串)

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

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

<>但是,考虑你把“字符串”放入组合框…

你可以这样做:

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
}
假设pString是一个TCHAR*(或char*或wchar\u t*)

后记,为了响应CBN_SELENDOK或CBN_SELCHANGE,您需要获取数据

您将获得一个idx

TCHAR* pRetrieved = reinterpret_cast<TCHAR*>(m_combo.GetItemDataPtr(idx);
考虑一下,您可能有一组这样的记录:

CArray<ClientInfo> m_arrayClientInfo;
CArray 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
}
for(int i=0;i
稍后在程序中的某个时候,当您想要获取数据时

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

这些都是基础…不保证任何编译或工作…但它很接近

您需要向我们展示代码,您可以在其中使用m_laybox.SetItemData()。我们需要知道作为项数据存储的数据类型。
int nArrayIndex = reinterpret_cast<int>(m_combo.GetItemDataPtr(idx));
const ClientInfo& clientInfo = m_arrayClientInfo[nArrayIndex];