nim_duilib/examples/multi_browser/taskbar/taskbar_manager.h

247 lines
6.4 KiB
C
Raw Normal View History

2019-04-19 17:19:57 +08:00
#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_;
};