文章 "图形界面 I: 用于表单按钮的函数与删除界面元素 (第四章)" 新评论 MetaQuotes 2016.03.07 10:31 新文章 图形界面 I: 用于表单按钮的函数与删除界面元素 (第四章)已发布:在本文中, 我们将继续开发CWindow类, 增加它的类方法, 可以通过点击它的控件来对它进行管理. 我们将可以通过表单按钮来关闭程序, 也会实现表单的最小化和最大化功能.如果您按照本文中推荐的那样, 跟随了一系列操作并到达了这一点, 您将会看到, 当EA交易被从图表上删除后, 图形界面的对象也会被删除. 我们还没有讨论过从图表上删除图形对象的方法. 为什么当EA交易被删除后, 这些对象也要删除?这是在标准库中包含的, 更加明确一点, 在CChartObject类的析构函数中, 我们的界面库中有它的派生类. 当程序被从图表上删除时, 将会调用各个类的析构函数, 也包含了这个类. 如果一个对象附加到图表, 它就被删除: //+------------------------------------------------------------------+ //| 析构函数 | //+------------------------------------------------------------------+ CChartObject::~CChartObject(void) { if(m_chart_id!=-1) ::ObjectDelete(m_chart_id,m_name); } 如果图表的交易品种或者时段修改了, 析构函数就不会被调用, 图形界面也不会被删除. 因为图形界面是在主程序文件中的OnInit() 初始化函数中进行的, 而在改变交易品种或者EA交易的时段时会进行去初始化然后再初始化, 图形界面会在已有基础上再创建一个. 结果, 这样就有了两份复制的对象. 如果您继续改变图表交易品种或者时段, 您就会有很多份界面对象的拷贝. 图 4. 当切换图标交易品种和时段时的表单测试 我们必须在我们开发的函数库中解决这个问题, 也就是说我们必须确认在程序去初始化时, 所有的图形对象都被删除. 另外, 所有包含这些对象指针的数组也要被清空, 它们在维度上的大小要清零. 在做完这些之后, 在初始化的时候, 对象的设置就会是正确的了, 而不是克隆出来. 现在, 我们将实现这种机制.作者:Anatoli Kazharski 图形界面 I: 用于表单按钮的函数与删除界面元素 (第四章) 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
新文章 图形界面 I: 用于表单按钮的函数与删除界面元素 (第四章)已发布:
如果您按照本文中推荐的那样, 跟随了一系列操作并到达了这一点, 您将会看到, 当EA交易被从图表上删除后, 图形界面的对象也会被删除. 我们还没有讨论过从图表上删除图形对象的方法. 为什么当EA交易被删除后, 这些对象也要删除?这是在标准库中包含的, 更加明确一点, 在CChartObject类的析构函数中, 我们的界面库中有它的派生类. 当程序被从图表上删除时, 将会调用各个类的析构函数, 也包含了这个类. 如果一个对象附加到图表, 它就被删除:
如果图表的交易品种或者时段修改了, 析构函数就不会被调用, 图形界面也不会被删除. 因为图形界面是在主程序文件中的OnInit() 初始化函数中进行的, 而在改变交易品种或者EA交易的时段时会进行去初始化然后再初始化, 图形界面会在已有基础上再创建一个. 结果, 这样就有了两份复制的对象. 如果您继续改变图表交易品种或者时段, 您就会有很多份界面对象的拷贝.
图 4. 当切换图标交易品种和时段时的表单测试
我们必须在我们开发的函数库中解决这个问题, 也就是说我们必须确认在程序去初始化时, 所有的图形对象都被删除. 另外, 所有包含这些对象指针的数组也要被清空, 它们在维度上的大小要清零. 在做完这些之后, 在初始化的时候, 对象的设置就会是正确的了, 而不是克隆出来. 现在, 我们将实现这种机制.
作者:Anatoli Kazharski