从组合框中的 DWORD_PTR 检索项目值?
Posted
技术标签:
【中文标题】从组合框中的 DWORD_PTR 检索项目值?【英文标题】:Retrieve item value from DWORD_PTR in combobox? 【发布时间】:2019-09-05 14:21:11 【问题描述】:我想检索项目值(字符串)
s
在哪里是
DWORD_PTR s = m_laybox.GetItemData(idx);
基本上,s
被选中,我保存在配置中
现在如何从 s 获取项目值(字符串)
【问题讨论】:
您需要向我们展示您调用 m_laybox.SetItemData() 的代码。我们需要知道作为商品数据存储的数据类型。 【参考方案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];
这些是基础......不保证任何东西都能编译或工作......但它很接近
【讨论】:
以上是关于从组合框中的 DWORD_PTR 检索项目值?的主要内容,如果未能解决你的问题,请参考以下文章