現象:`Graphics::SetSmoothingMode(SmoothingModeHighQuality)` 開啟反走樣後,頻繁 `Invalidate` 刷新導致跳幀卡頓。
void CMyView::OnDraw(CDC* pDC) {
CRect rect; GetClientRect(&rect);
CMemDC memDC(pDC, &rect); // MFC 雙緩衝類
Graphics g(memDC.GetSafeHdc());
g.SetSmoothingMode(SmoothingModeHighQuality);
// 繪圖...
// memDC 析構時自動 BitBlt 到屏幕
}
class CMyView {
Gdiplus::Pen m_penRed; // 構造函數初始化一次
CMyView() : m_penRed(Color(255,255,0,0), 2.0f) {}
void OnDraw(...) { g.DrawLine(&m_penRed, ...); }
};
// 普通線條用默認 SmoothingModeNone
// 關鍵曲線才臨時開啟
g.SetSmoothingMode(SmoothingModeAntiAlias); // 比 HighQuality 快
// 繪完關鍵曲線後恢復
g.SetSmoothingMode(SmoothingModeNone);
核心口訣:**雙緩衝消除閃爍,資源複用消除分配,選擇性反走樣平衡質量與速度,必要時換硬件加速引擎。**