2013-08-08 10 views
11

XCode 4.6で、NSWindowの代わりにNSPanelという簡単なCocoaアプリケーションを作成しました。私は非アクティブに オプションを有効にし、アプリケーションのすべてが正常に動作開始すると:"非アクティブ"のNSPanel -Modeが常に正しいカーソルを表示しない

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

他のアプリケーションをクリックしない限り、これはうまく動作します。 SafariやFinderなど。私は一度別のアプリケーションにフォーカスを与える瞬間から

、 私はをクリックして、同じくらい私が好きな私のパネル上にカーソルを移動することができ、 カーソルのスタイルはもう変更されません - それは、常に矢印のまま、それをすることはできません正常な動作に戻ります。

パネルは選択可能なままで、前面ではまだ移動してサイズを変更することができますが、 マウスカーソルは常に矢印のままです。 のように手動で を変更することはできません。

だから私はあなたが別のアプリケーションにフォーカスを与える場合でも、通常の 自動変更cursorstyle-とき-ホバリング・オーバー・パネル・エッジ・行動 を保持NSPanelを作成する方法を見つける必要があります。彼らはYES を返すように

は、私はすでに、私はcanBecomeKeyWindowcanBecomeMainWindowメソッドを上書きしているカスタマイズNSPanel級、 を使用しようとしましたが、私は私のパネルKeyWindowMainWindowを...作る場合でも

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

...カーソルの問題は解決しません。誰かが私をここに助けることができれば

は素晴らしいことだ:)

PS:ベースSDKおよびデプロイメントのターゲットは私のプロジェクトでは10.8


に設定されているので、私は説明していることが分かりました問題はパネルのウインドウステートには何もない。キーに設定されているかメインに設定されているかは関係ありませんが、カーソルの問題(常に矢印にとどまる)はアプリケーションのアクティベーション状態に関連しています。

パネルを所有しているアプリケーションがアクティブな間はすべて正常に動作しますが、別のアプリケーションをクリックすると、アプリケーションが無効になり、パネルをクリックしても再びアクティブ化されません。 "non-activating"オプションが有効になります。

問題は、ステータスバースクリーンキャプチャアプリケーションを作成していて、実行中のアプリケーションをすべて非アクティブにすることなくすべて表示する必要があるということです。問題は私が "non activating"オプションを必要としていることです。私は

[NSApp activateIgnoringOtherApps];

によってカーソルの問題を解決することができますが、その後のSafariでフルスクリーンビデオランニングのスクリーンショットを取ることはサファリを無効にして、私はしたくない映像を、最小限に抑えます。

+0

私は同じ問題があります。私が何かを見つけたら、ポストバックするかもしれない。 –

答えて

1

アプリがアクティブでないときに通常のAPIを使用してカーソルを変更することはできません。私はかなりウィンドウシステムがそれを許可していないと確信しています:アプリケーション間の境界の違反でしょう - あなたが背景からカーソルを設定しようとすると、フォアグラウンドアプリケーションもカーソルを設定しようとすると、勝つ?

もちろん、システムはそれを実行できます(⌘X4でスクリーンショットを撮った場合など)。これはウィンドウシステム自体にあるためです。

関連する問題