Feature: Add "Play Snapshot" loop preview windows for online hosts
This commit is contained in:
@@ -234,6 +234,36 @@ public:
|
||||
// 用于在收到 JPEG 后调用 SetImageFromJpeg;DeletePopupWindow 释放时一并置空。
|
||||
class CPreviewTipWnd* m_pPreviewTip = nullptr;
|
||||
WORD m_PreviewReqId = 0; // 当前期待的预览响应序号;0 = 无待响应
|
||||
|
||||
// 屏幕预览响应消息载荷(PostMessage WM_PREVIEW_RESPONSE 的 LPARAM 指向它)。
|
||||
// IO 线程在 MessageHandle/TOKEN_SCREEN_PREVIEW_RSP 分支堆分配,UI 线程消费后释放。
|
||||
// 把 clientId 放进来是为了:1) 循环快照场景按 clientId 路由到目标窗口;
|
||||
// 2) 避免依赖 WPARAM —— 32 位 Windows 上 WPARAM 是 32 位,截 64 位 clientID。
|
||||
struct PreviewRspMsg {
|
||||
uint64_t clientId;
|
||||
std::vector<BYTE> packet;
|
||||
};
|
||||
|
||||
// "播放快照"循环模式:每个表项对应一台主机的浮窗 + 调度状态。
|
||||
// 仅 UI 线程访问(菜单 / OnTimer / OnPreviewResponse / OnUserOfflineMsg /
|
||||
// OnLoopTipDestroyed / Release),不加锁;context* 走 FindHost 在 m_cs 下取。
|
||||
struct LoopTipEntry {
|
||||
class CPreviewTipWnd* tip = nullptr;
|
||||
WORD expectedReqId = 0; // 上次发请求时写入;响应时校验
|
||||
WORD maxWidth = 480;
|
||||
BYTE jpegQuality = 70;
|
||||
};
|
||||
std::map<uint64_t, LoopTipEntry> m_LoopTips;
|
||||
WORD m_LoopReqId = 0; // 循环快照专用 reqId;与 m_PreviewReqId 解耦
|
||||
static const int LOOP_INTERVAL_MS = 3000; // 循环快照间隔(暂定 3 秒)
|
||||
|
||||
// 循环快照帮助函数(仅 UI 线程调用)
|
||||
void OpenLoopTip(class context* ctx, CPoint anchor);
|
||||
void CloseLoopTip(uint64_t clientID);
|
||||
void CloseAllLoopTips();
|
||||
void TickLoopTips();
|
||||
void SendLoopRequest(uint64_t clientID, LoopTipEntry& entry);
|
||||
afx_msg LRESULT OnLoopTipDestroyed(WPARAM wParam, LPARAM lParam);
|
||||
// 记录 clientID(心跳更新)
|
||||
std::set<uint64_t> m_DirtyClients;
|
||||
// 待处理的上线/下线事件(批量更新减少闪烁)
|
||||
@@ -286,7 +316,7 @@ public:
|
||||
bool IsDllRequestLimited(const std::string& ip);
|
||||
void RecordDllRequest(const std::string& ip);
|
||||
CMenu m_MainMenu;
|
||||
CBitmap m_bmOnline[54]; // 21 original + 4 context menu + 2 tray menu + 23 main menu + 3 new menu icons
|
||||
CBitmap m_bmOnline[55]; // 21 original + 4 context menu + 2 tray menu + 23 main menu + 3 new menu icons + 1 snapshot
|
||||
uint64_t m_superID;
|
||||
std::map<HWND, CDialogBase *> m_RemoteWnds;
|
||||
FileTransformCmd m_CmdList;
|
||||
@@ -520,4 +550,5 @@ public:
|
||||
afx_msg void OnCancelShare();
|
||||
afx_msg void OnWebRemoteControl();
|
||||
afx_msg void OnProxyPortAutorun();
|
||||
afx_msg void OnScreenpreviewLoop();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user