屏幕规格

由函数 TerminalInfoInteger 提供的若干特性涉及计算机的视频子系统。

标识符

说明

TERMINAL_SCREEN_DPI

屏幕输出信息的分辨率以每线性英寸点数(DPI,每英寸点数)计量

TERMINAL_SCREEN_LEFT

虚拟屏幕左坐标

TERMINAL_SCREEN_TOP

虚拟屏幕上坐标

TERMINAL_SCREEN_WIDTH

虚拟屏幕宽度

TERMINAL_SCREEN_HEIGHT

虚拟屏幕高度

TERMINAL_LEFT

相对于虚拟屏幕的终端左坐标

TERMINAL_TOP

相对于虚拟屏幕的终端上坐标

TERMINAL_RIGHT

相对于虚拟屏幕的终端右坐标

TERMINAL_BOTTOM

相对于虚拟屏幕的终端下坐标

知道 TERMINAL_SCREEN_DPI 参数后,你可以设置 图形对象 的尺寸,以便这些图形对象在不同分辨率的显示器保持一致外观。例如,如果你想创建一个视觉大小为 X 厘米的按钮,则可以使用以下函数以屏幕点数(像素数)指定:

int cm2pixels(const double x)
{
   static const double inch2cm = 2.54// 1 inch equals 2.54 cm
   return (int)(x / inch2cm * TerminalInfoInteger(TERMINAL_SCREEN_DPI));
}

虚拟屏幕是所有显示器的边界框。如果系统中有多个显示器,并且排列顺序不同,严格从左到右,则虚拟屏幕的左坐标可能是负值,而中间(参考点)将处于两个显示器的边框上(位于主显示器的左上角)。

多显示器虚拟屏幕

多显示器虚拟屏幕

如果系统有一个显示器,则虚拟屏幕的大小完全与之对应。

终端坐标不考虑当前窗口是否为最大化(即,如果主窗口最大化,则该特性返回未最大化大小,尽管终端被扩展至整个显示器)。

可在 EnvScreen.mq5 脚本中检查读取屏幕属性。

void OnStart()
{
   PRTF(TerminalInfoInteger(TERMINAL_SCREEN_DPI));
   PRTF(TerminalInfoInteger(TERMINAL_SCREEN_LEFT));
   PRTF(TerminalInfoInteger(TERMINAL_SCREEN_TOP));
   PRTF(TerminalInfoInteger(TERMINAL_SCREEN_WIDTH));
   PRTF(TerminalInfoInteger(TERMINAL_SCREEN_HEIGHT));
   PRTF(TerminalInfoInteger(TERMINAL_LEFT));
   PRTF(TerminalInfoInteger(TERMINAL_TOP));
   PRTF(TerminalInfoInteger(TERMINAL_RIGHT));
   PRTF(TerminalInfoInteger(TERMINAL_BOTTOM));
}

下面是生成的日志条目的一个示例。

TerminalInfoInteger(TERMINAL_SCREEN_DPI)=96 / ok
TerminalInfoInteger(TERMINAL_SCREEN_LEFT)=0 / ok
TerminalInfoInteger(TERMINAL_SCREEN_TOP)=0 / ok
TerminalInfoInteger(TERMINAL_SCREEN_WIDTH)=1440 / ok
TerminalInfoInteger(TERMINAL_SCREEN_HEIGHT)=900 / ok
TerminalInfoInteger(TERMINAL_LEFT)=126 / ok
TerminalInfoInteger(TERMINAL_TOP)=41 / ok
TerminalInfoInteger(TERMINAL_RIGHT)=1334 / ok
TerminalInfoInteger(TERMINAL_BOTTOM)=836 / ok

除了屏幕和终端窗口的总体大小外,MQL 程序经常需要分析图表(终端内的子窗口)的当前大小。为此,有一组特殊函数(尤其是 ChartGetInteger),我们将在 图表 一节中讨论。