• 新增图表控件


    前言

    好久没有来更新博客了,这次就写一下在实际工作过程中,利用Htmlayout引擎开发自定义图表控件的东西吧。
    Htmlayout是一个非常棒非常轻量级的HTML引擎,利用HTML+CSS的搭配完成了静态页面布局的元素。可以通过访问官网来获取最新的版本信息。
    Htmlayout提供的标准控件库没有能够满足我需求的图表显示控件,需要自己实现这方面的控件开发工作,于是就有了本文内容。

    前期准备

    各位看官可以从HtmlayoutSDK去下载最新版本的SDK,然后集成到开发环境中,我这里采用的是Microsoft visual studio 2008。
    1.新增控件类型
    我在这里不打算使用Htmlayout里面提供的绘图函数,所以直接从htmlayout::event_handler中继承了,这里也可以从htmlayout::canvas中继承。
    2.定义响应事件类型
    在构造函数中定义需要响应的时间,我这里偷懒了,直接处理了event_handler(HANDLE_ALL)
    3.响应绘制函数
    一想到绘制函数,大家应该首先想到的是WM_PAINT、HDC之类的东西吧。没错,Htmlayout里面也是一样的,大家可以重载htmlayout::event_handler::on_draw()函数,剩下的就跟一般的窗口绘制函数一样了。
    函数原型

    virtual BOOL on_draw(HELEMENT he, UINT draw_type, HDC hdc, const RECT& rc);
    

    如果想让系统继续处理,则直接返回FALSE即可。
    4.实现创建工厂类对象
    在Htmlayout中,其实每一个控件都是一个behavior,这里的自定义控件也不例外。如果直接定义一个behavior的话就需要一个全局函数,这与图表控件的使用明显不合,为了更好的控制每一个图表的控件对象生命周期,需要一个创建工厂实例来控制每一个图表创建的时机。
    说了那么多,其实做起来没那么复杂,也就几句代码

    chart_control_factory::chart_control_factory()
    :behavior(HANDLE_BEHAVIOR_EVENT, "chart_control")
    {
    
    }
    
    event_handler* chart_control_factory::attach(HELEMENT h)
    {
        return dynamic_cast<event_handler*>(new chart_figure);
    }
    
    chart_control_factory chart_control_factory_instance;
    

    其中 "chart_control"指明了使用本图表控件的behavior名称。Htmlayout在解析到behavior的时候会遍历当前所有有效的behavior对象,找到对应的工厂类型后创建出合适的behavior实例。

    其他

    在本文中,我只是写了behavior里面的一个绘制处理修改,实际上除了绘制还有很多事件可以在behavior中处理,具体的内容可以参考EVENT_GROUPS里面的定义,每一个类型都会对应一个重载函数,可以非常灵活的定制自己的扩展控件库。

  • 相关阅读:
    【机器学习】机器学习12个关键经验教训
    【机器学习】24个终极项目提升您的机器学习知识和技能
    2018-12-21-WPF-弹出-popup-里面的-TextBox-无法输入汉字
    2019-10-31-C#-dotnet-获取整个局域网的-ip-地址
    2018-11-26-win10-uwp-获取窗口的坐标和宽度高度
    2019-5-21-dotnet-core-使用-CoreRT-将程序编译为-Native-程序
    2019-5-21-Roslyn-使用-Directory.Build.props-管理多个项目配置
    2019-2-26-SublimeText-快速打开当前文件的文件夹
    2019-2-18-VisualStudio-给项目添加特殊的-Nuget-的链接
    2019-8-31-dotnet-如何在-Mock-模拟-Func-判断调用次数
  • 原文地址:https://www.cnblogs.com/sanghg/p/4143873.html
Copyright © 2020-2023  润新知