我有一个Carbon LSUIElement应用程序,它在后台运行(可能在菜单栏中有一个图标,取决于偏好),有时需要向用户显示一个对话框-有时是为了响应用户事件,但有时是为了响应后台任务失败或类似的情况。
(我使用的是Qt4.5,所以应用程序是基于碳的;使用Qt4.6,事情将是基于Cocoa的,但听起来问题也可能存在)。
问题是,当我打开一个窗口并显示它时,它不会被带到前面。我假设这是一个LSUIElement应用程序的完美设计。Qt在Carbon中使用SelectWindow,在Cocoa中使用makeKeyAndOrderFront,将窗口(和应用程序)放在前面。
为了解决这个问题,我尝试直接访问window服务器:(前几个步骤是获取WindowID,使用Qt-Cocoa会更简单,因为我可以使用NSWindow:nativeWindow)
WindowRef ref = HIViewGetWindow((HIViewRef) aWidget->winId());
CGSWindow wid = GetNativeWindowFromWindowRef(ref);
CGSConnection cid =_CGSDefaultConnection();
CGSOrderWindow(cid, wid, 1 /* above everything */, 0 /* NULL */);这在某种程度上是有效的-窗口位于前面,但它没有突出显示或键盘聚焦。是否有其他步骤来解决这些问题,或者是否有更简单的解决方案来解决整个问题?
发布于 2010-05-29 07:22:17
使用SetFrontProcessWithOptions将你的窗口置于其他应用程序的前面。
发布于 2011-08-03 22:49:15
尝试:
[NSApp activateIgnoringOtherApps: YES]https://stackoverflow.com/questions/1593255
复制相似问题