我有此代码:
void CChristianLifeMinistryEditorDlg::UpdateDatesCombo()
{
for (int iDate = 0; iDate < m_cbDates.GetCount(); iDate++)
{
auto *pEntry = (CChristianLifeMinistryEntry*)m_cbDates.GetItemDataPtr(iDate);
if (pEntry != nullptr)
{
COMBOBOXEXITEM cmbItem;
CString strDateOriginal = _T("");
CString strDateNew = FormatWeekOfMeetingText(pEntry->GetMeetingDate());
// Get the existing item from the combo
cmbItem.mask = CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_TEXT | CBEIF_LPARAM;
cmbItem.iItem = iDate;
cmbItem.pszText = strDateOriginal.GetBuffer(_MAX_PATH);
cmbItem.cchTextMax = _MAX_PATH;
m_cbDates.GetItem(&cmbItem);
strDateOriginal.ReleaseBuffer();
// Update the text
strDateNew = FormatWeekOfMeetingText(pEntry->GetMeetingDate());
cmbItem.pszText = strDateNew.GetBuffer(_MAX_PATH);
m_cbDates.SetItem(&cmbItem);
strDateNew.ReleaseBuffer();
}
}
}
它工作正常,可以正确地将下拉列表从一种语言更改为另一种语言。
但是,直到我将鼠标悬停在控件上时,组合中的现有值才更新。
我尝试过m_cbDates.UpdateWindow
,但没有区别。
我看到了这个question,但我的问题与文本有关,而不与图像有关。
如何获取CComboBoxEx
使其显示更新后的文本值?
答案 0 :(得分:2)
要更新控件,您必须调用:
m_cbDates.RedrawWindow (NULL, NULL,
RDW_INVALIDATE | RDW_FRAME |
RDW_UPDATENOW | RDW_ALLCHILDREN);
详细了解RedrawWindow
here。