Fix: clear residual image outside remote frame in non-adaptive scroll mode
This commit is contained in:
@@ -5818,6 +5818,7 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
|
|||||||
ack.status = CONN_AUTH_CLOCK_SKEW;
|
ack.status = CONN_AUTH_CLOCK_SKEW;
|
||||||
Mprintf("[ConnAuth] %s: 时钟偏差 %lld 秒,拒绝\n",
|
Mprintf("[ConnAuth] %s: 时钟偏差 %lld 秒,拒绝\n",
|
||||||
ContextObject->GetPeerName().c_str(), skew);
|
ContextObject->GetPeerName().c_str(), skew);
|
||||||
|
PostMessageA(WM_SHOWMESSAGE, (WPARAM)new CharMsg("Connection AUTH failed. Please check the client's time."), NULL);
|
||||||
} else {
|
} else {
|
||||||
BYTE sigInput[8 + 8 + 16];
|
BYTE sigInput[8 + 8 + 16];
|
||||||
memcpy(sigInput, &pkt->clientID, 8);
|
memcpy(sigInput, &pkt->clientID, 8);
|
||||||
|
|||||||
@@ -1714,7 +1714,20 @@ void CScreenSpyDlg::OnPaint()
|
|||||||
StretchBlt(m_hFullDC, 0, 0, dstW, dstH, m_hFullMemDC, 0, 0, srcW, srcH, SRCCOPY);
|
StretchBlt(m_hFullDC, 0, 0, dstW, dstH, m_hFullMemDC, 0, 0, srcW, srcH, SRCCOPY);
|
||||||
}
|
}
|
||||||
} else {
|
} 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);
|
ShowScrollBar(SB_BOTH, !m_bAdaptiveSize);
|
||||||
SysMenu->CheckMenuItem(IDM_ADAPTIVE_SIZE, m_bAdaptiveSize ? MF_CHECKED : MF_UNCHECKED);
|
SysMenu->CheckMenuItem(IDM_ADAPTIVE_SIZE, m_bAdaptiveSize ? MF_CHECKED : MF_UNCHECKED);
|
||||||
|
Invalidate(FALSE); // 立即重绘,清除旧模式的残留画面
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IDM_AUDIO_TOGGLE: {
|
case IDM_AUDIO_TOGGLE: {
|
||||||
|
|||||||
Reference in New Issue
Block a user