我要检索项目值(字符串)
arrange_if
在哪里
s
基本上,DWORD_PTR s = m_laybox.GetItemData(idx);
被选中,我保存在配置中
现在如何从s
答案 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];
这些都是基础知识...不保证任何东西都能编译或工作...但是很接近