回覆列表
  • 1 # 使用者3412753885568

    閃爍是因為窗體背景色在重繪,你要過載OnEraseBkgnd阻止視窗重繪背景色。另外你這不是雙緩衝的正確用法。由於直接操作視窗DC的成本高昂(每一次的繪製相當於記憶體和視訊記憶體的溝通),所以雙緩衝的思想是儘量在記憶體DC中操作,再一次性將所有內容複製到視窗DC上,即一個batch。所以原則上除了OnPaint中,其他時候你都不該直接操作視窗DC。而是改為畫在記憶體DC上,然後Invalidate通知視窗自己重繪。在OnPaint中就只幹一件事:把記憶體DC的內容往視窗DC中畫。因此不能每次都臨時建立一個新的CompatibleDC,而應該僅僅建立一次,在視窗的生命週期中一直使用它。話說回來,獲取子視窗Rect,然後畫在父視窗DC上這是什麼意思,MFC自繪也不是這麼玩的吧?你這是DirectUI的套路啊,那為什麼不考慮Win32API+D2D+DWrite+WIC+WAM?或者再加上更現代的Direct Composition和Direct Manipulation。除非是目前的專案需要,不然研究MFC真心木有錢途啊。

  • 2 # 使用者6847486145697

    CDC memDC;

    memDC.CreateCompatibleDC(&dc);

    CBitmap memBmp;

    memBmp.CreateCompatibleBitmap(&dc, rectPic.Width(), rectPic.Height());

    CBitmap* pOldBmp = memDC.SelectObject(&memBmp);

  • 中秋節和大豐收的關聯?
  • 想發脾氣怎麼辦?