文章 "在 GUI 控件中使用布局和容器: CBox 类" - 页 2

 

此代码无法编译。构建 1702。

'pipvaluecalculator.mq5' pipvaluecalculator.mq5 1 1

...

'm_client_area' - 私有成员访问错误 PipValueCalculator.mqh 118 60

'm_client_area' - 私有成员访问错误 PipValueCalculator.mqh 118 91

'm_client_area' - 私有成员访问错误 PipValueCalculator.mqh 129 72

'm_client_area' - 私有成员访问错误 PipValueCalculator.mqh 148 75

'm_client_area' - 私有成员访问错误 PipValueCalculator.mqh 168 77

m_client_area' - 私有成员访问错误 PipValueCalculator.mqh 187 72

6 个错误,0 个警告 7 1

顺便提一句,除非我没注意,否则您应该指定文件的放置位置。我们需要尝试查看代码,才能知道我们需要在 Include 中创建一个 "Layouts "文件夹,并在其中放置 Box.mqh 文件。


 

我使用的是第 1755 版。

现在,Controls\Dialog.mqh 中CDialog 类上 的成员 m_client_area 是私有的,并且创建了新方法来获取宽度和高度属性。

对我来说,做了以下更改后就可以正常工作了。
a) 将 CDialog::m_client_area.Width() 替换为 CDialog::ClientAreaWidth()
b) 将 CDialog::m_client_area.Height() 替换为 CDialog::ClientAreaaHeight()
 
Alain Verleyen :

该程序可在 1702 年启动

pipvaluecalculator.mq5' pipvaluecalculator.mq5 1 1

...

m_client_area' - kesalahan akses anggota pribadi PipValueCalculator.mqh 118 60

m_client_area' - kesalahan akses anggota pribadi PipValueCalculator.mqh 118 91

m_client_area' - kesalahan akses anggota pribadi PipValueCalculator.mqh 129 72

'm_client_area' - kesalahan akses anggota pribadi PipValueCalculator.mqh 148 75

m_client_area' - kesalahan akses anggota pribadi PipValueCalculator.mqh 168 77

m_client_area' - kesalahan akses anggota pribadi PipValueCalculator.mqh 187 72

6 个错误(秒),0 个警告(秒) 7 1

如果您正在使用该文件,那么您可以在该文件的文件筐中找到该文件。如果您正在使用该功能,请在此输入您的密码。Kita perlu mencoba and melihat kode untuk mengetahui bahwa kita perlu membuat folder "Layouts" di Include and menempatkan file Box.mqh di dalamnya.Kita perlu mencoba and melihat kode untuk mengetahui bahwa kita perlu membuat folder "Layouts" di Include and menempatkan file Box.mqh di dalamnya.


 

我在使用这个有用的附加组件时遇到了一个问题。

我想请教那些了解标准控件的人。

由于这个带面板的附加组件使用了标准类 CWnd、CWndClient,我想了解它们的内部结构可能就足以明白 "狗在哪里打架 "了。

问题的实质。我们从文章中提取 Controls2.mq5 程序(编译时还需要 ControlsDialog2.mqh 和 Box.mqh),编译后运行。

除了 "数据选取器 "外,几乎一切正常。它只能打开和关闭,但在打开状态下不会对点击做出反应,而是跳过底层控件的事件。

MQ 的原始类似演示(Experts/Examples/Controls.mq5)中的 "datapicker "可以正常工作。

 
Stanislav Korotky:

除了 "数据选取器 "之外,几乎一切都运行正常。它只能打开和关闭,但在打开状态下,它不会对按压做出反应,而是跳过底层控件的事件。

MQ 的原始类似演示(Experts/Examples/Controls.mq5)中的 "datapicker "可以正常工作。

问题被删除了。在 CDatePicker 中,下拉菜单展开时没有调用 BringToTop(例如在 CComboBox 中)。在标准示例中,CDatePicker 能正常工作是因为它的初始化在创建 "leafbox "后被移动(有意或无意),而 "leafbox "在拓扑上位于 CDatePicker 的下方。而 CWndContainer::OnMouseEvent 中的控件会从最后一个添加到第一个。

要正常解决这个问题,必须覆盖 CDatePicker::ListShow,但它不是虚拟的。我们必须重新定义 CDatePicker::OnClickButton,并在其中添加 BringToTop。但是,我们无法像使用标准库中 的任何虚拟方法一样正确地完成该操作,因为所有成员变量都声明为私有。尤其是,我们无法编写

bool MyDatePicker::OnClickButton(void) // override
{
    return ((m_drop.Pressed()) ? BringToTop() && ListShow() : ListHide());
}

因为 m_drop 不可用。我们必须在打开和折叠时都调用 BringToTop。

#include <Controls/DatePicker.mqh>

class CDatePickerFixed: public CDatePicker
{
  protected:
    virtual bool OnClickButton() override
    {
      BringToTop();
      return CDatePicker::OnClickButton();
    }
};
 

有一些错误:


 
Thank you for sharing