解決方案介紹:
MFC工程中,Dlg類中有個CImage變數 m_iImage, 在建構式的時候Load了一張 .jpg 本地圖片, 用于做Dlg的背景圖片
同時Dlg中還有一些其他控制元件,我在 OnEraseBkgnd 中用 該圖片 重繪了背景,在 OnSize 中設定了無效區域
程式運行后基本可實作 不閃爍, 但是 在 連續 快速 的拖動視窗大小時 Button Edit 等控制元件,還是會偶爾出現閃爍

(注: 背景圖片是用的 拉伸)
另外想請教下 m_iImage.StretchBlt(pDC->m_hDC, ... ); 這一條陳述句 算不算 雙緩沖呢?

以下是代碼:
// 建構式 加載了本地 jpg 圖片 (多余的去掉了)
CMFCApplicationDlg::CMFCApplicationDlg(CWnd* pParent /*=NULL*/) : m_iImage.Load(L"f:/01.jpg"){ }
// 重繪背景
BOOL CMFCApplicationDlg::OnEraseBkgnd(CDC* pDC) {
static CRect rect;
GetClientRect(rect);
// 設定 拉伸 模式
SetStretchBltMode(pDC->m_hDC, COLORONCOLOR);
// 圖片大小是 1440 * 900
m_iImage.StretchBlt(pDC->m_hDC, 0, 0, rect.Width(), rect.Height(),0,0,1440,900 );
return TRUE;
}
// 在改變 視窗大小的時候 設定 無效區域
void CMFCApplicationDlg::OnSize(UINT nType, int cx, int cy) {
CDialogEx::OnSize(nType, cx, cy);
// 設定無效區域,否則 拉伸視窗后 背景花屏
Invalidate( TRUE);
// 這一條陳述句 感覺作用不大 是否立刻重繪 問題都會出現
UpdateWindow();
}
歡迎各位大神留言, 指出問題所在.
提前祝各位 新春快樂!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/50708.html
上一篇:函式呼叫問題
