Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c CGGetDisplaysWithPoint的最大显示_Objective C_Macos - Fatal编程技术网

Objective c CGGetDisplaysWithPoint的最大显示

Objective c CGGetDisplaysWithPoint的最大显示,objective-c,macos,Objective C,Macos,定义: 根据定义,CGGetDisplaysWithPoint采用4个参数: CGPoint对象 表示返回的最大显示数的int32 通过引用传递的可变数组,该数组将填充找到的DisplayID 表示匹配显示计数的int32 语法: CGError CGGetDisplaysWithPoint(CGPoint点、uint32\u t最大显示、CGDirectDisplayID*显示、uint32\u t*匹配显示计数) 这很好,我可以让这个函数工作,但是我很困惑我应该如何处理maxDispla

定义:

根据定义,CGGetDisplaysWithPoint采用4个参数:

  • CGPoint对象
  • 表示返回的最大显示数的int32
  • 通过引用传递的可变数组,该数组将填充找到的DisplayID
  • 表示匹配显示计数的int32
语法:

CGError CGGetDisplaysWithPoint(CGPoint点、uint32\u t最大显示、CGDirectDisplayID*显示、uint32\u t*匹配显示计数)

这很好,我可以让这个函数工作,但是我很困惑我应该如何处理maxDisplays参数

据我所知,如果我将maxDisplays设置为5,那么如果有人有6个显示器,则随机选择的像素有1/6的机会找不到显示器


那么,我们是否只是将maxDisplays设置为不现实的值,比如99,然后再释放阵列?此参数的意义是什么?

此参数的意义是防止函数写入数组末尾。您必须告诉它阵列的容量。注意,<代码>显示参数既不是COCKA也不是核心基础可变的数组对象。这是一个C型数组。它是“可变的”,因为它不是“常量”,但它不是一个管理自己存储的对象。您负责管理该存储,并且必须将其容量传达给打算在其中存储数据的任何功能(或以其他方式保证该功能不会溢出)

因此,您的问题应该是如何确定阵列的容量。有两种基本方法:

1) 调用函数传递
displays
参数的
NULL
,调用
maxDisplays
的任意值(最好使用0)。如文件所述,当
显示
NULL
时,
maxDisplays
被忽略,函数通过
匹配显示计数
输出其边界包含给定点的显示数。然后,分配一个包含(至少)多个元素的数组以用于接收显示ID,并再次调用该函数,将该数组传递给
displays
,并将其容量传递给
maxDisplays

2) 使用容量为32的阵列。它没有明确的文档记录,但在API中是隐含的,这是支持的最大显示数量。可以使用
CGDisplayIDToOpenGLDisplayMask()
将显示ID转换为OpenGL显示掩码。类型
CGOpenGLDisplayMask
用于保存OpenGL显示掩码。它被定义为
uint32\u t
,一个32位的值。因此,最多可以有32个活动显示器


这种技术在一些苹果文档中使用,如、和。最后一个参数甚至在
CGOpenGLDisplayMask
中的位数与最大显示位数之间建立了直接联系。

参数的目的是防止函数写入数组末尾。您必须告诉它阵列的容量。注意,<代码>显示参数既不是COCKA也不是核心基础可变的数组对象。这是一个C型数组。它是“可变的”,因为它不是“常量”,但它不是一个管理自己存储的对象。您负责管理该存储,并且必须将其容量传达给打算在其中存储数据的任何功能(或以其他方式保证该功能不会溢出)

因此,您的问题应该是如何确定阵列的容量。有两种基本方法:

1) 调用函数传递
displays
参数的
NULL
,调用
maxDisplays
的任意值(最好使用0)。如文件所述,当
显示
NULL
时,
maxDisplays
被忽略,函数通过
匹配显示计数
输出其边界包含给定点的显示数。然后,分配一个包含(至少)多个元素的数组以用于接收显示ID,并再次调用该函数,将该数组传递给
displays
,并将其容量传递给
maxDisplays

2) 使用容量为32的阵列。它没有明确的文档记录,但在API中是隐含的,这是支持的最大显示数量。可以使用
CGDisplayIDToOpenGLDisplayMask()
将显示ID转换为OpenGL显示掩码。类型
CGOpenGLDisplayMask
用于保存OpenGL显示掩码。它被定义为
uint32\u t
,一个32位的值。因此,最多可以有32个活动显示器


这种技术在一些苹果文档中使用,如、和。最后一个甚至在
CGOpenGLDisplayMask
中的位数和最大显示位数之间建立了直接联系。

我认为它不会工作。当然,很多模仿苹果示例的代码都会崩溃。这是你担心的吗?;)事实上这让我的生活轻松多了我希望它不会起作用。当然,很多模仿苹果示例的代码都会崩溃。这是你担心的吗?;)事实上这让我的生活轻松多了P