Fix: clear residual image outside remote frame in non-adaptive scroll mode
This commit is contained in:
@@ -1714,7 +1714,20 @@ void CScreenSpyDlg::OnPaint()
|
||||
StretchBlt(m_hFullDC, 0, 0, dstW, dstH, m_hFullMemDC, 0, 0, srcW, srcH, SRCCOPY);
|
||||
}
|
||||
} else {
|
||||
BitBlt(m_hFullDC, 0, 0, srcW, srcH, m_hFullMemDC, m_ulHScrollPos, m_ulVScrollPos, SRCCOPY);
|
||||
// 实际可见的位图像素数 = 位图剩余宽高(去掉滚动偏移后)与窗口的较小值
|
||||
int visW = max(0, min(srcW - (int)m_ulHScrollPos, dstW));
|
||||
int visH = max(0, min(srcH - (int)m_ulVScrollPos, dstH));
|
||||
if (visW > 0 && visH > 0)
|
||||
BitBlt(m_hFullDC, 0, 0, visW, visH, m_hFullMemDC, m_ulHScrollPos, m_ulVScrollPos, SRCCOPY);
|
||||
// 位图未覆盖的区域(远程分辨率小于窗口 / 滚动到边缘)填黑,防止残影
|
||||
if (visW < dstW) {
|
||||
RECT rc = { visW, 0, dstW, dstH };
|
||||
FillRect(m_hFullDC, &rc, (HBRUSH)GetStockObject(BLACK_BRUSH));
|
||||
}
|
||||
if (visH < dstH) {
|
||||
RECT rc = { 0, visH, dstW, dstH };
|
||||
FillRect(m_hFullDC, &rc, (HBRUSH)GetStockObject(BLACK_BRUSH));
|
||||
}
|
||||
}
|
||||
|
||||
// 绘制框选矩形(左键放大用红色,右键截图用绿色,二者颜色错开避免误操作)
|
||||
@@ -2177,6 +2190,7 @@ void CScreenSpyDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
||||
}
|
||||
ShowScrollBar(SB_BOTH, !m_bAdaptiveSize);
|
||||
SysMenu->CheckMenuItem(IDM_ADAPTIVE_SIZE, m_bAdaptiveSize ? MF_CHECKED : MF_UNCHECKED);
|
||||
Invalidate(FALSE); // 立即重绘,清除旧模式的残留画面
|
||||
break;
|
||||
}
|
||||
case IDM_AUDIO_TOGGLE: {
|
||||
|
||||
Reference in New Issue
Block a user