2

我有一个计时器,我在 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 闪烁,这是我用于程序的窗口。任何帮助,将不胜感激。谢谢!

4

0 回答 0