提交工单
咨询集成、功能及报价等问题
窗口缩略图主要是辅助窗口分享和屏幕分享选择相应的窗口或屏幕。
本文主要讲述如何设置窗口缩略图分享,详情请参考示例Demo。
/*
设置日志路径和级别
*/
zego_screencapture_set_log_level(kZegoLogLevelDebug, logDir);
/*
初始化
*/
zego_screencapture_init();
/*
设置窗口状态变化回调
*/
zego_windowthumbnail_window_status_change_notify(WindowChangeCallback,nullptr);
/*
获取可以建立缩略图的窗口和屏幕
*/
ZegoThumbnailWindowInfo* pInfo = zego_windowthumbnail_find_windows(&iCount);
/*
客户端提供顶层窗口和显示区域,用来显示缩略图,SDK将会把源窗口缩略图绘制到对应区域
*/
zego_windowthumbnail_register((ZegoWindowHandle)this->winId(), info[i].thumbnail_id, &rect)
/*
zego_windowthumbnail_find_windows返回的窗口信息结构如下,客户端根据此信息绘制预览时的窗口标题和窗口所在进程的图标
*/
struct ZegoThumbnailIconBits
{
int width; ///< 窗口对应图标的宽(像素)
int height; ///< 采集画面高(像素)
int format; ///< (未使用) 默认BGRA32
unsigned int len; ///< 窗口对应图标画面数据大小
unsigned char* bits; ///< 窗口对应图标画面数据
};
struct ZegoThumbnailWindowInfo
{
int thumbnail_id; ///< 缩略图ID
ZegoWindowHandle handle; ///< 窗口句柄
char window_title[ZEGO_MAX_TITLE]; ///< 窗口标题(windows当isScreen为true时 格式为 屏幕1----\\\\.\\DISPLAY1)
ZegoThumbnailIconBits *icon_bits; ///< 源窗口进程图标数据
#ifndef WIN32
ZegoThumbnailIconBits *image_bits; ///< (macOS使用) 缩略图数据
#endif
bool isScreen; ///< 是否是屏幕
};
/*
客户端选中其中窗口进行分享时,可以调用zego_windowthumbnail_show_source_window方法将源窗口进行置顶显示
*/
if (event->type() == QEvent::MouseButtonDblClick)
{
QPoint coursePoint;
coursePoint = QCursor::pos();//获取当前光标的位置
coursePoint = QWidget::mapFromGlobal(coursePoint);
for (const auto& it : m_Infos)
{
if (it.rectThumbnail.contains(coursePoint))
{
//it.WinID可作为窗口分享的窗口句柄
m_CaptureWinID = it.WinID;
zego_windowthumbnail_show_source_window((ZegoWindowHandle)it.WinID, kZegoThumbnailShowWindowCmdShow);
this->hide();
break;
}
}
}
/*
已经注册缩略图的窗口,当窗口标题发生改变或者窗口被关闭,或者有新窗口建立,将产生回调,用来更新预览窗口的缩略图
*/
void NotifyWindowChangeCallback(WindowStatus ChangeCode,int id,HWND hWnd, const char* szWindowName)
{
if (ChangeCode == WND_STATUS_DESTROY||ChangeCode == WND_STATUS_INVALID)
{
//客户端缩略图显示区重新绘制
zego_windowthumbnail_unregister(thumbnail_id);
}
else if (ChangeCode == WND_STATUS_CREATE)
{
//客户端分配缩略图显示区
zego_windowthumbnail_register(/*...*/);
}
else if (ChangeCode == WND_STATUS_NAMECHANGE)
{
//原缩略图名称变化
}
}
1,窗口状态变化回调返回窗口无效或者销毁时反注册缩略图
2,关闭时反注册所有缩略图
if (event->type() == QEvent::Hide)
{
for (const auto& it : m_Infos)
{
zego_windowthumbnail_unregister(it.ThumbnailID);
}
m_Infos.clear();
}
联系我们
文档反馈