Как остановить мерцание CDialog (mfc) на Invalidate при обновлении RichEdit20A - PullRequest
1 голос
/ 08 октября 2019

У меня есть таймер, который я показываю пользователю в RichEdit20A, который находится внутри CDialog. Проблема заключается в том, что каждый раз, когда я обновляю RichEdit20A, экран мерцает.

Поскольку у меня в диалоге несколько RichEdit20A, у меня есть метод ниже, который я использую для их обновления. Я пробовал ModifyStyle(0, WS_CLIPCHILDREN, 0); OnInitDialog, но он стирает все мои RichEdit20A тексты. Я также попытался RedrawWindow(Null,Null, RDW_Erase) - Диалог все еще мерцает и RedrawWindow(Null,Null, RDW_Invalidate) - Весь текст пишется поверх старого, что делает его нечитаемым.

//UpdateData(TRUE);

if(!pRECtrl)
    return;

CHARFORMAT cf = {0};

cf.cbSize = sizeof(cf);
cf.dwMask = (bold ? CFM_BOLD : 0) | (italic ? CFM_ITALIC : 0) | CFM_COLOR;
cf.dwEffects = (bold ? CFE_BOLD : 0) | (italic ? CFE_ITALIC : 0) |~CFE_AUTOCOLOR;
cf.crTextColor = color;

pRECtrl->SetSel(0, -1); // Set the cursor to the end of the text area and deselect everything.
pRECtrl->Clear();
pRECtrl->ReplaceSel(text);

// Apply formating to the just inserted text.
pRECtrl->SetSel(0, pRECtrl->GetTextLength());
pRECtrl->SetSelectionCharFormat(cf);


//UpdateData(FALSE);

Invalidate();

Я знаю, что Invalidate является причиноймерцание и эта двойная буферизация (я никогда не делал этого раньше) - вот что используется для исправления такого рода проблем для CViews ... и я не знаю, что делать, чтобы остановить мерцание для CDialog, который является окномЯ использую для моей программы. Любая помощь будет оценена. Спасибо!

...