首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何获取Mac OS X Dock的位置、宽度和高度?可可/碳/C++/Qt

如何获取Mac OS X Dock的位置、宽度和高度?可可/碳/C++/Qt
EN

Stack Overflow用户
提问于 2016-03-06 19:54:30
回答 3查看 2.5K关注 0票数 6

我正在尝试获取我的C++/Qt应用程序中Mac OS X Dock的位置和宽度。但我只能找到获得桌面可用空间的方法,这意味着我可以获得Dock高度,但不能获得宽度。

有没有办法使用原生操作系统API获取Dock的位置和宽度?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-16 06:26:04

即使是在苹果的应用程序接口中,也看不到这样的事情是可能的,更不用说Qt了。

脑海中浮现的唯一解决方案,一个相当粗糙的解决方案,是截图并使用一些基本的图像识别来找到码头的位置和尺寸。

票数 0
EN

Stack Overflow用户

发布于 2017-03-20 16:13:58

这可能对无黑客攻击的解决方案有所帮助,NSScreen提供了一个方法(visibleframe),它可以从屏幕尺寸中减去菜单和Dock。frame方法同时包含这两种方法。

[NSStatusBar system​Status​Bar].thickness将返回菜单栏的高度。

https://developer.apple.com/reference/appkit/nsscreen/1388369-visibleframe?language=objc

票数 10
EN

Stack Overflow用户

发布于 2018-08-01 07:46:38

要扩展MacAndor的答案,您可以通过比较-[NSScreen visibleFrame] (不包括dock和菜单栏占用的空间)和包含整个屏幕宽度和高度的-[NSScreen frame]来推断dock位置。

下面的示例代码依赖于窗口所在的屏幕。此代码可以通过枚举所有屏幕而不是使用窗口的屏幕来适用于多个显示。

代码语言:javascript
复制
// Infer the dock position (left, bottom, right)
NSScreen *screen = [self.window screen];    
NSRect visibleFrame = [screen visibleFrame];
NSRect screenFrame = screen.frame;

if (visibleFrame.origin.x > screenFrame.origin.x) {
    NSLog(@"Dock is positioned on the LEFT");
} else if (visibleFrame.origin.y > screenFrame.origin.y) {
    NSLog(@"Dock is positioned on the BOTTOM");
} else if (visibleFrame.size.width < screenFrame.size.width) {
    NSLog(@"Dock is positioned on the RIGHT");
} else {
    NSLog(@"Dock is HIDDEN");
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35826550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档