在Canvas上做一个众包项目 - 页 8

 
o_O:

好的。

CFrame是清楚的。

---

我注意到你走了一条路,即gui块由它们自己的位图来表示。

对于那些正在阅读这篇文章并且已经开始考虑这个问题的人来说,重要的一点是:
应该只在一个位图上工作,所有的gui元素都在上面渲染。包括z-order。
在这种情况下,将有更多的可能性进行渲染。(阴影、渐变等)
,而且控制也被简化了(我们不会达到MT对象的水平)

我认为,每个单独的应用程序窗口(对话框)应该在图表上有自己的位图和对象(甚至不要考虑多个EA或指标将 "强奸 "一个位图资源的情况)。
在这种情况下,一个窗口的阴影可以作为一个阿尔法通道位图来实现,从而消除计算这个阴影的计算负荷。
单个窗口的所有GUI元素都画在它的位图上,考虑到Z顺序和嵌套(我不知道如何正确调用GUI对象的嵌套)

通过CHARTEVENT_MOUSE_MOVE监控鼠标事件,我在我的项目 中做过,没有发现滞后。
在不损失鼠标输入质量的情况下使用其他事件是不可能的。
 
对于我的MQL项目,我想把GUI库变成WPF的类似物,其中标记和事件是在一个文本文件(如XML)中描述。

我只需要根据文本文件中的描述实现GUI引擎将调用的事件。
 
Zorro:
我认为,每个单独的应用程序窗口(对话框)应该在图表上有自己的位图和对象(甚至不要考虑多个EA或指标将 "滥用 "一个位图资源的情况)。
在这种情况下,一个窗口的阴影可以作为一个阿尔法通道位图来实现,从而消除计算这个阴影的计算负荷。
单个窗口的所有GUI元素都在其位图上绘制,考虑到Z顺序和嵌套(我不知道如何调用GUI对象的嵌套)。

这是对的。

我想补充的是,不仅仅是 "每个对话框",而是具体到每个专家/指标的一个位图。 更多是可能的,但那是由编码者决定的。

我认为,当你在位图上有一个工作的对话框,然后在同一个位图上添加模态窗口,或者在同一个位图上添加另一个对话框--这是一个技术问题,现在不是一个原则问题。

首先,我们做一个抽象的模型,没有具体的细节,例如,哪些窗口位于哪里,等等。

然后你将能够涵盖所有不同的特征和行为

 
o_O:

问候编码员。

有一个有趣的任务是做一些真正有用的事情,我认为众包是一个好的选择。
首先,结果将在早期阶段提供给所有人。第二,我们将使用MQL制作新的东西。也许我们甚至会向MT的开发者索取新的好东西。

----

因此,这里是第一个和基本的任务。

1.我们需要制作一个按钮类(比方说GButton,为了不与现有的按钮混淆,以G为前缀)。
- 到目前为止,这个按钮只是简单的文字(没有多余的图片)
- 按钮被画在画布的某个区域
- 按钮有一个点击事件。





我很感兴趣地关注着这个问题,并想干涉一下:我认为开发者(像我一样)会投资于拥挤的GUI,如果这个GUI不仅可以通过终端来绘制。我将解释--漂亮的GUI是好的,它对销售是一个加分项......但就目前而言,它不会吞噬资源。如果有一个可以切换后端的GUI库,那就更理想了。例如,当我对资源不太在意时--让它由终端在画布上画出来(演示/市场),但一旦有了严肃的东西--通过快速工具在位图上画出来。有各种各样的开罗(更不用说OpenGL)可以更容易地处理绘图。

理想的图形用户界面是在一个单独的应用程序中设计的,例如以XML的形式导入。在EA中描述按钮和对话表单的位置不是一个好主意。
 
例子,原理图。

布局。
<sample>
   <window
     name='Sample'
     caption='Sample'
     x=0
     y=0
     width=320
     height=240
     OnClose='CloseApp'>

     <button caption='Exit' x y width height OnClick='ButtonExitClick'/>    

   </window>

</sample>
事件的实施。
class SampleCloseAction : public CloseAction
  {
public:
               SampleCloseAction() { SetActionName("CloseApp"); }
   virtual int Execute() { Print('Bye'); return(0); }
  };

class ButtonExitAction : public ButtonClickAction
  {
public:
               ButtonExitAction() { SetActionName("ButtonExitClick"); }
   virtual int Execute() { GUI::WindowClose('Sample'); return(0); }
  };

BaseAction *actions[];

actions[0]=new SampleCloseAction;
actions[1]=new ButtonExitAction;

GUI::WindowCreate('Sample',actions);
 
Maxim Kuznetsov:

一般来说,最理想的是有一个在单独的应用程序中设计的GUI,并以XML的形式导入,例如。在专家顾问中编写按钮和对话框的布局并不是一个好主意。

在那里 )

你来看看我们的第一个任务,我们将在创建元素后进行。

 
Maxim Kuznetsov:
一般来说,最理想的是有一个在单独的应用程序中设计的GUI,并以XML的形式导入,例如。在EA中编写按钮布局和对话表单不是一个好主意。
在这种情况下,首先,你应该写一个快速和良好的XML解析器。这是在家里的一个好东西。我自己使用的是一个版本的CodeBase,它对一些任务来说太慢了,特别是对新的构建来说。我已经把所有这些补丁和拐杖放在里面了。总的来说,写一个好的解析器吧,同志们!让每个人都能轻松应对。
 
Vasiliy Sokolov:
在这种情况下,你应该从编写一个快速和良好的XML解析器开始。家里有这个东西是很方便的。我自己也在使用一个版本的CodeBase,但它在某些任务上真的很慢,特别是在新的构建中。我已经把所有这些补丁和拐杖放在里面了。总的来说,写一个好的解析器吧,同志们!让每个人都能轻松应对。
也许你知道如何制作一个完全工作的、完全绘制的滑块?至少在一般情况下...我想掌握一般的概念。
 
Реter Konow:
也许你知道如何制作一个可以工作的、完整绘制的滑块?至少在一般情况下...我想了解一下一般的概念。
不幸的是,我不能。这是一个相当复杂的元素,即使你在普通基元的基础上创建它。
 
Реter Konow:
也许你知道如何制作一个完全工作的、完全绘制的滑块?至少在一般情况下...我想了解一下一般的概念。

看看CCanvas类。所有的渲染基元都是可用的。

其次,你可以为你的空的东西加载bmp,然后像BitBlt那样把它们洗到画布上。