gpt4 book ai didi

windows - 如何在 CComboBox 控件中正确使用 DDX(数据交换)?

转载 作者:可可西里 更新时间:2023-11-01 14:46:28 26 4
gpt4 key购买 nike

MFC 提供了一个名为DDX_CBIndex 的函数来获取当前选定的ComboBox 项的索引。但在大多数情况下,我对索引不感兴趣,相反我想获得 32 位应用程序提供的值,这是我在调用 GetItemData 时获得的。因此,我总是必须覆盖 OnOk 并使用 GetCurSelGetItemData 来检索此值。

是否有更优雅的方式来获取/设置 CComboBox 项目而不取决于索引但取决于应用程序提供的 32 位值?

谢谢!

最佳答案

我有一个部分解决这个问题的方法,但是根据@taspeotis 的建议,我写了这个,它似乎工作得很好。

    template <class T>
void DDX_CBData(CDataExchange* pDX, int nIDC, T& data)
{
HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
if (pDX->m_bSaveAndValidate)
{
int index = static_cast<int>(::SendMessage(hWndCtrl, CB_GETCURSEL, 0, 0L));
data = (index == CB_ERR ? NULL : reinterpret_cast<T>(::SendMessage(hWndCtrl, CB_GETITEMDATA, index, 0L)));
}
else
{
int count = static_cast<int>(::SendMessage(hWndCtrl, CB_GETCOUNT, 0, 0L));
for (int i = 0; i != count; ++i)
{
if (reinterpret_cast<T>(::SendMessage(hWndCtrl, CB_GETITEMDATA, i, 0L)) == data)
{
::SendMessage(hWndCtrl, CB_SETCURSEL, i, 0L);
return;
}
}
::SendMessage(hWndCtrl, CB_SETCURSEL, -1, 0L);
}
}

关于windows - 如何在 CComboBox 控件中正确使用 DDX(数据交换)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5403509/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com