我的父对话框有一个CComboBoxEx
控件(映射到一个名为 的派生类CDatesComboBoxEx
)。
在应用程序的一部分中,此对话框显示一个弹出模式对话框。而且,在模态对话框中,它需要访问日期组合中的信息。
我决定做的(效果很好)是在弹出对话框的构造函数中传递我的组合地址。所以我现在可以执行以下操作:
m_pComboDates->GetCount()
m_pComboDates->GetItemDataPtr(i)
我想知道是否有任何方法可以在这里使用本机 Win32 代码?
- 我们可以访问父句柄 (
GetParent()->GetSafeHWnd()
)。 - 我们知道父对话框 (
IDC_COMBOBOXEX_OCLM_WEEK_OF_MEETING
) 上控件的 ID。
那么是否有可能以某种方式直接获取计数和项目数据?
我知道有这些宏:
但:
- 这些宏可以与
CComboBoxEx
控件一起使用吗?和 ... HWND
鉴于我之前描述的上下文,我们如何获得组合?
实际上,我想我误解了那些“宏”的目的。我可以像这样得到组合句柄:
HWND hDatesCombo = ::GetDlgItem(
GetParent()->GetSafeHwnd(), IDC_COMBOBOXEX_OCLM_WEEK_OF_MEETING);
但是,ComboBox_GetCount
不返回值。其他人也不行。所以我有些困惑。
根据答案,这一点现在很好:
HWND hDatesCombo = ::GetDlgItem(GetParent()->GetSafeHwnd(), IDC_COMBOBOXEX_OCLM_WEEK_OF_MEETING);
int iNumDates = static_cast<int>(::SendMessage(hDatesCombo, CB_GETCOUNT, 0, 0));
在我的for
循环中,我正在这样做:
LRESULT itemData = ::SendMessage(hDatesCombo, CB_GETITEMDATA, static_cast<WPARAM>(i), 0);
auto* pEntry = static_cast<CChristianLifeMinistryEntry*>((LPVOID)itemData);
这是我能找到的唯一方法。如果我尝试static_cast<LPVOID>
它也不会起作用。