Обновите элемент CComboBoxEx после изменения текста - PullRequest
1 голос
/ 12 марта 2019

У меня есть этот код:

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, и это не имеет значения.

Я видел этот вопрос , но моя проблема связана с текстом, а не с изображением.

Как мне заставить CComboBoxEx заставить его отображать обновленное текстовое значение?

1 Ответ

2 голосов
/ 12 марта 2019

Чтобы обновить элемент управления, вам нужно позвонить:

m_cbDates.RedrawWindow (NULL, NULL, 
    RDW_INVALIDATE | RDW_FRAME | 
    RDW_UPDATENOW | RDW_ALLCHILDREN);

Подробнее о RedrawWindow здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...