阿纳托利编码水平、质量--一切都达到了我个人难以置信的高度。非常感谢你的出色工作!我们期待着余下的部分!
大家好、
我从上一部分(4)获得了源代码。现在一切正常。
致罗兰
使用标准库处理鼠标移动的方法是什么?我使用位于 Experts\Examples\Controls 的文件进行了测试。
当我只使用 .ChartEvent(...) 函数时,ON_MOUSE_FOCUS_SET 事件不会被处理。
当我使用 .OnEvent(...) 函数时,ON_MOUSE_FOCUS_SET 事件得到了处理,但我无法移动窗口。
当我同时使用这两个函数(先调用 .ChartEvent() 然后再调用 .OnEvent())时,ON_MOUSE_FOCUS_SET 事件得到了处理,但当我单击递增和递减按钮时,它的变化超过了一步。

virtual bool OnItemFocusSet(const int index); //--- 重新绘制 bool Redraw(void); bool RowState(const int index,const bool select); bool CheckView(void); }; //+------------------------------------------------------------------+ //| 图表事件的通用处理程序| //+------------------------------------------------------------------+ EVENT_MAP_BEGIN(CListView) ON_INDEXED_EVENT(ON_CLICK,m_rows,OnItemClick) ON_INDEXED_EVENT(ON_MOUSE_FOCUS_SET,m_rows,OnItemFocusSet) EVENT_MAP_END(CWndClient)
bool CListView::OnItemFocusSet(const int index) { //--- 选择 "行" Select(index+m_offset); //--- 发送通知 EventChartCustom(CONTROLS_SELF_MESSAGE,ON_CHANGE,m_id,0.0,m_name); //--- 已处理 return(true); }
新文章 图形界面 I: 图形界面的动画 (第三章)已发布:
在本系列前面的文章中, 我们开始开发了一个用于控件的表单类. 在本文中, 我们将继续开发此类, 为它加上在图表区域内移动表单的方法. 我们也会把这个界面组建与核心库整合. 而且, 我们会在鼠标掠过表单控件的时候改变它的颜色.
<...>
编译项目并把程序载入图表. 为了验证程序能够正确地跟踪光标所在图表窗口, 以及任何指标, 包括不在图表主窗口中载入的状况.
我基本确定您在程序载入图表之后将不能移动窗口了. 原因就是在CWindow 类的构造函数中, m_movable 变量是使用false值来初始化的, 它的意思是用户无法在图表中移动表单. 这就是为什么MQL程序的开发人员必须在代码中指定是否需要表单的移动.
在 CProgram 类的CreateWindow() 方法中, 按照以下代码加上一行, 编译文件并再次测试程序.
现在, 应该没有什么问题阻止表单的移动了:
图 1. 测试表单在图表上的移动
有的时候图表窗口的大小必须能改变. 在这种时候, 会产生CHARTEVENT_CHART_CHANGE的修改图表属性的事件. 此时, 我们还没有使用任何一种方法来跟踪表单部分或全部超出图表窗口的情形. 为了避免这一点, 我们也必须在CWindow::OnEvent() 图表事件处理函数中检测此类事件.
作者:Anatoli Kazharski