247 lines
6.4 KiB
C
247 lines
6.4 KiB
C
![]() |
#pragma once
|
|||
|
|
|||
|
interface ITaskbarList4;
|
|||
|
|
|||
|
/** @class TaskbarTabItem
|
|||
|
* @brief 在任务栏附加到某窗口中显示的一个任务栏缩略图Tab(只在Win7及以上系统有)
|
|||
|
* @copyright (c) 2016, NetEase Inc. All rights reserved
|
|||
|
* @author Redrain
|
|||
|
* @date 2019/3/20
|
|||
|
*/
|
|||
|
class TaskbarManager;
|
|||
|
class TaskbarTabItem final : public ui::Window
|
|||
|
{
|
|||
|
public:
|
|||
|
/**
|
|||
|
* @param[in] bind_control 与TaskbarTabItem绑定在一起的提供缩略图和预览图的控件的指针
|
|||
|
* 构造函数
|
|||
|
*/
|
|||
|
TaskbarTabItem(ui::Control *bind_control);
|
|||
|
|
|||
|
/**
|
|||
|
* 获取与TaskbarTabItem绑定在一起的控件指针
|
|||
|
* @return ui::Control* 控件指针
|
|||
|
*/
|
|||
|
ui::Control* GetBindControl();
|
|||
|
|
|||
|
/**
|
|||
|
* 获取缩略图Tab的唯一id
|
|||
|
* @return std::string& id
|
|||
|
*/
|
|||
|
std::string& GetId();
|
|||
|
|
|||
|
/**
|
|||
|
* 初始化函数,TaskbarTabItem被new后立即调用
|
|||
|
* @param[in] taskbar_title 在任务栏缩略图上显示的标题
|
|||
|
* @param[in] id 缩略图Tab的唯一id
|
|||
|
* @return void 无返回值
|
|||
|
*/
|
|||
|
void Init(const std::wstring &taskbar_title, const std::string &id);
|
|||
|
|
|||
|
/**
|
|||
|
* 反初始化函数
|
|||
|
* @return void 无返回值
|
|||
|
*/
|
|||
|
void UnInit();
|
|||
|
|
|||
|
/**
|
|||
|
* 设置本Tab缩略图的标题
|
|||
|
* @param[in] title 标题
|
|||
|
* @return void 无返回值
|
|||
|
*/
|
|||
|
void SetTaskbarTitle(const std::wstring &title);
|
|||
|
|
|||
|
/**
|
|||
|
* 设置本Tab所属的窗体对应的TaskbarManager
|
|||
|
* @param[in] taskbar_manager TaskbarManager指针
|
|||
|
* @return void 无返回值
|
|||
|
*/
|
|||
|
void SetTaskbarManager(TaskbarManager *taskbar_manager);
|
|||
|
|
|||
|
/**
|
|||
|
* 获取本Tab所属的窗体对应的TaskbarManager
|
|||
|
* @return TaskbarManager* TaskbarManager指针
|
|||
|
*/
|
|||
|
TaskbarManager* GetTaskbarManager();
|
|||
|
|
|||
|
/**
|
|||
|
* 把TaskbarTabItem在任务栏的缩略图设为无效状态,用于重绘缩略图
|
|||
|
* @return bool true 成功,false 失败
|
|||
|
*/
|
|||
|
bool InvalidateTab();
|
|||
|
|
|||
|
private:
|
|||
|
/**
|
|||
|
* 返回本窗口的窗口类名
|
|||
|
* @return std::wstring 窗口类名
|
|||
|
*/
|
|||
|
virtual std::wstring GetWindowClassName() const override;
|
|||
|
|
|||
|
/**
|
|||
|
* 拦截并处理底层窗体消息
|
|||
|
* @param[in] uMsg 消息类型
|
|||
|
* @param[in] wParam 附加参数
|
|||
|
* @param[in] lParam 附加参数
|
|||
|
* @param[in out] bHandled 是否处理了消息,如果处理了不继续传递消息
|
|||
|
* @return LRESULT 处理结果
|
|||
|
*/
|
|||
|
virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) override;
|
|||
|
|
|||
|
/**
|
|||
|
* 处理窗口销毁消息
|
|||
|
* @return void 无返回值
|
|||
|
*/
|
|||
|
virtual void OnFinalMessage(HWND hWnd) override;
|
|||
|
|
|||
|
/**
|
|||
|
* 响应WM_DWMSENDICONICTHUMBNAIL消息
|
|||
|
* @param[in] width 需要的位图宽度
|
|||
|
* @param[in] height 需要的位图高度
|
|||
|
* @return void 无返回值
|
|||
|
*/
|
|||
|
void OnSendThumbnail(int width, int height);
|
|||
|
|
|||
|
/**
|
|||
|
* 响应WM_DWMSENDICONICLIVEPREVIEWBITMAP消息
|
|||
|
* @return void 无返回值
|
|||
|
*/
|
|||
|
void OnSendPreview();
|
|||
|
|
|||
|
private:
|
|||
|
bool is_win7_or_greater_;
|
|||
|
ui::Control *bind_control_;
|
|||
|
std::string id_;
|
|||
|
TaskbarManager *taskbar_manager_;
|
|||
|
};
|
|||
|
|
|||
|
/** @class TaskbarManager
|
|||
|
* @brief 管理某个会话窗口在任务栏显示的预览效果(只在Win7及以上系统有),其中包含多个TaskbarItem
|
|||
|
* @copyright (c) 2016, NetEase Inc. All rights reserved
|
|||
|
* @author Redrain
|
|||
|
* @date 2019/3/20
|
|||
|
*/
|
|||
|
class SessionForm;
|
|||
|
class TaskbarManager final : public nbase::SupportWeakCallback
|
|||
|
{
|
|||
|
public:
|
|||
|
/** @class ITaskbarDelegate
|
|||
|
* @brief TaskbarManager的事件委托类,只有继承该类的类可以使用TaskbarManager功能
|
|||
|
* @date 2019/3/20
|
|||
|
*/
|
|||
|
class ITaskbarDelegate
|
|||
|
{
|
|||
|
public:
|
|||
|
/**
|
|||
|
* 获取窗体句柄
|
|||
|
* @return HWND 窗体句柄
|
|||
|
*/
|
|||
|
virtual HWND GetHandle() const = 0;
|
|||
|
|
|||
|
/**
|
|||
|
* 获取渲染上下文
|
|||
|
* @return HDC HDC
|
|||
|
*/
|
|||
|
virtual HDC GetRenderDC() const = 0;
|
|||
|
|
|||
|
/**
|
|||
|
* 关闭一个任务栏项
|
|||
|
* @param[in] id 任务栏项id
|
|||
|
* @return void 无返回值
|
|||
|
*/
|
|||
|
virtual void CloseTaskbarItem(const std::string &id) = 0;
|
|||
|
|
|||
|
/**
|
|||
|
* 激活并切换到一个任务栏项
|
|||
|
* @param[in] id 任务栏项id
|
|||
|
* @return void 无返回值
|
|||
|
*/
|
|||
|
virtual void SetActiveTaskbarItem(const std::string &id) = 0;
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* 构造函数
|
|||
|
*/
|
|||
|
TaskbarManager();
|
|||
|
|
|||
|
/**
|
|||
|
* 初始化ITaskbarList4接口
|
|||
|
* @param[in] taskbar_delegate 作为任务栏缩略图主窗口
|
|||
|
* @return void 无返回值
|
|||
|
*/
|
|||
|
void Init(ITaskbarDelegate *taskbar_delegate);
|
|||
|
|
|||
|
/**
|
|||
|
* 把一个TaskbarTabItem注册为主窗口的一个Tab页
|
|||
|
* @param[in] tab_item TaskbarItem对象
|
|||
|
* @return bool true 成功,false 失败
|
|||
|
*/
|
|||
|
bool RegisterTab(TaskbarTabItem &tab_item);
|
|||
|
|
|||
|
/**
|
|||
|
* 把一个TaskbarTabItem从主窗口中反注册为
|
|||
|
* @param[in] tab_item TaskbarItem对象
|
|||
|
* @return bool true 成功,false 失败
|
|||
|
*/
|
|||
|
bool UnregisterTab(TaskbarTabItem &tab_item);
|
|||
|
|
|||
|
/**
|
|||
|
* 把一个TaskbarTabItem在主窗口的缩略图中的显示顺序设置到另一个TaskbarTabItem前面
|
|||
|
* @param[in] tab_item 被设置顺序的TaskbarItem对象
|
|||
|
* @param[in] tab_item_insert_before 被插入的TaskbarItem对象
|
|||
|
* @return bool true 成功,false 失败
|
|||
|
*/
|
|||
|
bool SetTabOrder(const TaskbarTabItem &tab_item, const TaskbarTabItem &tab_item_insert_before);
|
|||
|
|
|||
|
/**
|
|||
|
* 把一个TaskbarTabItem在任务栏设置为激活状态
|
|||
|
* @param[in] tab_item TaskbarItem对象
|
|||
|
* @return bool true 成功,false 失败
|
|||
|
*/
|
|||
|
bool SetTabActive(const TaskbarTabItem &tab_item);
|
|||
|
|
|||
|
/**
|
|||
|
* 生成某个控件对应的位图(返回位图包含窗口,且尺寸为窗口大小)
|
|||
|
* @param[in] control 控件指针
|
|||
|
* @return HBITMAP 生成的位图
|
|||
|
*/
|
|||
|
HBITMAP GenerateBindControlBitmapWithForm(ui::Control *control);
|
|||
|
|
|||
|
/**
|
|||
|
* 生成某个控件对应的位图
|
|||
|
* @param[in] control 控件指针
|
|||
|
* @param[in] dest_width 目标宽度
|
|||
|
* @param[in] dest_height 目标高度
|
|||
|
* @return HBITMAP 生成的位图
|
|||
|
*/
|
|||
|
HBITMAP GenerateBindControlBitmap(ui::Control *control, const int dest_width, const int dest_height);
|
|||
|
|
|||
|
/**
|
|||
|
* 缩放一个内存位图
|
|||
|
* @param[in] dest_width 目标宽度
|
|||
|
* @param[in] dest_height 目标高度
|
|||
|
* @param[in] src_dc 源HDC
|
|||
|
* @param[in] src_x 源横坐标
|
|||
|
* @param[in] src_y 源纵坐标
|
|||
|
* @param[in] src_width 源宽度
|
|||
|
* @param[in] src_height 源高度
|
|||
|
* @return HBITMAP 生成的位图
|
|||
|
*/
|
|||
|
HBITMAP ResizeBitmap(int dest_width, int dest_height, HDC src_dc, int src_x, int src_y, int src_width, int src_height);
|
|||
|
|
|||
|
/**
|
|||
|
* 处理任务栏Tab的缩略图的WM_CLOSE消息
|
|||
|
* @param[in] tab_item 触发消息的Tab
|
|||
|
* @return void 无返回值
|
|||
|
*/
|
|||
|
void OnTabItemClose(TaskbarTabItem &tab_item);
|
|||
|
|
|||
|
/**
|
|||
|
* 处理任务栏Tab的缩略图的WM_ACTIVATE消息
|
|||
|
* @param[in] tab_item 触发消息的Tab
|
|||
|
* @return void 无返回值
|
|||
|
*/
|
|||
|
void OnTabItemClicked(TaskbarTabItem &tab_item);
|
|||
|
private:
|
|||
|
ITaskbarDelegate *taskbar_delegate_;
|
|||
|
ITaskbarList4 *taskbar_list_;
|
|||
|
};
|