我有一个计时器,我在 aRichEdit20A
内向用户显示CDialog
。问题是每次我更新RichEdit20A
,屏幕闪烁。
因为我的对话框中有几个RichEdit20A
,所以我有一个下面的方法来更新它们。我试过ModifyStyle(0, WS_CLIPCHILDREN, 0);
OnInitDialog
了,但它会删除我所有的RichEdit20A
文字。我还尝试过RedrawWindow(Null,Null, RDW_Erase)
--Dialog 仍然闪烁,并且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 是导致闪烁的原因,而双缓冲(我以前从未做过)是用来解决 CView 的此类问题的……我不知道该怎么做才能停止CDialog 闪烁,这是我用于程序的窗口。任何帮助,将不胜感激。谢谢!