最近在项目中使用Teechart ocx版本替换了labview的老版本控件,显示效果和效率均有提高,但是却遇到多线程下报access violation的问题。
翻遍大小论坛,最后在官网论坛找到相同问题,客服的答复是“多线程情况下,需要在线程中动态创建Teechart控件,不然mouse move事件可能会引起accessviolation 错误”。使用代码动态创建Teechart需要大量代码,在做多项定制并添加tools的情况下简直就是噩梦。labview的图表控件可以将配置导出为文件,动态创建的时候直接载入配置,在翻看Teechart配置工具后,终于让我找到了类似的方法,以下为使用过程(vs2010+teechart2010 ocx,其他版本或语言类似):
1、创建一个dialog,拖入一个teechart控件,在上面做好需要的各种配置。
2、在Export选项下,Native卡中选择binary,导出配置文件,这里配置文件为.tee后缀。
3、在项目中,动态创建控件,并调用CImport类的LoadFromFile方法,载入刚才保存的配置文件,这样就完美的实现了动态加载的目的而避免写出巨量的配置代码
m_dyChart = new CTchart1(); m_dyChart->Create(NULL, NULL,WS_VISIBLE | WS_CHILD, CRect(0,0,0,0), this, 1234); CImport imp = static_cast<CImport>(m_dyChart->get_Import()); imp.LoadFromFile("dy.tee");