12

NSPanelデフォルトの の代わりに を使用して、XCode 4.6 で単純な Cocoa アプリケーションを作成しましたNSWindow。Non-Activating オプションを有効にしてアプリケーションを起動すると、すべて正常に動作します。

パネルは他のすべてのものの前に表示され、マウス カーソルがパネルの端に置かれると、通常の矢印カーソルから適切なサイズ変更カーソルに変わるため、ユーザーはパネルのサイズを変更できることがわかります。

Safari や Finder などの他のアプリケーションをクリックしない限り、これは問題なく機能します。

一度別のアプリケーションにフォーカスを移した瞬間から、好きなだけ自分のパネルをクリックしてホバーすることができます。カーソルのスタイルはもう変更されません。カーソルは常に矢印のままで、通常の動作に戻ることはできません。

パネルは引き続き選択可能で前面にあり、移動およびサイズ変更を行うことができますが、マウス カーソルは常に矢印のままです。その後、次のようなものを使用して手動で変更することさえできません[[NSCursor crosshairCursor] set]

NSPanelそのため、別のアプリケーションにフォーカスを移した場合でも、通常の自動変更カーソル スタイルを維持する方法を見つける必要があります。

私はすでにカスタマイズされた -class を使用しようとしました。ここではand メソッドNSPanelを上書きして、 YES を返すようにしましたが、Panel を作成しても...canBecomeKeyWindowcanBecomeMainWindowKeyWindowMainWindow

[myPanel makeKeyAndOrderFront:self];
[myPanel makeMainWindow];

...カーソルの問題は解決しません。

誰かがここで私を助けることができれば素晴らしいでしょう:)

PS .: 私のプロジェクトでは、Base SDK と Deployment Target が 10.8 に設定されています。


そのため、説明されている問題はパネルのウィンドウ状態とは関係がないことがわかりました。key に設定されているか main に設定されているかは問題ではなく、カーソルの問題 (常に矢印のまま) は、アプリケーションのアクティブ化状態に関連しています。

パネルを所有するアプリケーションがアクティブである限り、すべて正常に動作しますが、別のアプリケーションをクリックすると、" non-activating" オプションが有効になっているため、パネルをクリックしてもアプリケーションが非アクティブになり、再びアクティブになりません。

問題は、non activating実行中のアプリケーションを非アクティブ化せずに、他のすべての前に表示して操作するステータスバー画面キャプチャアプリを作成しているため、「」オプションが必要なことです。私はカーソルの問題を解決することができました

[NSApp activateIgnoringOtherApps];

しかし、Safari で実行されているフルスクリーン ビデオのスクリーンショットを撮ると、Safari が非アクティブになり、ビデオが最小化されてしまいます。これは望ましくありません。

4

1 に答える 1

1

アプリがアクティブでないときに、通常の API を使用してカーソルを変更することはできないと思います。ウィンドウ システムが許可していないことは確かです。バックグラウンドからカーソルを設定しようとして、フォアグラウンド アプリもカーソルを設定しようとすると、アプリ間の境界に違反することになります。勝つ?

もちろん、システムはそれを行うことができます (⌘⇧4 でスクリーンショットを撮るときのように)。それはウィンドウ システム自体にあるからです。

于 2014-02-09T11:45:22.907 に答える