基于duilib的白板工具,可适用用教育行业
或者是视频会议
的演示白板
目标:
1 设计之初就是想实现类似于办公室玻璃墙的一样的白板,可书写,透明,还可以添加自己需要的工具
2 除了duilib不依赖其他的界面库,可以插入到任何工程中。
优势:
1 这块“玻璃”可以覆盖在任何窗口的上面,而且不用关心“玻璃”下面是什么东西,这样就可以将任何的内容放在玻璃板下面,包括浏览器,图片,视频等内容。
2 玻璃提供穿透的功能,可以将鼠标的事件完全回调给下层窗口,不影响下层窗口的使用。
已实现的功能:
1 常规的图形(矩形,椭圆,直线,箭头,三角形,菱形)
2 图形的二次编辑(移动,删除,添加)
3 图形保存功能,通过序列化反序列化可以将图形保存成json
4 由于本窗口是透明窗口,可以覆盖在其他的窗口上面,实现标注功能
效果图
Git地址: canvas_view
注:测试demo没有写太详细,可以自己摸索
部分接口:
class EXPORT CanvasView
{
public:
//回调第三方的接口
class Delegate
{
public:
//控件的更改 添加 删除 移动等操作
virtual void OnControlChange(ChangeType type,const char *context) {};
virtual void OnAddImage(const char*url, const char *context) {};
//发送添加的笔迹数据给第三方调用者
virtual void SendPenPath(InnerPenInfo &penInfo) {};
//鼠标以及按键事件的回传
virtual void OnMouseKeyMessage(unsigned int uMsg, unsigned int wParam,long lParam) {};
virtual void OnMouseWheelMessage(unsigned int uMsg, unsigned int wParam, long lParam) {};
virtual ~Delegate(){}
};
//供第三方调用的接口剖
public:
virtual ~CanvasView(){}
virtual void SetPenColor(DWORD color) = 0;
virtual void SetPenSize( int pen_size ) = 0;
//设置选择的工具
virtual void SelectTools(ToolTypes tool_type) = 0;
//创建画布
virtual bool CreateCanvas(int width, int height) = 0;
//重新设置映射范围
virtual void ResetCanvas(int width, int height) = 0;
//设置画板的位置
virtual bool SetCanvasViewPos(int x, int y, int width, int height) = 0;
virtual long GetCanvasViewHwnd() = 0;
virtual void PageTo(int page) = 0;
//设置纵向偏移量 scroll true 滚动条引起的 false 翻页引起的
virtual void SetOffset(int offsety, bool scroll=true) = 0;
virtual void AddImage(char *url, char *filepath,char *info) = 0;
virtual void Hide() = 0;
virtual void Show() = 0;
//序列化
virtual std::string Marshal() = 0;
//反序列化
virtual void UnMarshal(std::string grapics_data) = 0;
virtual void ChangeControls(ChangeType type, std::string change_infos) = 0;
virtual void SetEditable(bool enable) = 0;
};